diff --git a/.devops/testing_ci.yml b/.devops/testing_ci.yml new file mode 100644 index 0000000000..67d12d6503 --- /dev/null +++ b/.devops/testing_ci.yml @@ -0,0 +1,71 @@ +# Python Django +# Test a Django project on multiple versions of Python. +# Add steps that analyze code, save build artifacts, deploy, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/python + +trigger: +- master + +pool: + vmImage: ubuntu-latest +strategy: + matrix: + Python39: + PYTHON_VERSION: '3.9' + maxParallel: 3 + +steps: +- task: UsePythonVersion@0 + inputs: + versionSpec: '$(PYTHON_VERSION)' + architecture: 'x64' + +- task: PythonScript@0 + displayName: 'Export project path' + inputs: + scriptSource: 'inline' + script: | + """Search all subdirectories for `manage.py`.""" + from glob import iglob + from os import path + # Python >= 3.5 + manage_py = next(iglob(path.join('**', 'manage.py'), recursive=True), None) + if not manage_py: + raise SystemExit('Could not find a Django project') + project_location = path.dirname(path.abspath(manage_py)) + print('Found Django project in', project_location) + print('##vso[task.setvariable variable=projectRoot]{}'.format(project_location)) + +- script: | + python -m pip install --upgrade pip setuptools wheel + pip install -r requirements.txt + pip install -r requirements-dev.txt + pip install unittest-xml-reporting coverage invoke + sudo apt-get install poppler-utils + sudo apt-get install libpoppler-dev + displayName: 'Install prerequisites' + +- script: | + pushd '$(projectRoot)' + invoke update + coverage run manage.py test --testrunner xmlrunner.extra.djangotestrunner.XMLTestRunner --no-input + coverage xml -i + displayName: 'Run tests' + env: + INVENTREE_DB_ENGINE: sqlite3 + INVENTREE_DB_NAME: inventree + INVENTREE_MEDIA_ROOT: ./media + INVENTREE_STATIC_ROOT: ./static + INVENTREE_BACKUP_DIR: ./backup + INVENTREE_PLUGINS_ENABLED: true + +- task: PublishTestResults@2 + inputs: + testResultsFiles: "**/TEST-*.xml" + testRunTitle: 'Python $(PYTHON_VERSION)' + condition: succeededOrFailed() + +- task: PublishCodeCoverageResults@1 + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index f728e5baf8..aeff58f965 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -6,7 +6,7 @@ body: id: no-duplicate-issues attributes: label: "Please verify that this bug has NOT been raised before." - description: "Search in the issues sections by clicking [HERE](https://github.com/inventree/inventree/issues?q=)" + description: "Search in the issues sections by clicking [HERE](https://github.com/inventree/inventree/issues?q=) and read the [Frequently Asked Questions](https://docs.inventree.org/en/latest/faq/)!" options: - label: "I checked and didn't find a similar issue" required: true diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 4970841c60..c4966e1216 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -48,7 +48,7 @@ runs: if: ${{ inputs.python == 'true' }} shell: bash run: | - python3 -m pip install -U pip + python3 -m pip install pip==23.0.1 pip3 install invoke wheel - name: Install Specific Python Dependencies if: ${{ inputs.pip-dependency }} diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 199bf4d939..15e29d0612 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -34,6 +34,8 @@ jobs: cancel-in-progress: true runs-on: ubuntu-latest permissions: + contents: read + packages: write id-token: write env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -95,6 +97,15 @@ jobs: with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Log into registry ghcr.io + if: github.event_name != 'pull_request' + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # pin@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract Docker metadata if: github.event_name != 'pull_request' id: meta @@ -102,6 +113,8 @@ jobs: with: images: | inventree/inventree + ghcr.io/inventree/inventree + - name: Build and Push id: build-and-push if: github.event_name != 'pull_request' @@ -115,6 +128,7 @@ jobs: build-args: | commit_hash=${{ env.git_commit_hash }} commit_date=${{ env.git_commit_date }} + - name: Sign the published image if: ${{ false }} # github.event_name != 'pull_request' env: diff --git a/.gitignore b/.gitignore index 83fef7d272..98610ffea5 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ _tmp.csv inventree/label.pdf inventree/label.png inventree/my_special* +_tests*.txt # Sphinx files docs/_build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8c2b4d80a1..553a649749 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,17 +19,16 @@ repos: hooks: - id: flake8 additional_dependencies: [ - 'flake8-bugbear', 'flake8-docstrings', 'flake8-string-format', 'pep8-naming ', ] - repo: https://github.com/pycqa/isort - rev: '5.11.4' + rev: '5.12.0' hooks: - id: isort - repo: https://github.com/jazzband/pip-tools - rev: 6.12.1 + rev: 6.12.3 hooks: - id: pip-compile name: pip-compile requirements-dev.in diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bbcdfd703d..cf59412b68 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ docker compose run inventree-dev-server invoke setup-test docker compose up -d ``` -Read the [InvenTree setup documentation](https://inventree.readthedocs.io/en/latest/start/intro/) for a complete installation reference guide. +Read the [InvenTree setup documentation](https://docs.inventree.org/en/latest/start/intro/) for a complete installation reference guide. ### Setup Devtools diff --git a/Dockerfile b/Dockerfile index 2b79feb7d7..b07a769b86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,8 +9,7 @@ # - Runs InvenTree web server under django development server # - Monitors source files for any changes, and live-reloads server - -FROM python:3.9-slim as base +FROM python:3.9-slim as inventree_base # Build arguments for this image ARG commit_hash="" @@ -19,9 +18,6 @@ ARG commit_tag="" ENV PYTHONUNBUFFERED 1 -# Ref: https://github.com/pyca/cryptography/issues/5776 -ENV CRYPTOGRAPHY_DONT_BUILD_RUST 1 - ENV INVENTREE_LOG_LEVEL="WARNING" ENV INVENTREE_DOCKER="true" @@ -60,7 +56,7 @@ RUN apt-get update # Install required system packages RUN apt-get install -y --no-install-recommends \ - git gcc g++ gettext gnupg libffi-dev \ + git gcc g++ gettext gnupg libffi-dev libssl-dev \ # Weasyprint requirements : https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#debian-11 poppler-utils libpango-1.0-0 libpangoft2-1.0-0 \ # Image format support @@ -76,6 +72,14 @@ RUN apt-get install -y --no-install-recommends \ # Update pip RUN pip install --upgrade pip +# For ARMv7 architecture, add the pinwheels repo (for cryptography library) +# Otherwise, we have to build from source, which is difficult +# Ref: https://github.com/inventree/InvenTree/pull/4598 +RUN \ + if [ `dpkg --print-architecture` = "armhf" ]; then \ + printf "[global]\nextra-index-url=https://www.piwheels.org/simple\n" > /etc/pip.conf ; \ + fi + # Install required base-level python packages COPY ./docker/requirements.txt base_requirements.txt RUN pip install --disable-pip-version-check -U -r base_requirements.txt @@ -85,7 +89,7 @@ RUN pip install --disable-pip-version-check -U -r base_requirements.txt # - Installs required python packages from requirements.txt # - Starts a gunicorn webserver -FROM base as production +FROM inventree_base as production ENV INVENTREE_DEBUG=False @@ -121,7 +125,7 @@ ENTRYPOINT ["/bin/bash", "./init.sh"] # TODO: e.g. -b ${INVENTREE_WEB_ADDR}:${INVENTREE_WEB_PORT} fails here CMD gunicorn -c ./gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:8000 --chdir ./InvenTree -FROM base as dev +FROM inventree_base as dev # The development image requires the source code to be mounted to /home/inventree/ # So from here, we don't actually "do" anything, apart from some file management diff --git a/InvenTree/InvenTree/api.py b/InvenTree/InvenTree/api.py index 51dcfe4fa6..19786f59dc 100644 --- a/InvenTree/InvenTree/api.py +++ b/InvenTree/InvenTree/api.py @@ -5,16 +5,20 @@ from django.db import transaction from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ -from django_filters.rest_framework import DjangoFilterBackend from django_q.models import OrmQ -from rest_framework import filters, permissions +from rest_framework import permissions from rest_framework.response import Response from rest_framework.serializers import ValidationError +from rest_framework.views import APIView +import users.models +from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ListCreateAPI from InvenTree.permissions import RolePermission from part.templatetags.inventree_extras import plugins_info +from plugin.serializers import MetadataSerializer +from .mixins import RetrieveUpdateAPI from .status import is_worker_running from .version import (inventreeApiVersion, inventreeInstanceName, inventreeVersion) @@ -197,14 +201,174 @@ class AttachmentMixin: RolePermission, ] - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - filters.SearchFilter, - ] + filter_backends = SEARCH_ORDER_FILTER def perform_create(self, serializer): """Save the user information when a file is uploaded.""" attachment = serializer.save() attachment.user = self.request.user attachment.save() + + +class APISearchView(APIView): + """A general-purpose 'search' API endpoint + + Returns hits against a number of different models simultaneously, + to consolidate multiple API requests into a single query. + + Is much more efficient and simplifies code! + """ + + permission_classes = [ + permissions.IsAuthenticated, + ] + + def get_result_types(self): + """Construct a list of search types we can return""" + + import build.api + import company.api + import order.api + import part.api + import stock.api + + return { + 'build': build.api.BuildList, + 'company': company.api.CompanyList, + 'manufacturerpart': company.api.ManufacturerPartList, + 'supplierpart': company.api.SupplierPartList, + 'part': part.api.PartList, + 'partcategory': part.api.CategoryList, + 'purchaseorder': order.api.PurchaseOrderList, + 'returnorder': order.api.ReturnOrderList, + 'salesorder': order.api.SalesOrderList, + 'stockitem': stock.api.StockList, + 'stocklocation': stock.api.StockLocationList, + } + + def post(self, request, *args, **kwargs): + """Perform search query against available models""" + + data = request.data + + results = {} + + # These parameters are passed through to the individual queries, with optional default values + pass_through_params = { + 'search': '', + 'search_regex': False, + 'search_whole': False, + 'limit': 1, + 'offset': 0, + } + + for key, cls in self.get_result_types().items(): + # Only return results which are specifically requested + if key in data: + + params = data[key] + + for k, v in pass_through_params.items(): + params[k] = request.data.get(k, v) + + # Enforce json encoding + params['format'] = 'json' + + # Ignore if the params are wrong + if type(params) is not dict: + continue + + view = cls() + + # Override regular query params with specific ones for this search request + request._request.GET = params + view.request = request + view.format_kwarg = 'format' + + # Check permissions and update results dict with particular query + model = view.serializer_class.Meta.model + app_label = model._meta.app_label + model_name = model._meta.model_name + table = f'{app_label}_{model_name}' + + try: + if users.models.RuleSet.check_table_permission(request.user, table, 'view'): + results[key] = view.list(request, *args, **kwargs).data + else: + results[key] = { + 'error': _('User does not have permission to view this model') + } + except Exception as exc: + results[key] = { + 'error': str(exc) + } + + return Response(results) + + +class StatusView(APIView): + """Generic API endpoint for discovering information on 'status codes' for a particular model. + + This class should be implemented as a subclass for each type of status. + For example, the API endpoint /stock/status/ will have information about + all available 'StockStatus' codes + """ + + permission_classes = [ + permissions.IsAuthenticated, + ] + + # Override status_class for implementing subclass + MODEL_REF = 'statusmodel' + + def get_status_model(self, *args, **kwargs): + """Return the StatusCode moedl based on extra parameters passed to the view""" + + status_model = self.kwargs.get(self.MODEL_REF, None) + + if status_model is None: + raise ValidationError(f"StatusView view called without '{self.MODEL_REF}' parameter") + + return status_model + + def get(self, request, *args, **kwargs): + """Perform a GET request to learn information about status codes""" + + status_class = self.get_status_model() + + if not status_class: + raise NotImplementedError("status_class not defined for this endpoint") + + data = { + 'class': status_class.__name__, + 'values': status_class.dict(), + } + + return Response(data) + + +class MetadataView(RetrieveUpdateAPI): + """Generic API endpoint for reading and editing metadata for a model""" + + MODEL_REF = 'model' + + def get_model_type(self): + """Return the model type associated with this API instance""" + model = self.kwargs.get(self.MODEL_REF, None) + + if model is None: + raise ValidationError(f"MetadataView called without '{self.MODEL_REF}' parameter") + + return model + + def get_permission_model(self): + """Return the 'permission' model associated with this view""" + return self.get_model_type() + + def get_queryset(self): + """Return the queryset for this endpoint""" + return self.get_model_type().objects.all() + + def get_serializer(self, *args, **kwargs): + """Return MetadataSerializer instance""" + return MetadataSerializer(self.get_model_type(), *args, **kwargs) diff --git a/InvenTree/InvenTree/api_tester.py b/InvenTree/InvenTree/api_tester.py index e76610292d..75e41a6bae 100644 --- a/InvenTree/InvenTree/api_tester.py +++ b/InvenTree/InvenTree/api_tester.py @@ -8,6 +8,7 @@ from django.contrib.auth import get_user_model from django.contrib.auth.models import Group from django.http.response import StreamingHttpResponse +from djmoney.contrib.exchange.models import ExchangeBackend, Rate from rest_framework.test import APITestCase from plugin import registry @@ -32,48 +33,69 @@ class UserMixin: # Set list of roles automatically associated with the user roles = [] - def setUp(self): - """Setup for all tests.""" - super().setUp() + @classmethod + def setUpTestData(cls): + """Run setup for all tests in a given class""" + super().setUpTestData() # Create a user to log in with - self.user = get_user_model().objects.create_user( - username=self.username, - password=self.password, - email=self.email + cls.user = get_user_model().objects.create_user( + username=cls.username, + password=cls.password, + email=cls.email ) # Create a group for the user - self.group = Group.objects.create(name='my_test_group') - self.user.groups.add(self.group) + cls.group = Group.objects.create(name='my_test_group') + cls.user.groups.add(cls.group) - if self.superuser: - self.user.is_superuser = True + if cls.superuser: + cls.user.is_superuser = True - if self.is_staff: - self.user.is_staff = True + if cls.is_staff: + cls.user.is_staff = True - self.user.save() + cls.user.save() # Assign all roles if set - if self.roles == 'all': - self.assignRole(assign_all=True) + if cls.roles == 'all': + cls.assignRole(group=cls.group, assign_all=True) + # else filter the roles else: - for role in self.roles: - self.assignRole(role) + for role in cls.roles: + cls.assignRole(role=role, group=cls.group) + + def setUp(self): + """Run setup for individual test methods""" if self.auto_login: self.client.login(username=self.username, password=self.password) - def assignRole(self, role=None, assign_all: bool = False): - """Set the user roles for the registered user.""" - # role is of the format 'rule.permission' e.g. 'part.add' + @classmethod + def assignRole(cls, role=None, assign_all: bool = False, group=None): + """Set the user roles for the registered user. + + Arguments: + role: Role of the format 'rule.permission' e.g. 'part.add' + assign_all: Set to True to assign *all* roles + group: The group to assign roles to (or leave None to use the group assigned to this class) + """ + + if group is None: + group = cls.group + + if type(assign_all) is not bool: + # Raise exception if common mistake is made! + raise TypeError('assignRole: assign_all must be a boolean value') + + if not role and not assign_all: + raise ValueError('assignRole: either role must be provided, or assign_all must be set') if not assign_all and role: rule, perm = role.split('.') - for ruleset in self.group.rule_sets.all(): + for ruleset in group.rule_sets.all(): if assign_all or ruleset.name == rule: @@ -105,9 +127,64 @@ class PluginMixin: self.plugin_confs = PluginConfig.objects.all() -class InvenTreeAPITestCase(UserMixin, APITestCase): +class ExchangeRateMixin: + """Mixin class for generating exchange rate data""" + + def generate_exchange_rates(self): + """Helper function which generates some exchange rates to work with""" + + rates = { + 'AUD': 1.5, + 'CAD': 1.7, + 'GBP': 0.9, + 'USD': 1.0, + } + + # Create a dummy backend + ExchangeBackend.objects.create( + name='InvenTreeExchange', + base_currency='USD', + ) + + backend = ExchangeBackend.objects.get(name='InvenTreeExchange') + + items = [] + + for currency, rate in rates.items(): + items.append( + Rate( + currency=currency, + value=rate, + backend=backend, + ) + ) + + Rate.objects.bulk_create(items) + + +class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): """Base class for running InvenTree API tests.""" + def checkResponse(self, url, method, expected_code, response): + """Debug output for an unexpected response""" + + # No expected code, return + if expected_code is None: + return + + if expected_code != response.status_code: + + print(f"Unexpected {method} response at '{url}': status_code = {response.status_code}") + + if hasattr(response, 'data'): + print('data:', response.data) + if hasattr(response, 'body'): + print('body:', response.body) + if hasattr(response, 'content'): + print('content:', response.content) + + self.assertEqual(expected_code, response.status_code) + def getActions(self, url): """Return a dict of the 'actions' available at a given endpoint. @@ -131,13 +208,7 @@ class InvenTreeAPITestCase(UserMixin, APITestCase): response = self.client.get(url, data, format=format) - if expected_code is not None: - - if response.status_code != expected_code: - print(f"Unexpected response at '{url}': status_code = {response.status_code}") - print(response.data) - - self.assertEqual(response.status_code, expected_code) + self.checkResponse(url, 'GET', expected_code, response) return response @@ -150,17 +221,7 @@ class InvenTreeAPITestCase(UserMixin, APITestCase): response = self.client.post(url, data=data, format=format) - if expected_code is not None: - - if response.status_code != expected_code: - print(f"Unexpected response at '{url}': status code = {response.status_code}") - - if hasattr(response, 'data'): - print(response.data) - else: - print(f"(response object {type(response)} has no 'data' attribute") - - self.assertEqual(response.status_code, expected_code) + self.checkResponse(url, 'POST', expected_code, response) return response @@ -172,8 +233,7 @@ class InvenTreeAPITestCase(UserMixin, APITestCase): response = self.client.delete(url, data=data, format=format) - if expected_code is not None: - self.assertEqual(response.status_code, expected_code) + self.checkResponse(url, 'DELETE', expected_code, response) return response @@ -181,8 +241,7 @@ class InvenTreeAPITestCase(UserMixin, APITestCase): """Issue a PATCH request.""" response = self.client.patch(url, data=data, format=format) - if expected_code is not None: - self.assertEqual(response.status_code, expected_code) + self.checkResponse(url, 'PATCH', expected_code, response) return response @@ -190,13 +249,7 @@ class InvenTreeAPITestCase(UserMixin, APITestCase): """Issue a PUT request.""" response = self.client.put(url, data=data, format=format) - if expected_code is not None: - - if response.status_code != expected_code: - print(f"Unexpected response at '{url}':") - print(response.data) - - self.assertEqual(response.status_code, expected_code) + self.checkResponse(url, 'PUT', expected_code, response) return response @@ -204,8 +257,7 @@ class InvenTreeAPITestCase(UserMixin, APITestCase): """Issue an OPTIONS request.""" response = self.client.options(url, format='json') - if expected_code is not None: - self.assertEqual(response.status_code, expected_code) + self.checkResponse(url, 'OPTIONS', expected_code, response) return response diff --git a/InvenTree/InvenTree/api_version.py b/InvenTree/InvenTree/api_version.py index 7f207ec394..33222ebe75 100644 --- a/InvenTree/InvenTree/api_version.py +++ b/InvenTree/InvenTree/api_version.py @@ -2,11 +2,55 @@ # InvenTree API version -INVENTREE_API_VERSION = 94 +INVENTREE_API_VERSION = 107 """ Increment this API version number whenever there is a significant change to the API that any clients need to know about +v107 -> 2023-04-04 : https://github.com/inventree/InvenTree/pull/4575 + - Adds barcode support for PurchaseOrder model + - Adds barcode support for ReturnOrder model + - Adds barcode support for SalesOrder model + - Adds barcode support for BuildOrder model + +v106 -> 2023-04-03 : https://github.com/inventree/InvenTree/pull/4566 + - Adds 'search_regex' parameter to all searchable API endpoints + +v105 -> 2023-03-31 : https://github.com/inventree/InvenTree/pull/4543 + - Adds API endpoints for status label information on various models + +v104 -> 2023-03-23 : https://github.com/inventree/InvenTree/pull/4488 + - Adds various endpoints for new "ReturnOrder" models + - Adds various endpoints for new "ReturnOrderReport" templates + - Exposes API endpoints for "Contact" model + +v103 -> 2023-03-17 : https://github.com/inventree/InvenTree/pull/4410 + - Add metadata to several more models + +v102 -> 2023-03-18 : https://github.com/inventree/InvenTree/pull/4505 +- Adds global search API endpoint for consolidated search results + +v101 -> 2023-03-07 : https://github.com/inventree/InvenTree/pull/4462 + - Adds 'total_in_stock' to Part serializer, and supports API ordering + +v100 -> 2023-03-04 : https://github.com/inventree/InvenTree/pull/4452 + - Adds bulk delete of PurchaseOrderLineItems to API + +v99 -> 2023-03-03 : https://github.com/inventree/InvenTree/pull/4445 + - Adds sort by "responsible" to PurchaseOrderAPI + +v98 -> 2023-02-24 : https://github.com/inventree/InvenTree/pull/4408 + - Adds "responsible" filter to Build API + +v97 -> 2023-02-20 : https://github.com/inventree/InvenTree/pull/4377 + - Adds "external" attribute to StockLocation model + +v96 -> 2023-02-16 : https://github.com/inventree/InvenTree/pull/4345 + - Adds stocktake report generation functionality + +v95 -> 2023-02-16 : https://github.com/inventree/InvenTree/pull/4346 + - Adds "CompanyAttachment" model (and associated API endpoints) + v94 -> 2023-02-10 : https://github.com/inventree/InvenTree/pull/4327 - Adds API endpoints for the "Group" auth model diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index 3e81933b10..d40ea4eb29 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -12,10 +12,9 @@ from django.db import transaction from django.db.utils import IntegrityError import InvenTree.tasks +from InvenTree.config import get_setting from InvenTree.ready import canAppAccessDatabase, isInTestMode -from .config import get_setting - logger = logging.getLogger("inventree") @@ -24,8 +23,18 @@ class InvenTreeConfig(AppConfig): name = 'InvenTree' def ready(self): - """Setup background tasks and update exchange rates.""" + """Run system wide setup init steps. + + Like: + - Checking if migrations should be run + - Cleaning up tasks + - Starting regular tasks + - Updateing exchange rates + - Collecting notification mehods + - Adding users set in the current environment + """ if canAppAccessDatabase() or settings.TESTING_ENV: + InvenTree.tasks.check_for_migrations(worker=False) self.remove_obsolete_tasks() @@ -60,7 +69,10 @@ class InvenTreeConfig(AppConfig): logger.info("Starting background tasks...") - for task in InvenTree.tasks.tasks.task_list: + # List of collected tasks found with the @scheduled_task decorator + tasks = InvenTree.tasks.tasks.task_list + + for task in tasks: ref_name = f'{task.func.__module__}.{task.func.__name__}' InvenTree.tasks.schedule_task( ref_name, @@ -75,7 +87,7 @@ class InvenTreeConfig(AppConfig): force_async=True, ) - logger.info("Started background tasks...") + logger.info(f"Started {len(tasks)} scheduled background tasks...") def collect_tasks(self): """Collect all background tasks.""" diff --git a/InvenTree/InvenTree/config.py b/InvenTree/InvenTree/config.py index 892e5751c4..720e7bd6eb 100644 --- a/InvenTree/InvenTree/config.py +++ b/InvenTree/InvenTree/config.py @@ -1,6 +1,7 @@ """Helper functions for loading InvenTree configuration options.""" import datetime +import json import logging import os import random @@ -13,6 +14,47 @@ CONFIG_DATA = None CONFIG_LOOKUPS = {} +def to_list(value, delimiter=','): + """Take a configuration setting and make sure it is a list. + + For example, we might have a configuration setting taken from the .config file, + which is already a list. + + However, the same setting may be specified via an environment variable, + using a comma delimited string! + """ + + if type(value) in [list, tuple]: + return value + + # Otherwise, force string value + value = str(value) + + return [x.strip() for x in value.split(delimiter)] + + +def to_dict(value): + """Take a configuration setting and make sure it is a dict. + + For example, we might have a configuration setting taken from the .config file, + which is already an object/dict. + + However, the same setting may be specified via an environment variable, + using a valid JSON string! + """ + if value is None: + return {} + + if type(value) == dict: + return value + + try: + return json.loads(value) + except Exception as error: + logger.error(f"Failed to parse value '{value}' as JSON with error {error}. Ensure value is a valid JSON string.") + return {} + + def is_true(x): """Shortcut function to determine if a value "looks" like a boolean""" return str(x).strip().lower() in ['1', 'y', 'yes', 't', 'true', 'on'] @@ -101,7 +143,16 @@ def get_setting(env_var=None, config_key=None, default_value=None, typecast=None """ def try_typecasting(value, source: str): """Attempt to typecast the value""" - if typecast is not None: + + # Force 'list' of strings + if typecast is list: + value = to_list(value) + + # Valid JSON string is required + elif typecast is dict: + value = to_dict(value) + + elif typecast is not None: # Try to typecast the value try: val = typecast(value) @@ -109,6 +160,7 @@ def get_setting(env_var=None, config_key=None, default_value=None, typecast=None return val except Exception as error: logger.error(f"Failed to typecast '{env_var}' with value '{value}' to type '{typecast}' with error {error}") + set_metadata(source) return value diff --git a/InvenTree/InvenTree/context.py b/InvenTree/InvenTree/context.py index 6c82137d3b..f6cb54af7f 100644 --- a/InvenTree/InvenTree/context.py +++ b/InvenTree/InvenTree/context.py @@ -4,6 +4,7 @@ import InvenTree.status from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus, + ReturnOrderLineStatus, ReturnOrderStatus, SalesOrderStatus, StockHistoryCode, StockStatus) from users.models import RuleSet, check_user_role @@ -58,6 +59,8 @@ def status_codes(request): return { # Expose the StatusCode classes to the templates + 'ReturnOrderStatus': ReturnOrderStatus, + 'ReturnOrderLineStatus': ReturnOrderLineStatus, 'SalesOrderStatus': SalesOrderStatus, 'PurchaseOrderStatus': PurchaseOrderStatus, 'BuildStatus': BuildStatus, diff --git a/InvenTree/InvenTree/exceptions.py b/InvenTree/InvenTree/exceptions.py index 1b7dcbb20e..09fc4de192 100644 --- a/InvenTree/InvenTree/exceptions.py +++ b/InvenTree/InvenTree/exceptions.py @@ -55,10 +55,25 @@ def exception_handler(exc, context): """Custom exception handler for DRF framework. Ref: https://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling - Catches any errors not natively handled by DRF, and re-throws as an error DRF can handle + Catches any errors not natively handled by DRF, and re-throws as an error DRF can handle. + + If sentry error reporting is enabled, we will also provide the original exception to sentry.io """ response = None + if settings.SENTRY_ENABLED and settings.SENTRY_DSN and not settings.DEBUG: + # Report this exception to sentry.io + from sentry_sdk import capture_exception + + # The following types of errors are ignored, they are "expected" + do_not_report = [ + DjangoValidationError, + DRFValidationError, + ] + + if not any([isinstance(exc, err) for err in do_not_report]): + capture_exception(exc) + # Catch any django validation error, and re-throw a DRF validation error if isinstance(exc, DjangoValidationError): exc = DRFValidationError(detail=serializers.as_serializer_error(exc)) diff --git a/InvenTree/InvenTree/filters.py b/InvenTree/InvenTree/filters.py index 6cd405cf9e..658de57d87 100644 --- a/InvenTree/InvenTree/filters.py +++ b/InvenTree/InvenTree/filters.py @@ -1,9 +1,66 @@ """General filters for InvenTree.""" -from rest_framework.filters import OrderingFilter +from django_filters import rest_framework as rest_filters +from rest_framework import filters + +from InvenTree.helpers import str2bool -class InvenTreeOrderingFilter(OrderingFilter): +class InvenTreeSearchFilter(filters.SearchFilter): + """Custom search filter which allows adjusting of search terms dynamically""" + + def get_search_fields(self, view, request): + """Return a set of search fields for the request, adjusted based on request params. + + The following query params are available to 'augment' the search (in decreasing order of priority) + - search_regex: If True, search is perfomed on 'regex' comparison + """ + + regex = str2bool(request.query_params.get('search_regex', False)) + + search_fields = super().get_search_fields(view, request) + + fields = [] + + if search_fields: + for field in search_fields: + if regex: + field = '$' + field + + fields.append(field) + + return fields + + def get_search_terms(self, request): + """Return the search terms for this search request. + + Depending on the request parameters, we may "augment" these somewhat + """ + + whole = str2bool(request.query_params.get('search_whole', False)) + + terms = [] + + search_terms = super().get_search_terms(request) + + if search_terms: + for term in search_terms: + term = term.strip() + + if not term: + # Ignore blank inputs + continue + + if whole: + # Wrap the search term to enable word-boundary matching + term = r"\y" + term + r"\y" + + terms.append(term) + + return terms + + +class InvenTreeOrderingFilter(filters.OrderingFilter): """Custom OrderingFilter class which allows aliased filtering of related fields. To use, simply specify this filter in the "filter_backends" section. @@ -74,3 +131,21 @@ class InvenTreeOrderingFilter(OrderingFilter): ordering.append(a) return ordering + + +SEARCH_ORDER_FILTER = [ + rest_filters.DjangoFilterBackend, + InvenTreeSearchFilter, + filters.OrderingFilter, +] + +SEARCH_ORDER_FILTER_ALIAS = [ + rest_filters.DjangoFilterBackend, + InvenTreeSearchFilter, + InvenTreeOrderingFilter, +] + +ORDER_FILTER = [ + rest_filters.DjangoFilterBackend, + filters.OrderingFilter, +] diff --git a/InvenTree/InvenTree/forms.py b/InvenTree/InvenTree/forms.py index 7078448d56..6c0a28faa4 100644 --- a/InvenTree/InvenTree/forms.py +++ b/InvenTree/InvenTree/forms.py @@ -126,6 +126,16 @@ class EditUserForm(HelperForm): class SetPasswordForm(HelperForm): """Form for setting user password.""" + class Meta: + """Metaclass options.""" + + model = User + fields = [ + 'enter_password', + 'confirm_password', + 'old_password', + ] + enter_password = forms.CharField( max_length=100, min_length=8, @@ -152,16 +162,6 @@ class SetPasswordForm(HelperForm): widget=forms.PasswordInput(attrs={'autocomplete': 'current-password', 'autofocus': True}), ) - class Meta: - """Metaclass options.""" - - model = User - fields = [ - 'enter_password', - 'confirm_password', - 'old_password', - ] - # override allauth class CustomSignupForm(SignupForm): diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index cf0a046def..8fabbdc0aa 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -21,9 +21,11 @@ from django.http import StreamingHttpResponse from django.test import TestCase from django.utils.translation import gettext_lazy as _ +import moneyed.localization import regex import requests from bleach import clean +from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money from PIL import Image @@ -33,7 +35,7 @@ from common.notifications import (InvenTreeNotificationBodies, NotificationBody, trigger_notification) from common.settings import currency_code_default -from .api_tester import UserMixin +from .api_tester import ExchangeRateMixin, UserMixin from .settings import MEDIA_URL, STATIC_URL logger = logging.getLogger('inventree') @@ -523,6 +525,7 @@ def DownloadFile(data, filename, content_type='application/text', inline=False) A StreamingHttpResponse object wrapping the supplied data """ filename = WrapWithQuotes(filename) + length = len(data) if type(data) == str: wrapper = FileWrapper(io.StringIO(data)) @@ -530,7 +533,9 @@ def DownloadFile(data, filename, content_type='application/text', inline=False) wrapper = FileWrapper(io.BytesIO(data)) response = StreamingHttpResponse(wrapper, content_type=content_type) - response['Content-Length'] = len(data) + if type(data) == str: + length = len(bytes(data, response.charset)) + response['Content-Length'] = length disposition = "inline" if inline else "attachment" @@ -1059,7 +1064,7 @@ def inheritors(cls): return subcls -class InvenTreeTestCase(UserMixin, TestCase): +class InvenTreeTestCase(ExchangeRateMixin, UserMixin, TestCase): """Testcase with user setup buildin.""" pass @@ -1105,3 +1110,54 @@ def notify_responsible(instance, sender, content: NotificationBody = InvenTreeNo target_exclude=[exclude], context=context, ) + + +def render_currency(money, decimal_places=None, currency=None, include_symbol=True, min_decimal_places=None): + """Render a currency / Money object to a formatted string (e.g. for reports) + + Arguments: + money: The Money instance to be rendered + decimal_places: The number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES setting. + currency: Optionally convert to the specified currency + include_symbol: Render with the appropriate currency symbol + min_decimal_places: The minimum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES_MIN setting. + """ + + if money in [None, '']: + return '-' + + if type(money) is not Money: + return '-' + + if currency is not None: + # Attempt to convert to the provided currency + # If cannot be done, leave the original + try: + money = convert_money(money, currency) + except Exception: + pass + + if decimal_places is None: + decimal_places = InvenTreeSetting.get_setting('PRICING_DECIMAL_PLACES', 6) + + if min_decimal_places is None: + min_decimal_places = InvenTreeSetting.get_setting('PRICING_DECIMAL_PLACES_MIN', 0) + + value = Decimal(str(money.amount)).normalize() + value = str(value) + + if '.' in value: + decimals = len(value.split('.')[-1]) + + decimals = max(decimals, min_decimal_places) + decimals = min(decimals, decimal_places) + + decimal_places = decimals + else: + decimal_places = max(decimal_places, 2) + + return moneyed.localization.format_money( + money, + decimal_places=decimal_places, + include_symbol=include_symbol, + ) diff --git a/InvenTree/InvenTree/management/commands/prerender.py b/InvenTree/InvenTree/management/commands/prerender.py index a7338338cb..0b99ea091f 100644 --- a/InvenTree/InvenTree/management/commands/prerender.py +++ b/InvenTree/InvenTree/management/commands/prerender.py @@ -12,8 +12,15 @@ from django.utils.translation import override as lang_over def render_file(file_name, source, target, locales, ctx): """Renders a file into all provided locales.""" + for locale in locales: + + # Enforce lower-case for locale names + locale = locale.lower() + locale = locale.replace('_', '-') + target_file = os.path.join(target, locale + '.' + file_name) + with open(target_file, 'w') as localised_file: with lang_over(locale): renderd = render_to_string(os.path.join(source, file_name), ctx) diff --git a/InvenTree/InvenTree/metadata.py b/InvenTree/InvenTree/metadata.py index 77398fdf7a..7f3d7bd312 100644 --- a/InvenTree/InvenTree/metadata.py +++ b/InvenTree/InvenTree/metadata.py @@ -7,6 +7,7 @@ from rest_framework.fields import empty from rest_framework.metadata import SimpleMetadata from rest_framework.utils import model_meta +import InvenTree.permissions import users.models from InvenTree.helpers import str2bool @@ -58,7 +59,7 @@ class InvenTreeMetadata(SimpleMetadata): try: # Extract the model name associated with the view - self.model = view.serializer_class.Meta.model + self.model = InvenTree.permissions.get_model_for_view(view) # Construct the 'table name' from the model app_label = self.model._meta.app_label diff --git a/InvenTree/InvenTree/migrations/0001_initial.py b/InvenTree/InvenTree/migrations/0001_initial.py new file mode 100644 index 0000000000..29ca7615f7 --- /dev/null +++ b/InvenTree/InvenTree/migrations/0001_initial.py @@ -0,0 +1,12 @@ +# Generated by Django 3.2.15 on 2022-10-03 18:57 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + ] diff --git a/InvenTree/InvenTree/migrations/__init__.py b/InvenTree/InvenTree/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/InvenTree/InvenTree/models.py b/InvenTree/InvenTree/models.py index 3a3dacd04b..41ade9f1c6 100644 --- a/InvenTree/InvenTree/models.py +++ b/InvenTree/InvenTree/models.py @@ -116,6 +116,11 @@ class ReferenceIndexingMixin(models.Model): # Name of the global setting which defines the required reference pattern for this model REFERENCE_PATTERN_SETTING = None + class Meta: + """Metaclass options. Abstract ensures no database table is created.""" + + abstract = True + @classmethod def get_reference_pattern(cls): """Returns the reference pattern associated with this model. @@ -272,11 +277,6 @@ class ReferenceIndexingMixin(models.Model): # Check that the reference field can be rebuild cls.rebuild_reference_field(value, validate=True) - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" - - abstract = True - @classmethod def rebuild_reference_field(cls, reference, validate=False): """Extract integer out of reference for sorting. @@ -369,6 +369,10 @@ class InvenTreeAttachment(models.Model): upload_date: Date the file was uploaded """ + class Meta: + """Metaclass options. Abstract ensures no database table is created.""" + abstract = True + def getSubdir(self): """Return the subdirectory under which attachments should be stored. @@ -483,11 +487,6 @@ class InvenTreeAttachment(models.Model): except Exception: raise ValidationError(_("Error renaming file")) - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" - - abstract = True - class InvenTreeTree(MPTTModel): """Provides an abstracted self-referencing tree model for data categories. @@ -501,6 +500,33 @@ class InvenTreeTree(MPTTModel): parent: The item immediately above this one. An item with a null parent is a top-level item """ + class Meta: + """Metaclass defines extra model properties.""" + abstract = True + + class MPTTMeta: + """Set insert order.""" + order_insertion_by = ['name'] + + def validate_unique(self, exclude=None): + """Validate that this tree instance satisfies our uniqueness requirements. + + Note that a 'unique_together' requirement for ('name', 'parent') is insufficient, + as it ignores cases where parent=None (i.e. top-level items) + """ + + super().validate_unique(exclude) + + results = self.__class__.objects.filter( + name=self.name, + parent=self.parent + ).exclude(pk=self.pk) + + if results.exists(): + raise ValidationError({ + 'name': _('Duplicate names cannot exist under the same parent') + }) + def api_instance_filters(self): """Instance filters for InvenTreeTree models.""" return { @@ -539,18 +565,6 @@ class InvenTreeTree(MPTTModel): for child in self.get_children(): child.save(*args, **kwargs) - class Meta: - """Metaclass defines extra model properties.""" - - abstract = True - - # Names must be unique at any given level in the tree - unique_together = ('name', 'parent') - - class MPTTMeta: - """Set insert order.""" - order_insertion_by = ['name'] - name = models.CharField( blank=False, max_length=100, @@ -717,7 +731,7 @@ class InvenTreeBarcodeMixin(models.Model): return cls.objects.filter(barcode_hash=barcode_hash).first() - def assign_barcode(self, barcode_hash=None, barcode_data=None, raise_error=True): + def assign_barcode(self, barcode_hash=None, barcode_data=None, raise_error=True, save=True): """Assign an external (third-party) barcode to this object.""" # Must provide either barcode_hash or barcode_data @@ -740,7 +754,8 @@ class InvenTreeBarcodeMixin(models.Model): self.barcode_hash = barcode_hash - self.save() + if save: + self.save() return True diff --git a/InvenTree/InvenTree/permissions.py b/InvenTree/InvenTree/permissions.py index 714ff99139..596e924c9e 100644 --- a/InvenTree/InvenTree/permissions.py +++ b/InvenTree/InvenTree/permissions.py @@ -7,6 +7,21 @@ from rest_framework import permissions import users.models +def get_model_for_view(view, raise_error=True): + """Attempt to introspect the 'model' type for an API view""" + + if hasattr(view, 'get_permission_model'): + return view.get_permission_model() + + if hasattr(view, 'serializer_class'): + return view.serializer_class.Meta.model + + if hasattr(view, 'get_serializer_class'): + return view.get_serializr_class().Meta.model + + raise AttributeError(f"Serializer class not specified for {view.__class__}") + + class RolePermission(permissions.BasePermission): """Role mixin for API endpoints, allowing us to specify the user "role" which is required for certain operations. @@ -49,9 +64,13 @@ class RolePermission(permissions.BasePermission): permission = rolemap[request.method] + # The required role may be defined for the view class + if role := getattr(view, 'role_required', None): + return users.models.check_user_role(user, role, permission) + try: # Extract the model name associated with this request - model = view.serializer_class.Meta.model + model = get_model_for_view(view) app_label = model._meta.app_label model_name = model._meta.model_name @@ -62,9 +81,7 @@ class RolePermission(permissions.BasePermission): # then we don't need a permission return True - result = users.models.RuleSet.check_table_permission(user, table, permission) - - return result + return users.models.RuleSet.check_table_permission(user, table, permission) class IsSuperuser(permissions.IsAdminUser): diff --git a/InvenTree/InvenTree/ready.py b/InvenTree/InvenTree/ready.py index a16b24ca1b..e6a4ec9ae2 100644 --- a/InvenTree/InvenTree/ready.py +++ b/InvenTree/InvenTree/ready.py @@ -13,7 +13,7 @@ def isImportingData(): return 'loaddata' in sys.argv -def canAppAccessDatabase(allow_test: bool = False, allow_plugins: bool = False): +def canAppAccessDatabase(allow_test: bool = False, allow_plugins: bool = False, allow_shell: bool = False): """Returns True if the apps.py file can access database records. There are some circumstances where we don't want the ready function in apps.py @@ -26,7 +26,6 @@ def canAppAccessDatabase(allow_test: bool = False, allow_plugins: bool = False): 'loaddata', 'dumpdata', 'check', - 'shell', 'createsuperuser', 'wait_for_db', 'prerender', @@ -42,6 +41,9 @@ def canAppAccessDatabase(allow_test: bool = False, allow_plugins: bool = False): 'mediarestore', ] + if not allow_shell: + excluded_commands.append('shell') + if not allow_test: # Override for testing mode? excluded_commands.append('test') diff --git a/InvenTree/InvenTree/serializers.py b/InvenTree/InvenTree/serializers.py index a7d46745ae..018f2332f7 100644 --- a/InvenTree/InvenTree/serializers.py +++ b/InvenTree/InvenTree/serializers.py @@ -21,6 +21,7 @@ from rest_framework.serializers import DecimalField from rest_framework.utils import model_meta from common.models import InvenTreeSetting +from common.settings import currency_code_default, currency_code_mappings from InvenTree.fields import InvenTreeRestURLField, InvenTreeURLField from InvenTree.helpers import download_image_from_url @@ -66,6 +67,26 @@ class InvenTreeMoneySerializer(MoneyField): return amount +class InvenTreeCurrencySerializer(serializers.ChoiceField): + """Custom serializers for selecting currency option""" + + def __init__(self, *args, **kwargs): + """Initialize the currency serializer""" + + kwargs['choices'] = currency_code_mappings() + + if 'default' not in kwargs and 'required' not in kwargs: + kwargs['default'] = currency_code_default + + if 'label' not in kwargs: + kwargs['label'] = _('Currency') + + if 'help_text' not in kwargs: + kwargs['help_text'] = _('Select currency from available options') + + super().__init__(*args, **kwargs) + + class InvenTreeModelSerializer(serializers.ModelSerializer): """Inherits the standard Django ModelSerializer class, but also ensures that the underlying model class data are checked on validation.""" @@ -282,6 +303,25 @@ class InvenTreeAttachmentSerializer(InvenTreeModelSerializer): The only real addition here is that we support "renaming" of the attachment file. """ + @staticmethod + def attachment_fields(extra_fields=None): + """Default set of fields for an attachment serializer""" + fields = [ + 'pk', + 'attachment', + 'filename', + 'link', + 'comment', + 'upload_date', + 'user', + 'user_detail', + ] + + if extra_fields: + fields += extra_fields + + return fields + user_detail = UserSerializer(source='user', read_only=True, many=False) attachment = InvenTreeAttachmentSerializerField( @@ -297,6 +337,8 @@ class InvenTreeAttachmentSerializer(InvenTreeModelSerializer): allow_blank=False, ) + upload_date = serializers.DateField(read_only=True) + class InvenTreeImageSerializerField(serializers.ImageField): """Custom image serializer. diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index e773a1d378..f1c5aa8838 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -26,21 +26,31 @@ from sentry_sdk.integrations.django import DjangoIntegration from . import config from .config import get_boolean_setting, get_custom_file, get_setting +from .version import inventreeApiVersion INVENTREE_NEWS_URL = 'https://inventree.org/news/feed.atom' # Determine if we are running in "test" mode e.g. "manage.py test" TESTING = 'test' in sys.argv -# Note: The following fix is "required" for docker build workflow -# Note: 2022-12-12 still unsure why... -if TESTING and os.getenv('INVENTREE_DOCKER'): - # Ensure that sys.path includes global python libs - site_packages = '/usr/local/lib/python3.9/site-packages' +if TESTING: - if site_packages not in sys.path: - print("Adding missing site-packages path:", site_packages) - sys.path.append(site_packages) + # Use a weaker password hasher for testing (improves testing speed) + PASSWORD_HASHERS = ['django.contrib.auth.hashers.MD5PasswordHasher',] + + # Enable slow-test-runner + TEST_RUNNER = 'django_slowtests.testrunner.DiscoverSlowestTestsRunner' + NUM_SLOW_TESTS = 25 + + # Note: The following fix is "required" for docker build workflow + # Note: 2022-12-12 still unsure why... + if os.getenv('INVENTREE_DOCKER'): + # Ensure that sys.path includes global python libs + site_packages = '/usr/local/lib/python3.9/site-packages' + + if site_packages not in sys.path: + print("Adding missing site-packages path:", site_packages) + sys.path.append(site_packages) # Are environment variables manipulated by tests? Needs to be set by testing code TESTING_ENV = False @@ -102,8 +112,10 @@ MEDIA_ROOT = config.get_media_dir() # List of allowed hosts (default = allow all) ALLOWED_HOSTS = get_setting( + "INVENTREE_ALLOWED_HOSTS", config_key='allowed_hosts', - default_value=['*'] + default_value=['*'], + typecast=list, ) # Cross Origin Resource Sharing (CORS) options @@ -113,13 +125,16 @@ CORS_URLS_REGEX = r'^/api/.*$' # Extract CORS options from configuration file CORS_ORIGIN_ALLOW_ALL = get_boolean_setting( + "INVENTREE_CORS_ORIGIN_ALLOW_ALL", config_key='cors.allow_all', default_value=False, ) CORS_ORIGIN_WHITELIST = get_setting( + "INVENTREE_CORS_ORIGIN_WHITELIST", config_key='cors.whitelist', - default_value=[] + default_value=[], + typecast=list, ) # Needed for the parts importer, directly impacts the maximum parts that can be uploaded @@ -219,6 +234,7 @@ INSTALLED_APPS = [ 'django_otp.plugins.otp_static', # Backup codes 'allauth_2fa', # MFA flow for allauth + 'drf_spectacular', # API documentation 'django_ical', # For exporting calendars ] @@ -342,7 +358,7 @@ REST_FRAMEWORK = { 'rest_framework.permissions.DjangoModelPermissions', 'InvenTree.permissions.RolePermission', ), - 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', + 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', 'DEFAULT_METADATA_CLASS': 'InvenTree.metadata.InvenTreeMetadata', 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', @@ -353,6 +369,15 @@ if DEBUG: # Enable browsable API if in DEBUG mode REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer') +SPECTACULAR_SETTINGS = { + 'TITLE': 'InvenTree API', + 'DESCRIPTION': 'API for InvenTree - the intuitive open source inventory management system', + 'LICENSE': {'MIT': 'https://github.com/inventree/InvenTree/blob/master/LICENSE'}, + 'EXTERNAL_DOCS': {'docs': 'https://docs.inventree.org', 'web': 'https://inventree.org'}, + 'VERSION': inventreeApiVersion(), + 'SERVE_INCLUDE_SCHEMA': False, +} + WSGI_APPLICATION = 'InvenTree.wsgi.application' """ @@ -554,6 +579,9 @@ SENTRY_DSN = get_setting('INVENTREE_SENTRY_DSN', 'sentry_dsn', INVENTREE_DSN) SENTRY_SAMPLE_RATE = float(get_setting('INVENTREE_SENTRY_SAMPLE_RATE', 'sentry_sample_rate', 0.1)) if SENTRY_ENABLED and SENTRY_DSN: # pragma: no cover + + logger.info("Running with sentry.io integration enabled") + sentry_sdk.init( dsn=SENTRY_DSN, integrations=[DjangoIntegration(), ], @@ -713,7 +741,7 @@ LANGUAGES = [ ('th', _('Thai')), ('tr', _('Turkish')), ('vi', _('Vietnamese')), - ('zh-cn', _('Chinese')), + ('zh-hans', _('Chinese')), ] # Testing interface translations @@ -736,9 +764,11 @@ if get_boolean_setting('TEST_TRANSLATIONS', default_value=False): # pragma: no django.conf.locale.LANG_INFO = LANG_INFO # Currencies available for use -CURRENCIES = get_setting('INVENTREE_CURRENCIES', 'currencies', [ - 'AUD', 'CAD', 'CNY', 'EUR', 'GBP', 'JPY', 'NZD', 'USD', -]) +CURRENCIES = get_setting( + 'INVENTREE_CURRENCIES', 'currencies', + ['AUD', 'CAD', 'CNY', 'EUR', 'GBP', 'JPY', 'NZD', 'USD'], + typecast=list, +) # Maximum number of decimal places for currency rendering CURRENCY_DECIMAL_PLACES = 6 @@ -746,7 +776,7 @@ CURRENCY_DECIMAL_PLACES = 6 # Check that each provided currency is supported for currency in CURRENCIES: if currency not in moneyed.CURRENCIES: # pragma: no cover - print(f"Currency code '{currency}' is not supported") + logger.error(f"Currency code '{currency}' is not supported") sys.exit(1) # Custom currency exchange backend @@ -795,15 +825,12 @@ IMPORT_EXPORT_USE_TRANSACTIONS = True SITE_ID = 1 # Load the allauth social backends -SOCIAL_BACKENDS = get_setting('INVENTREE_SOCIAL_BACKENDS', 'social_backends', []) +SOCIAL_BACKENDS = get_setting('INVENTREE_SOCIAL_BACKENDS', 'social_backends', [], typecast=list) for app in SOCIAL_BACKENDS: INSTALLED_APPS.append(app) # pragma: no cover -SOCIALACCOUNT_PROVIDERS = get_setting('INVENTREE_SOCIAL_PROVIDERS', 'social_providers', None) - -if SOCIALACCOUNT_PROVIDERS is None: - SOCIALACCOUNT_PROVIDERS = {} +SOCIALACCOUNT_PROVIDERS = get_setting('INVENTREE_SOCIAL_PROVIDERS', 'social_providers', None, typecast=dict) SOCIALACCOUNT_STORE_TOKENS = True @@ -894,7 +921,6 @@ CUSTOM_LOGO = get_custom_file('INVENTREE_CUSTOM_LOGO', 'customize.logo', 'custom CUSTOM_SPLASH = get_custom_file('INVENTREE_CUSTOM_SPLASH', 'customize.splash', 'custom splash') CUSTOMIZE = get_setting('INVENTREE_CUSTOMIZE', 'customize', {}) - if DEBUG: logger.info("InvenTree running with DEBUG enabled") diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css index cedc42beaf..c5bc9ea58e 100644 --- a/InvenTree/InvenTree/static/css/inventree.css +++ b/InvenTree/InvenTree/static/css/inventree.css @@ -315,9 +315,7 @@ main { } .filter-button { - padding: 2px; - padding-left: 4px; - padding-right: 4px; + padding: 6px; } .filter-input { @@ -786,6 +784,12 @@ input[type="submit"] { .alert-block { display: block; + padding: 0.75rem; +} + +.alert-small { + padding: 0.35rem; + font-size: 75%; } .navbar .btn { diff --git a/InvenTree/InvenTree/static/script/inventree/inventree.js b/InvenTree/InvenTree/static/script/inventree/inventree.js index 0f06ea98ac..db12de9d9d 100644 --- a/InvenTree/InvenTree/static/script/inventree/inventree.js +++ b/InvenTree/InvenTree/static/script/inventree/inventree.js @@ -155,30 +155,37 @@ function inventreeDocReady() { } +/* + * Determine if a transfer (e.g. drag-and-drop) is a file transfer + */ function isFileTransfer(transfer) { - /* Determine if a transfer (e.g. drag-and-drop) is a file transfer - */ - return transfer.files.length > 0; } -function enableDragAndDrop(element, url, options) { - /* Enable drag-and-drop file uploading for a given element. +/* Enable drag-and-drop file uploading for a given element. - Params: - element - HTML element lookup string e.g. "#drop-div" - url - URL to POST the file to - options - object with following possible values: - label - Label of the file to upload (default='file') - data - Other form data to upload - success - Callback function in case of success - error - Callback function in case of error - method - HTTP method - */ +Params: + element - HTML element lookup string e.g. "#drop-div" + url - URL to POST the file to + options - object with following possible values: + label - Label of the file to upload (default='file') + data - Other form data to upload + success - Callback function in case of success + error - Callback function in case of error + method - HTTP method +*/ +function enableDragAndDrop(elementId, url, options={}) { var data = options.data || {}; + let element = $(elementId); + + if (!element.exists()) { + console.error(`enableDragAndDrop called with invalid target: '${elementId}'`); + return; + } + $(element).on('drop', function(event) { var transfer = event.originalEvent.dataTransfer; @@ -200,6 +207,11 @@ function enableDragAndDrop(element, url, options) { formData, { success: function(data, status, xhr) { + // Reload a table + if (options.refreshTable) { + reloadBootstrapTable(options.refreshTable); + } + if (options.success) { options.success(data, status, xhr); } diff --git a/InvenTree/InvenTree/static/script/qrcode.min.js b/InvenTree/InvenTree/static/script/qrcode.min.js new file mode 100644 index 0000000000..993e88f396 --- /dev/null +++ b/InvenTree/InvenTree/static/script/qrcode.min.js @@ -0,0 +1 @@ +var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/InvenTree/InvenTree/status.py b/InvenTree/InvenTree/status.py index da3afafb77..46fa09b7b7 100644 --- a/InvenTree/InvenTree/status.py +++ b/InvenTree/InvenTree/status.py @@ -61,19 +61,13 @@ def is_email_configured(): if not settings.TESTING: # pragma: no cover logger.debug("EMAIL_HOST is not configured") - if not settings.EMAIL_HOST_USER: - configured = False + # Display warning unless in test mode + if not settings.TESTING: # pragma: no cover + logger.debug("EMAIL_HOST_USER is not configured") - # Display warning unless in test mode - if not settings.TESTING: # pragma: no cover - logger.debug("EMAIL_HOST_USER is not configured") - - if not settings.EMAIL_HOST_PASSWORD: - configured = False - - # Display warning unless in test mode - if not settings.TESTING: # pragma: no cover - logger.debug("EMAIL_HOST_PASSWORD is not configured") + # Display warning unless in test mode + if not settings.TESTING: # pragma: no cover + logger.debug("EMAIL_HOST_PASSWORD is not configured") return configured diff --git a/InvenTree/InvenTree/status_codes.py b/InvenTree/InvenTree/status_codes.py index 73684817e8..cb410c4f5c 100644 --- a/InvenTree/InvenTree/status_codes.py +++ b/InvenTree/InvenTree/status_codes.py @@ -31,23 +31,7 @@ class StatusCode: @classmethod def list(cls): """Return the StatusCode options as a list of mapped key / value items.""" - codes = [] - - for key in cls.options.keys(): - - opt = { - 'key': key, - 'value': cls.options[key] - } - - color = cls.colors.get(key, None) - - if color: - opt['color'] = color - - codes.append(opt) - - return codes + return list(cls.dict().values()) @classmethod def text(cls, key): @@ -69,6 +53,62 @@ class StatusCode: """All status code labels.""" return cls.options.values() + @classmethod + def names(cls): + """Return a map of all 'names' of status codes in this class + + Will return a dict object, with the attribute name indexed to the integer value. + + e.g. + { + 'PENDING': 10, + 'IN_PROGRESS': 20, + } + """ + keys = cls.keys() + status_names = {} + + for d in dir(cls): + if d.startswith('_'): + continue + if d != d.upper(): + continue + + value = getattr(cls, d, None) + + if value is None: + continue + if callable(value): + continue + if type(value) != int: + continue + if value not in keys: + continue + + status_names[d] = value + + return status_names + + @classmethod + def dict(cls): + """Return a dict representation containing all required information""" + values = {} + + for name, value, in cls.names().items(): + entry = { + 'key': value, + 'name': name, + 'label': cls.label(value), + } + + if hasattr(cls, 'colors'): + if color := cls.colors.get(value, None): + entry['color'] = color + + values[name] = entry + + return values + @classmethod def label(cls, value): """Return the status code label associated with the provided value.""" @@ -131,6 +171,7 @@ class SalesOrderStatus(StatusCode): """Defines a set of status codes for a SalesOrder.""" PENDING = 10 # Order is pending + IN_PROGRESS = 15 # Order has been issued, and is in progress SHIPPED = 20 # Order has been shipped to customer CANCELLED = 40 # Order has been cancelled LOST = 50 # Order was lost @@ -138,6 +179,7 @@ class SalesOrderStatus(StatusCode): options = { PENDING: _("Pending"), + IN_PROGRESS: _("In Progress"), SHIPPED: _("Shipped"), CANCELLED: _("Cancelled"), LOST: _("Lost"), @@ -146,6 +188,7 @@ class SalesOrderStatus(StatusCode): colors = { PENDING: 'secondary', + IN_PROGRESS: 'primary', SHIPPED: 'success', CANCELLED: 'danger', LOST: 'warning', @@ -155,6 +198,7 @@ class SalesOrderStatus(StatusCode): # Open orders OPEN = [ PENDING, + IN_PROGRESS, ] # Completed orders @@ -247,10 +291,14 @@ class StockHistoryCode(StatusCode): BUILD_CONSUMED = 57 # Sales order codes + SHIPPED_AGAINST_SALES_ORDER = 60 # Purchase order codes RECEIVED_AGAINST_PURCHASE_ORDER = 70 + # Return order codes + RETURNED_AGAINST_RETURN_ORDER = 80 + # Customer actions SENT_TO_CUSTOMER = 100 RETURNED_FROM_CUSTOMER = 105 @@ -289,8 +337,11 @@ class StockHistoryCode(StatusCode): BUILD_OUTPUT_COMPLETED: _('Build order output completed'), BUILD_CONSUMED: _('Consumed by build order'), - RECEIVED_AGAINST_PURCHASE_ORDER: _('Received against purchase order') + SHIPPED_AGAINST_SALES_ORDER: _("Shipped against Sales Order"), + RECEIVED_AGAINST_PURCHASE_ORDER: _('Received against Purchase Order'), + + RETURNED_AGAINST_RETURN_ORDER: _('Returned against Return Order'), } @@ -320,3 +371,74 @@ class BuildStatus(StatusCode): PENDING, PRODUCTION, ] + + +class ReturnOrderStatus(StatusCode): + """Defines a set of status codes for a ReturnOrder""" + + # Order is pending, waiting for receipt of items + PENDING = 10 + + # Items have been received, and are being inspected + IN_PROGRESS = 20 + + COMPLETE = 30 + CANCELLED = 40 + + OPEN = [ + PENDING, + IN_PROGRESS, + ] + + options = { + PENDING: _("Pending"), + IN_PROGRESS: _("In Progress"), + COMPLETE: _("Complete"), + CANCELLED: _("Cancelled"), + } + + colors = { + PENDING: 'secondary', + IN_PROGRESS: 'primary', + COMPLETE: 'success', + CANCELLED: 'danger', + } + + +class ReturnOrderLineStatus(StatusCode): + """Defines a set of status codes for a ReturnOrderLineItem""" + + PENDING = 10 + + # Item is to be returned to customer, no other action + RETURN = 20 + + # Item is to be repaired, and returned to customer + REPAIR = 30 + + # Item is to be replaced (new item shipped) + REPLACE = 40 + + # Item is to be refunded (cannot be repaired) + REFUND = 50 + + # Item is rejected + REJECT = 60 + + options = { + PENDING: _('Pending'), + RETURN: _('Return'), + REPAIR: _('Repair'), + REFUND: _('Refund'), + REPLACE: _('Replace'), + REJECT: _('Reject') + } + + colors = { + PENDING: 'secondary', + RETURN: 'success', + REPAIR: 'primary', + REFUND: 'info', + REPLACE: 'warning', + REJECT: 'danger', + } diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index 753fc44a65..4831a7fcd4 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -15,10 +15,17 @@ from django.conf import settings from django.core import mail as django_mail from django.core.exceptions import AppRegistryNotReady from django.core.management import call_command -from django.db.utils import OperationalError, ProgrammingError +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.migrations.executor import MigrationExecutor +from django.db.utils import (NotSupportedError, OperationalError, + ProgrammingError) from django.utils import timezone import requests +from maintenance_mode.core import (get_maintenance_mode, maintenance_mode_on, + set_maintenance_mode) + +from InvenTree.config import get_setting logger = logging.getLogger("inventree") @@ -67,6 +74,93 @@ def raise_warning(msg): warnings.warn(msg) +def check_daily_holdoff(task_name: str, n_days: int = 1) -> bool: + """Check if a periodic task should be run, based on the provided setting name. + + Arguments: + task_name: The name of the task being run, e.g. 'dummy_task' + setting_name: The name of the global setting, e.g. 'INVENTREE_DUMMY_TASK_INTERVAL' + + Returns: + bool: If the task should be run *now*, or wait another day + + This function will determine if the task should be run *today*, + based on when it was last run, or if we have a record of it running at all. + + Note that this function creates some *hidden* global settings (designated with the _ prefix), + which are used to keep a running track of when the particular task was was last run. + """ + + from common.models import InvenTreeSetting + + if n_days <= 0: + logger.info(f"Specified interval for task '{task_name}' < 1 - task will not run") + return False + + # Sleep a random number of seconds to prevent worker conflict + time.sleep(random.randint(1, 5)) + + attempt_key = f'_{task_name}_ATTEMPT' + success_key = f'_{task_name}_SUCCESS' + + # Check for recent success information + last_success = InvenTreeSetting.get_setting(success_key, '', cache=False) + + if last_success: + try: + last_success = datetime.fromisoformat(last_success) + except ValueError: + last_success = None + + if last_success: + threshold = datetime.now() - timedelta(days=n_days) + + if last_success > threshold: + logger.info(f"Last successful run for '{task_name}' was too recent - skipping task") + return False + + # Check for any information we have about this task + last_attempt = InvenTreeSetting.get_setting(attempt_key, '', cache=False) + + if last_attempt: + try: + last_attempt = datetime.fromisoformat(last_attempt) + except ValueError: + last_attempt = None + + if last_attempt: + # Do not attempt if the most recent *attempt* was within 12 hours + threshold = datetime.now() - timedelta(hours=12) + + if last_attempt > threshold: + logger.info(f"Last attempt for '{task_name}' was too recent - skipping task") + return False + + # Record this attempt + record_task_attempt(task_name) + + # No reason *not* to run this task now + return True + + +def record_task_attempt(task_name: str): + """Record that a multi-day task has been attempted *now*""" + + from common.models import InvenTreeSetting + + logger.info(f"Logging task attempt for '{task_name}'") + + InvenTreeSetting.set_setting(f'_{task_name}_ATTEMPT', datetime.now().isoformat(), None) + + +def record_task_success(task_name: str): + """Record that a multi-day task was successful *now*""" + + from common.models import InvenTreeSetting + + InvenTreeSetting.set_setting(f'_{task_name}_SUCCESS', datetime.now().isoformat(), None) + + def offload_task(taskname, *args, force_async=False, force_sync=False, **kwargs): """Create an AsyncTask if workers are running. This is different to a 'scheduled' task, in that it only runs once! @@ -341,6 +435,14 @@ def check_for_updates(): logger.info("Could not perform 'check_for_updates' - App registry not ready") return + interval = int(common.models.InvenTreeSetting.get_setting('INVENTREE_UPDATE_CHECK_INTERVAL', 7, cache=False)) + + # Check if we should check for updates *today* + if not check_daily_holdoff('check_for_updates', interval): + return + + logger.info("Checking for InvenTree software updates") + headers = {} # If running within github actions, use authentication token @@ -350,7 +452,10 @@ def check_for_updates(): if token: headers['Authorization'] = f"Bearer {token}" - response = requests.get('https://api.github.com/repos/inventree/inventree/releases/latest', headers=headers) + response = requests.get( + 'https://api.github.com/repos/inventree/inventree/releases/latest', + headers=headers + ) if response.status_code != 200: raise ValueError(f'Unexpected status code from GitHub API: {response.status_code}') # pragma: no cover @@ -377,11 +482,14 @@ def check_for_updates(): # Save the version to the database common.models.InvenTreeSetting.set_setting( - 'INVENTREE_LATEST_VERSION', + '_INVENTREE_LATEST_VERSION', tag, None ) + # Record that this task was successful + record_task_success('check_for_updates') + @scheduled_task(ScheduledTask.DAILY) def update_exchange_rates(): @@ -428,68 +536,26 @@ def update_exchange_rates(): @scheduled_task(ScheduledTask.DAILY) def run_backup(): """Run the backup command.""" + from common.models import InvenTreeSetting if not InvenTreeSetting.get_setting('INVENTREE_BACKUP_ENABLE', False, cache=False): # Backups are not enabled - exit early return - logger.info("Performing automated database backup task") + interval = int(InvenTreeSetting.get_setting('INVENTREE_BACKUP_DAYS', 1, cache=False)) - # Sleep a random number of seconds to prevent worker conflict - time.sleep(random.randint(1, 5)) - - # Check for records of previous backup attempts - last_attempt = InvenTreeSetting.get_setting('INVENTREE_BACKUP_ATTEMPT', '', cache=False) - last_success = InvenTreeSetting.get_setting('INVENTREE_BACKUP_SUCCESS', '', cache=False) - - try: - backup_n_days = int(InvenTreeSetting.get_setting('INVENTREE_BACKUP_DAYS', 1, cache=False)) - except Exception: - backup_n_days = 1 - - if last_attempt: - try: - last_attempt = datetime.fromisoformat(last_attempt) - except ValueError: - last_attempt = None - - if last_attempt: - # Do not attempt if the 'last attempt' at backup was within 12 hours - threshold = timezone.now() - timezone.timedelta(hours=12) - - if last_attempt > threshold: - logger.info('Last backup attempt was too recent - skipping backup operation') - return - - # Record the timestamp of most recent backup attempt - InvenTreeSetting.set_setting('INVENTREE_BACKUP_ATTEMPT', timezone.now().isoformat(), None) - - if not last_attempt: - # If there is no record of a previous attempt, exit quickly - # This prevents the backup operation from happening when the server first launches, for example - logger.info("No previous backup attempts recorded - waiting until tomorrow") + # Check if should run this task *today* + if not check_daily_holdoff('run_backup', interval): return - if last_success: - try: - last_success = datetime.fromisoformat(last_success) - except ValueError: - last_success = None - - # Exit early if the backup was successful within the number of required days - if last_success: - threshold = timezone.now() - timezone.timedelta(days=backup_n_days) - - if last_success > threshold: - logger.info('Last successful backup was too recent - skipping backup operation') - return + logger.info("Performing automated database backup task") call_command("dbbackup", noinput=True, clean=True, compress=True, interactive=False) call_command("mediabackup", noinput=True, clean=True, compress=True, interactive=False) - # Record the timestamp of most recent backup success - InvenTreeSetting.set_setting('INVENTREE_BACKUP_SUCCESS', datetime.now().isoformat(), None) + # Record that this task was successful + record_task_success('run_backup') def send_email(subject, body, recipients, from_email=None, html_message=None): @@ -506,3 +572,74 @@ def send_email(subject, body, recipients, from_email=None, html_message=None): fail_silently=False, html_message=html_message ) + + +@scheduled_task(ScheduledTask.DAILY) +def check_for_migrations(worker: bool = True): + """Checks if migrations are needed. + + If the setting auto_update is enabled we will start updateing. + """ + # Test if auto-updates are enabled + if not get_setting('INVENTREE_AUTO_UPDATE', 'auto_update'): + return + + from plugin import registry + + plan = get_migration_plan() + + # Check if there are any open migrations + if not plan: + logger.info('There are no open migrations') + return + + logger.info('There are open migrations') + + # Log open migrations + for migration in plan: + logger.info(migration[0]) + + # Set the application to maintenance mode - no access from now on. + logger.info('Going into maintenance') + set_maintenance_mode(True) + logger.info('Mainentance mode is on now') + + # Check if we are worker - go kill all other workers then. + # Only the frontend workers run updates. + if worker: + logger.info('Current process is a worker - shutting down cluster') + + # Ok now we are ready to go ahead! + # To be sure we are in maintenance this is wrapped + with maintenance_mode_on(): + logger.info('Starting migrations') + print('Starting migrations') + + try: + call_command('migrate', interactive=False) + except NotSupportedError as e: # pragma: no cover + if settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3': + raise e + logger.error(f'Error during migrations: {e}') + + print('Migrations done') + logger.info('Ran migrations') + + # Make sure we are out of maintenance again + logger.info('Checking InvenTree left maintenance mode') + if get_maintenance_mode(): + + logger.warning('Mainentance was still on - releasing now') + set_maintenance_mode(False) + logger.info('Released out of maintenance') + + # We should be current now - triggering full reload to make sure all models + # are loaded fully in their new state. + registry.reload_plugins(full_reload=True, force_reload=True) + + +def get_migration_plan(): + """Returns a list of migrations which are needed to be run.""" + executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) + plan = executor.migration_plan(executor.loader.graph.leaf_nodes()) + return plan diff --git a/InvenTree/InvenTree/test_api.py b/InvenTree/InvenTree/test_api.py index 0b43f44cd0..fb2209257c 100644 --- a/InvenTree/InvenTree/test_api.py +++ b/InvenTree/InvenTree/test_api.py @@ -8,7 +8,7 @@ from rest_framework import status from InvenTree.api_tester import InvenTreeAPITestCase from InvenTree.helpers import InvenTreeTestCase -from users.models import RuleSet +from users.models import RuleSet, update_group_roles class HTMLAPITests(InvenTreeTestCase): @@ -126,6 +126,10 @@ class APITests(InvenTreeAPITestCase): """ url = reverse('api-user-roles') + # Delete all rules + self.group.rule_sets.all().delete() + update_group_roles(self.group) + response = self.client.get(url, format='json') # Not logged in, so cannot access user role data @@ -297,3 +301,133 @@ class BulkDeleteTests(InvenTreeAPITestCase): ) self.assertIn("'filters' must be supplied as a dict object", str(response.data)) + + +class SearchTests(InvenTreeAPITestCase): + """Unit tests for global search endpoint""" + + fixtures = [ + 'category', + 'part', + 'company', + 'location', + 'supplier_part', + 'stock', + 'order', + 'sales_order', + ] + + def test_results(self): + """Test individual result types""" + + response = self.post( + reverse('api-search'), + { + 'search': 'chair', + 'limit': 3, + 'part': {}, + 'build': {}, + }, + expected_code=200 + ) + + # No build results + self.assertEqual(response.data['build']['count'], 0) + + # 3 (of 5) part results + self.assertEqual(response.data['part']['count'], 5) + self.assertEqual(len(response.data['part']['results']), 3) + + # Other results not included + self.assertNotIn('purchaseorder', response.data) + self.assertNotIn('salesorder', response.data) + + # Search for orders + response = self.post( + reverse('api-search'), + { + 'search': '01', + 'limit': 2, + 'purchaseorder': {}, + 'salesorder': {}, + }, + expected_code=200, + ) + + self.assertEqual(response.data['purchaseorder']['count'], 1) + self.assertEqual(response.data['salesorder']['count'], 0) + + self.assertNotIn('stockitem', response.data) + self.assertNotIn('build', response.data) + + def test_permissions(self): + """Test that users with insufficient permissions are handled correctly""" + + # First, remove all roles + for ruleset in self.group.rule_sets.all(): + ruleset.can_view = False + ruleset.can_change = False + ruleset.can_delete = False + ruleset.can_add = False + ruleset.save() + + models = [ + 'build', + 'company', + 'manufacturerpart', + 'supplierpart', + 'part', + 'partcategory', + 'purchaseorder', + 'stockitem', + 'stocklocation', + 'salesorder', + ] + + query = { + 'search': 'c', + 'limit': 3, + } + + for mdl in models: + query[mdl] = {} + + response = self.post( + reverse('api-search'), + query, + expected_code=200 + ) + + # Check for 'permission denied' error + for mdl in models: + self.assertEqual(response.data[mdl]['error'], 'User does not have permission to view this model') + + # Assign view roles for some parts + self.assignRole('build.view') + self.assignRole('part.view') + + response = self.post( + reverse('api-search'), + query, + expected_code=200 + ) + + # Check for expected results, based on permissions + # We expect results to be returned for the following model types + has_permission = [ + 'build', + 'manufacturerpart', + 'supplierpart', + 'part', + 'partcategory', + 'stocklocation', + 'stockitem', + ] + + for mdl in models: + result = response.data[mdl] + if mdl in has_permission: + self.assertIn('count', result) + else: + self.assertIn('error', result) + self.assertEqual(result['error'], 'User does not have permission to view this model') diff --git a/InvenTree/InvenTree/test_tasks.py b/InvenTree/InvenTree/test_tasks.py index 500d1d7c7f..38fd97a2d6 100644 --- a/InvenTree/InvenTree/test_tasks.py +++ b/InvenTree/InvenTree/test_tasks.py @@ -1,7 +1,11 @@ """Unit tests for task management.""" +import os from datetime import timedelta +from django.conf import settings +from django.core.management import call_command +from django.db.utils import NotSupportedError from django.test import TestCase from django.utils import timezone @@ -108,12 +112,41 @@ class InvenTreeTaskTests(TestCase): def test_task_check_for_updates(self): """Test the task check_for_updates.""" # Check that setting should be empty - self.assertEqual(InvenTreeSetting.get_setting('INVENTREE_LATEST_VERSION'), '') + self.assertEqual(InvenTreeSetting.get_setting('_INVENTREE_LATEST_VERSION'), '') # Get new version InvenTree.tasks.offload_task(InvenTree.tasks.check_for_updates) # Check that setting is not empty - response = InvenTreeSetting.get_setting('INVENTREE_LATEST_VERSION') + response = InvenTreeSetting.get_setting('_INVENTREE_LATEST_VERSION') self.assertNotEqual(response, '') self.assertTrue(bool(response)) + + def test_task_check_for_migrations(self): + """Test the task check_for_migrations.""" + # Update disabled + InvenTree.tasks.check_for_migrations() + + # Update enabled - no migrations + os.environ['INVENTREE_AUTO_UPDATE'] = 'True' + InvenTree.tasks.check_for_migrations() + + # Create migration + self.assertEqual(len(InvenTree.tasks.get_migration_plan()), 0) + call_command('makemigrations', ['InvenTree', '--empty'], interactive=False) + self.assertEqual(len(InvenTree.tasks.get_migration_plan()), 1) + + # Run with migrations - catch no foreigner error + try: + InvenTree.tasks.check_for_migrations() + except NotSupportedError as e: # pragma: no cover + if settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3': + raise e + + # Cleanup + try: + migration_name = InvenTree.tasks.get_migration_plan()[0][0].name + '.py' + migration_path = settings.BASE_DIR / 'InvenTree' / 'migrations' / migration_name + migration_path.unlink() + except IndexError: # pragma: no cover + pass diff --git a/InvenTree/InvenTree/tests.py b/InvenTree/InvenTree/tests.py index feb57d6469..2c7f3e726c 100644 --- a/InvenTree/InvenTree/tests.py +++ b/InvenTree/InvenTree/tests.py @@ -3,6 +3,7 @@ import json import os import time +from datetime import datetime, timedelta from decimal import Decimal from unittest import mock @@ -29,20 +30,12 @@ from stock.models import StockItem, StockLocation from . import config, helpers, ready, status, version from .tasks import offload_task -from .validators import validate_overage, validate_part_name +from .validators import validate_overage class ValidatorTest(TestCase): """Simple tests for custom field validators.""" - def test_part_name(self): - """Test part name validator.""" - validate_part_name('hello world') - - # Validate with some strange chars - with self.assertRaises(django_exceptions.ValidationError): - validate_part_name('### <> This | name is not } valid') - def test_overage(self): """Test overage validator.""" validate_overage("100%") @@ -398,10 +391,10 @@ class TestMPTT(TestCase): 'location', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Setup for all tests.""" - super().setUp() - + super().setUpTestData() StockLocation.objects.rebuild() def test_self_as_parent(self): @@ -830,6 +823,17 @@ class TestSettings(helpers.InvenTreeTestCase): with self.in_env_context({TEST_ENV_NAME: '321'}): self.assertEqual(config.get_setting(TEST_ENV_NAME, None), '321') + # test typecasting to dict - None should be mapped to empty dict + self.assertEqual(config.get_setting(TEST_ENV_NAME, None, None, typecast=dict), {}) + + # test typecasting to dict - valid JSON string should be mapped to corresponding dict + with self.in_env_context({TEST_ENV_NAME: '{"a": 1}'}): + self.assertEqual(config.get_setting(TEST_ENV_NAME, None, typecast=dict), {"a": 1}) + + # test typecasting to dict - invalid JSON string should be mapped to empty dict + with self.in_env_context({TEST_ENV_NAME: "{'a': 1}"}): + self.assertEqual(config.get_setting(TEST_ENV_NAME, None, typecast=dict), {}) + class TestInstanceName(helpers.InvenTreeTestCase): """Unit tests for instance name.""" @@ -903,6 +907,58 @@ class TestOffloadTask(helpers.InvenTreeTestCase): force_async=True ) + def test_daily_holdoff(self): + """Tests for daily task holdoff helper functions""" + + import InvenTree.tasks + + with self.assertLogs(logger='inventree', level='INFO') as cm: + # With a non-positive interval, task will not run + result = InvenTree.tasks.check_daily_holdoff('some_task', 0) + self.assertFalse(result) + self.assertIn('Specified interval', str(cm.output)) + + with self.assertLogs(logger='inventree', level='INFO') as cm: + # First call should run without issue + result = InvenTree.tasks.check_daily_holdoff('dummy_task') + self.assertTrue(result) + self.assertIn("Logging task attempt for 'dummy_task'", str(cm.output)) + + with self.assertLogs(logger='inventree', level='INFO') as cm: + # An attempt has been logged, but it is too recent + result = InvenTree.tasks.check_daily_holdoff('dummy_task') + self.assertFalse(result) + self.assertIn("Last attempt for 'dummy_task' was too recent", str(cm.output)) + + # Mark last attempt a few days ago - should now return True + t_old = datetime.now() - timedelta(days=3) + t_old = t_old.isoformat() + InvenTreeSetting.set_setting('_dummy_task_ATTEMPT', t_old, None) + + result = InvenTree.tasks.check_daily_holdoff('dummy_task', 5) + self.assertTrue(result) + + # Last attempt should have been updated + self.assertNotEqual(t_old, InvenTreeSetting.get_setting('_dummy_task_ATTEMPT', '', cache=False)) + + # Last attempt should prevent us now + with self.assertLogs(logger='inventree', level='INFO') as cm: + result = InvenTree.tasks.check_daily_holdoff('dummy_task') + self.assertFalse(result) + self.assertIn("Last attempt for 'dummy_task' was too recent", str(cm.output)) + + # Configure so a task was successful too recently + InvenTreeSetting.set_setting('_dummy_task_ATTEMPT', t_old, None) + InvenTreeSetting.set_setting('_dummy_task_SUCCESS', t_old, None) + + with self.assertLogs(logger='inventree', level='INFO') as cm: + result = InvenTree.tasks.check_daily_holdoff('dummy_task', 7) + self.assertFalse(result) + self.assertIn('Last successful run for', str(cm.output)) + + result = InvenTree.tasks.check_daily_holdoff('dummy_task', 2) + self.assertTrue(result) + class BarcodeMixinTest(helpers.InvenTreeTestCase): """Tests for the InvenTreeBarcodeMixin mixin class""" diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index bf3e36c8e3..83505ca06b 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -9,7 +9,7 @@ from django.contrib import admin from django.urls import include, path, re_path from django.views.generic.base import RedirectView -from rest_framework.documentation import include_docs_urls +from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView from build.api import build_api_urls from build.urls import build_urls @@ -30,7 +30,7 @@ from stock.api import stock_api_urls from stock.urls import stock_urls from users.api import user_urls -from .api import InfoView, NotFoundView +from .api import APISearchView, InfoView, NotFoundView from .views import (AboutView, AppearanceSelectView, CustomConnectionsView, CustomEmailView, CustomLoginView, CustomPasswordResetFromKeyView, @@ -43,6 +43,10 @@ admin.site.site_header = "InvenTree Admin" apipatterns = [ + + # Global search + path('search/', APISearchView.as_view(), name='api-search'), + re_path(r'^settings/', include(settings_api_urls)), re_path(r'^part/', include(part_api_urls)), re_path(r'^bom/', include(bom_api_urls)), @@ -58,9 +62,12 @@ apipatterns = [ # Plugin endpoints path('', include(plugin_api_urls)), - # Webhook enpoint + # Common endpoints enpoint path('', include(common_api_urls)), + # OpenAPI Schema + re_path('schema/', SpectacularAPIView.as_view(custom_settings={'SCHEMA_PATH_PREFIX': '/api/'}), name='schema'), + # InvenTree information endpoint path('', InfoView.as_view(), name='api-inventree-info'), @@ -108,9 +115,13 @@ translated_javascript_urls = [ re_path(r'^modals.js', DynamicJsView.as_view(template_name='js/translated/modals.js'), name='modals.js'), re_path(r'^order.js', DynamicJsView.as_view(template_name='js/translated/order.js'), name='order.js'), re_path(r'^part.js', DynamicJsView.as_view(template_name='js/translated/part.js'), name='part.js'), + re_path(r'^purchase_order.js', DynamicJsView.as_view(template_name='js/translated/purchase_order.js'), name='purchase_order.js'), + re_path(r'^return_order.js', DynamicJsView.as_view(template_name='js/translated/return_order.js'), name='return_order.js'), re_path(r'^report.js', DynamicJsView.as_view(template_name='js/translated/report.js'), name='report.js'), + re_path(r'^sales_order.js', DynamicJsView.as_view(template_name='js/translated/sales_order.js'), name='sales_order.js'), re_path(r'^search.js', DynamicJsView.as_view(template_name='js/translated/search.js'), name='search.js'), re_path(r'^stock.js', DynamicJsView.as_view(template_name='js/translated/stock.js'), name='stock.js'), + re_path(r'^status_codes.js', DynamicJsView.as_view(template_name='js/translated/status_codes.js'), name='status_codes.js'), re_path(r'^plugin.js', DynamicJsView.as_view(template_name='js/translated/plugin.js'), name='plugin.js'), re_path(r'^pricing.js', DynamicJsView.as_view(template_name='js/translated/pricing.js'), name='pricing.js'), re_path(r'^news.js', DynamicJsView.as_view(template_name='js/translated/news.js'), name='news.js'), @@ -128,7 +139,7 @@ backendpatterns = [ re_path(r'^auth/?', auth_request), re_path(r'^api/', include(apipatterns)), - re_path(r'^api-doc/', include_docs_urls(title='InvenTree API')), + re_path(r'^api-doc/', SpectacularRedocView.as_view(url_name='schema'), name='api-doc'), ] frontendpatterns = [ diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index 0edabd280c..0b8c263be2 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -11,8 +11,6 @@ from django.utils.translation import gettext_lazy as _ from jinja2 import Template from moneyed import CURRENCIES -import common.models - def validate_currency_code(code): """Check that a given code is a valid currency code.""" @@ -47,50 +45,6 @@ class AllowedURLValidator(validators.URLValidator): super().__call__(value) -def validate_part_name(value): - """Validate the name field for a Part instance - - This function is exposed to any Validation plugins, and thus can be customized. - """ - - from plugin.registry import registry - - for plugin in registry.with_mixin('validation'): - # Run the name through each custom validator - # If the plugin returns 'True' we will skip any subsequent validation - if plugin.validate_part_name(value): - return - - -def validate_part_ipn(value): - """Validate the IPN field for a Part instance. - - This function is exposed to any Validation plugins, and thus can be customized. - - If no validation errors are raised, the IPN is also validated against a configurable regex pattern. - """ - - from plugin.registry import registry - - plugins = registry.with_mixin('validation') - - for plugin in plugins: - # Run the IPN through each custom validator - # If the plugin returns 'True' we will skip any subsequent validation - if plugin.validate_part_ipn(value): - return - - # If we get to here, none of the plugins have raised an error - - pattern = common.models.InvenTreeSetting.get_setting('PART_IPN_REGEX') - - if pattern: - match = re.search(pattern, value) - - if match is None: - raise ValidationError(_('IPN must match regex pattern {pat}').format(pat=pattern)) - - def validate_purchase_order_reference(value): """Validate the 'reference' field of a PurchaseOrder.""" diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index f82a7406b6..1d8923c5bb 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -9,20 +9,23 @@ import subprocess import django -import common.models from InvenTree.api_version import INVENTREE_API_VERSION # InvenTree software version -INVENTREE_SW_VERSION = "0.11.0 dev" +INVENTREE_SW_VERSION = "0.12.0 dev" def inventreeInstanceName(): """Returns the InstanceName settings for the current database.""" + import common.models + return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "") def inventreeInstanceTitle(): """Returns the InstanceTitle for the current database.""" + import common.models + if common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE_TITLE", False): return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "") else: @@ -64,9 +67,10 @@ def inventreeDocsVersion(): def isInvenTreeUpToDate(): """Test if the InvenTree instance is "up to date" with the latest version. - A background task periodically queries GitHub for latest version, and stores it to the database as INVENTREE_LATEST_VERSION + A background task periodically queries GitHub for latest version, and stores it to the database as "_INVENTREE_LATEST_VERSION" """ - latest = common.models.InvenTreeSetting.get_setting('INVENTREE_LATEST_VERSION', backup_value=None, create=False) + import common.models + latest = common.models.InvenTreeSetting.get_setting('_INVENTREE_LATEST_VERSION', backup_value=None, create=False) # No record for "latest" version - we must assume we are up to date! if not latest: diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index 57bed19275..c4ea677901 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -320,44 +320,6 @@ class AjaxView(AjaxMixin, View): return self.renderJsonResponse(request) -class QRCodeView(AjaxView): - """An 'AJAXified' view for displaying a QR code. - - Subclasses should implement the get_qr_data(self) function. - """ - - ajax_template_name = "qr_code.html" - - def get(self, request, *args, **kwargs): - """Return json with qr-code data.""" - self.request = request - self.pk = self.kwargs['pk'] - return self.renderJsonResponse(request, None, context=self.get_context_data()) - - def get_qr_data(self): - """Returns the text object to render to a QR code. - - The actual rendering will be handled by the template - """ - return None - - def get_context_data(self): - """Get context data for passing to the rendering template. - - Explicity passes the parameter 'qr_data' - """ - context = {} - - qr = self.get_qr_data() - - if qr: - context['qr_data'] = qr - else: - context['error_msg'] = 'Error generating QR code' - - return context - - class AjaxUpdateView(AjaxMixin, UpdateView): """An 'AJAXified' UpdateView for updating an object in the db. diff --git a/InvenTree/build/admin.py b/InvenTree/build/admin.py index 6f203d071b..9438526753 100644 --- a/InvenTree/build/admin.py +++ b/InvenTree/build/admin.py @@ -17,7 +17,18 @@ class BuildResource(InvenTreeResource): # but we don't for other ones. # TODO: 2022-05-12 - Need to investigate why this is the case! - id = Field(attribute='pk') + class Meta: + """Metaclass options""" + models = Build + skip_unchanged = True + report_skipped = False + clean_model_instances = True + exclude = [ + 'lft', 'rght', 'tree_id', 'level', + 'metadata', + ] + + id = Field(attribute='pk', widget=widgets.IntegerWidget()) reference = Field(attribute='reference') @@ -39,17 +50,6 @@ class BuildResource(InvenTreeResource): notes = Field(attribute='notes') - class Meta: - """Metaclass options""" - models = Build - skip_unchanged = True - report_skipped = False - clean_model_instances = True - exclude = [ - 'lft', 'rght', 'tree_id', 'level', - 'metadata', - ] - class BuildAdmin(ImportExportModelAdmin): """Class for managing the Build model via the admin interface""" diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index 9fda2c3065..a76b51fd15 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -1,30 +1,39 @@ """JSON API for the Build app.""" -from django.urls import include, re_path +from django.urls import include, path, re_path from django.utils.translation import gettext_lazy as _ +from django.contrib.auth.models import User -from rest_framework import filters from rest_framework.exceptions import ValidationError from django_filters.rest_framework import DjangoFilterBackend from django_filters import rest_framework as rest_filters -from InvenTree.api import AttachmentMixin, APIDownloadMixin, ListCreateDestroyAPIView +from InvenTree.api import AttachmentMixin, APIDownloadMixin, ListCreateDestroyAPIView, MetadataView, StatusView from InvenTree.helpers import str2bool, isNull, DownloadFile -from InvenTree.filters import InvenTreeOrderingFilter from InvenTree.status_codes import BuildStatus from InvenTree.mixins import CreateAPI, RetrieveUpdateDestroyAPI, ListCreateAPI import build.admin import build.serializers from build.models import Build, BuildItem, BuildOrderAttachment - +import part.models from users.models import Owner +from InvenTree.filters import SEARCH_ORDER_FILTER_ALIAS class BuildFilter(rest_filters.FilterSet): """Custom filterset for BuildList API endpoint.""" + class Meta: + """Metaclass options""" + model = Build + fields = [ + 'parent', + 'sales_order', + 'part', + ] + status = rest_filters.NumberFilter(label='Status') active = rest_filters.BooleanFilter(label='Build is active', method='filter_active') @@ -32,22 +41,18 @@ class BuildFilter(rest_filters.FilterSet): def filter_active(self, queryset, name, value): """Filter the queryset to either include or exclude orders which are active.""" if str2bool(value): - queryset = queryset.filter(status__in=BuildStatus.ACTIVE_CODES) + return queryset.filter(status__in=BuildStatus.ACTIVE_CODES) else: - queryset = queryset.exclude(status__in=BuildStatus.ACTIVE_CODES) - - return queryset + return queryset.exclude(status__in=BuildStatus.ACTIVE_CODES) overdue = rest_filters.BooleanFilter(label='Build is overdue', method='filter_overdue') def filter_overdue(self, queryset, name, value): """Filter the queryset to either include or exclude orders which are overdue.""" if str2bool(value): - queryset = queryset.filter(Build.OVERDUE_FILTER) + return queryset.filter(Build.OVERDUE_FILTER) else: - queryset = queryset.exclude(Build.OVERDUE_FILTER) - - return queryset + return queryset.exclude(Build.OVERDUE_FILTER) assigned_to_me = rest_filters.BooleanFilter(label='assigned_to_me', method='filter_assigned_to_me') @@ -59,11 +64,21 @@ class BuildFilter(rest_filters.FilterSet): owners = Owner.get_owners_matching_user(self.request.user) if value: - queryset = queryset.filter(responsible__in=owners) + return queryset.filter(responsible__in=owners) else: - queryset = queryset.exclude(responsible__in=owners) + return queryset.exclude(responsible__in=owners) - return queryset + assigned_to = rest_filters.NumberFilter(label='responsible', method='filter_responsible') + + def filter_responsible(self, queryset, name, value): + """Filter by orders which are assigned to the specified owner.""" + owners = list(Owner.objects.filter(pk=value)) + + # if we query by a user, also find all ownerships through group memberships + if len(owners) > 0 and owners[0].label() == 'user': + owners = Owner.get_owners_matching_user(User.objects.get(pk=owners[0].owner_id)) + + return queryset.filter(responsible__in=owners) # Exact match for reference reference = rest_filters.CharFilter( @@ -84,11 +99,7 @@ class BuildList(APIDownloadMixin, ListCreateAPI): serializer_class = build.serializers.BuildSerializer filterset_class = BuildFilter - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_fields = [ 'reference', @@ -157,18 +168,6 @@ class BuildList(APIDownloadMixin, ListCreateAPI): except (ValueError, Build.DoesNotExist): pass - # Filter by "parent" - parent = params.get('parent', None) - - if parent is not None: - queryset = queryset.filter(parent=parent) - - # Filter by sales_order - sales_order = params.get('sales_order', None) - - if sales_order is not None: - queryset = queryset.filter(sales_order=sales_order) - # Filter by "ancestor" builds ancestor = params.get('ancestor', None) @@ -185,12 +184,6 @@ class BuildList(APIDownloadMixin, ListCreateAPI): except (ValueError, Build.DoesNotExist): pass - # Filter by associated part? - part = params.get('part', None) - - if part is not None: - queryset = queryset.filter(part=part) - # Filter by 'date range' min_date = params.get('min_date', None) max_date = params.get('max_date', None) @@ -359,6 +352,34 @@ class BuildItemDetail(RetrieveUpdateDestroyAPI): serializer_class = build.serializers.BuildItemSerializer +class BuildItemFilter(rest_filters.FilterSet): + """Custom filterset for the BuildItemList API endpoint""" + + class Meta: + """Metaclass option""" + model = BuildItem + fields = [ + 'build', + 'stock_item', + 'bom_item', + 'install_into', + ] + + part = rest_filters.ModelChoiceFilter( + queryset=part.models.Part.objects.all(), + field_name='stock_item__part', + ) + + tracked = rest_filters.BooleanFilter(label='Tracked', method='filter_tracked') + + def filter_tracked(self, queryset, name, value): + """Filter the queryset based on whether build items are tracked""" + if str2bool(value): + return queryset.exclude(install_into=None) + else: + return queryset.filter(install_into=None) + + class BuildItemList(ListCreateAPI): """API endpoint for accessing a list of BuildItem objects. @@ -367,6 +388,7 @@ class BuildItemList(ListCreateAPI): """ serializer_class = build.serializers.BuildItemSerializer + filterset_class = BuildItemFilter def get_serializer(self, *args, **kwargs): """Returns a BuildItemSerializer instance based on the request.""" @@ -404,24 +426,6 @@ class BuildItemList(ListCreateAPI): params = self.request.query_params - # Does the user wish to filter by part? - part_pk = params.get('part', None) - - if part_pk: - queryset = queryset.filter(stock_item__part=part_pk) - - # Filter by "tracked" status - # Tracked means that the item is "installed" into a build output (stock item) - tracked = params.get('tracked', None) - - if tracked is not None: - tracked = str2bool(tracked) - - if tracked: - queryset = queryset.exclude(install_into=None) - else: - queryset = queryset.filter(install_into=None) - # Filter by output target output = params.get('output', None) @@ -438,13 +442,6 @@ class BuildItemList(ListCreateAPI): DjangoFilterBackend, ] - filterset_fields = [ - 'build', - 'stock_item', - 'bom_item', - 'install_into', - ] - class BuildAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): """API endpoint for listing (and creating) BuildOrderAttachment objects.""" @@ -472,18 +469,21 @@ build_api_urls = [ # Attachments re_path(r'^attachment/', include([ - re_path(r'^(?P\d+)/', BuildAttachmentDetail.as_view(), name='api-build-attachment-detail'), + path(r'/', BuildAttachmentDetail.as_view(), name='api-build-attachment-detail'), re_path(r'^.*$', BuildAttachmentList.as_view(), name='api-build-attachment-list'), ])), # Build Items re_path(r'^item/', include([ - re_path(r'^(?P\d+)/', BuildItemDetail.as_view(), name='api-build-item-detail'), + path(r'/', include([ + re_path(r'^metadata/', MetadataView.as_view(), {'model': BuildItem}, name='api-build-item-metadata'), + re_path(r'^.*$', BuildItemDetail.as_view(), name='api-build-item-detail'), + ])), re_path(r'^.*$', BuildItemList.as_view(), name='api-build-item-list'), ])), # Build Detail - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^allocate/', BuildAllocate.as_view(), name='api-build-allocate'), re_path(r'^auto-allocate/', BuildAutoAllocate.as_view(), name='api-build-auto-allocate'), re_path(r'^complete/', BuildOutputComplete.as_view(), name='api-build-output-complete'), @@ -492,9 +492,13 @@ build_api_urls = [ re_path(r'^finish/', BuildFinish.as_view(), name='api-build-finish'), re_path(r'^cancel/', BuildCancel.as_view(), name='api-build-cancel'), re_path(r'^unallocate/', BuildUnallocate.as_view(), name='api-build-unallocate'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': Build}, name='api-build-metadata'), re_path(r'^.*$', BuildDetail.as_view(), name='api-build-detail'), ])), + # Build order status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: BuildStatus}, name='api-build-status-codes'), + # Build List re_path(r'^.*$', BuildList.as_view(), name='api-build-list'), ] diff --git a/InvenTree/build/migrations/0039_auto_20230317_0816.py b/InvenTree/build/migrations/0039_auto_20230317_0816.py new file mode 100644 index 0000000000..d62273d278 --- /dev/null +++ b/InvenTree/build/migrations/0039_auto_20230317_0816.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0038_alter_build_responsible'), + ] + + operations = [ + migrations.AddField( + model_name='build', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='builditem', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/build/migrations/0040_auto_20230404_1310.py b/InvenTree/build/migrations/0040_auto_20230404_1310.py new file mode 100644 index 0000000000..fcb29e7e3a --- /dev/null +++ b/InvenTree/build/migrations/0040_auto_20230404_1310.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-04-04 13:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0039_auto_20230317_0816'), + ] + + operations = [ + migrations.AddField( + model_name='build', + name='barcode_data', + field=models.CharField(blank=True, help_text='Third party barcode data', max_length=500, verbose_name='Barcode Data'), + ), + migrations.AddField( + model_name='build', + name='barcode_hash', + field=models.CharField(blank=True, help_text='Unique hash of barcode data', max_length=128, verbose_name='Barcode Hash'), + ), + ] diff --git a/InvenTree/build/migrations/0041_alter_build_title.py b/InvenTree/build/migrations/0041_alter_build_title.py new file mode 100644 index 0000000000..3962587526 --- /dev/null +++ b/InvenTree/build/migrations/0041_alter_build_title.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-04-12 17:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0040_auto_20230404_1310'), + ] + + operations = [ + migrations.AlterField( + model_name='build', + name='title', + field=models.CharField(blank=True, help_text='Brief description of the build (optional)', max_length=100, verbose_name='Description'), + ), + ] diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 13b09ce000..235897ef4b 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -23,7 +23,7 @@ from rest_framework import serializers from InvenTree.status_codes import BuildStatus, StockStatus, StockHistoryCode from InvenTree.helpers import increment, normalize, notify_responsible -from InvenTree.models import InvenTreeAttachment, ReferenceIndexingMixin +from InvenTree.models import InvenTreeAttachment, InvenTreeBarcodeMixin, ReferenceIndexingMixin from build.validators import generate_next_build_reference, validate_build_order_reference @@ -33,14 +33,16 @@ import InvenTree.ready import InvenTree.tasks from plugin.events import trigger_event +from plugin.models import MetadataMixin import common.notifications -from part import models as PartModels -from stock import models as StockModels -from users import models as UserModels + +import part.models +import stock.models +import users.models -class Build(MPTTModel, ReferenceIndexingMixin): +class Build(MPTTModel, InvenTreeBarcodeMixin, MetadataMixin, ReferenceIndexingMixin): """A Build object organises the creation of new StockItem objects from other existing StockItem objects. Attributes: @@ -64,6 +66,11 @@ class Build(MPTTModel, ReferenceIndexingMixin): priority: Priority of the build """ + class Meta: + """Metaclass options for the BuildOrder model""" + verbose_name = _("Build Order") + verbose_name_plural = _("Build Orders") + OVERDUE_FILTER = Q(status__in=BuildStatus.ACTIVE_CODES) & ~Q(target_date=None) & Q(target_date__lte=datetime.now().date()) # Global setting for specifying reference pattern @@ -106,11 +113,6 @@ class Build(MPTTModel, ReferenceIndexingMixin): 'parent': _('Invalid choice for parent build'), }) - class Meta: - """Metaclass options for the BuildOrder model""" - verbose_name = _("Build Order") - verbose_name_plural = _("Build Orders") - @staticmethod def filterByDate(queryset, min_date, max_date): """Filter by 'minimum and maximum date range'. @@ -162,9 +164,9 @@ class Build(MPTTModel, ReferenceIndexingMixin): title = models.CharField( verbose_name=_('Description'), - blank=False, + blank=True, max_length=100, - help_text=_('Brief description of the build') + help_text=_('Brief description of the build (optional)') ) parent = TreeForeignKey( @@ -278,7 +280,7 @@ class Build(MPTTModel, ReferenceIndexingMixin): ) responsible = models.ForeignKey( - UserModels.Owner, + users.models.Owner, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('Responsible'), @@ -394,9 +396,9 @@ class Build(MPTTModel, ReferenceIndexingMixin): if in_stock is not None: if in_stock: - outputs = outputs.filter(StockModels.StockItem.IN_STOCK_FILTER) + outputs = outputs.filter(stock.models.StockItem.IN_STOCK_FILTER) else: - outputs = outputs.exclude(StockModels.StockItem.IN_STOCK_FILTER) + outputs = outputs.exclude(stock.models.StockItem.IN_STOCK_FILTER) # Filter by 'complete' status complete = kwargs.get('complete', None) @@ -658,7 +660,7 @@ class Build(MPTTModel, ReferenceIndexingMixin): else: serial = None - output = StockModels.StockItem.objects.create( + output = stock.models.StockItem.objects.create( quantity=1, location=location, part=self.part, @@ -676,11 +678,11 @@ class Build(MPTTModel, ReferenceIndexingMixin): parts = bom_item.get_valid_parts_for_allocation() - items = StockModels.StockItem.objects.filter( + items = stock.models.StockItem.objects.filter( part__in=parts, serial=str(serial), quantity=1, - ).filter(StockModels.StockItem.IN_STOCK_FILTER) + ).filter(stock.models.StockItem.IN_STOCK_FILTER) """ Test if there is a matching serial number! @@ -700,7 +702,7 @@ class Build(MPTTModel, ReferenceIndexingMixin): else: """Create a single build output of the given quantity.""" - StockModels.StockItem.objects.create( + stock.models.StockItem.objects.create( quantity=quantity, location=location, part=self.part, @@ -876,7 +878,7 @@ class Build(MPTTModel, ReferenceIndexingMixin): ) # Look for available stock items - available_stock = StockModels.StockItem.objects.filter(StockModels.StockItem.IN_STOCK_FILTER) + available_stock = stock.models.StockItem.objects.filter(stock.models.StockItem.IN_STOCK_FILTER) # Filter by list of available parts available_stock = available_stock.filter( @@ -1140,7 +1142,7 @@ class BuildOrderAttachment(InvenTreeAttachment): build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='attachments') -class BuildItem(models.Model): +class BuildItem(MetadataMixin, models.Model): """A BuildItem links multiple StockItem objects to a Build. These are used to allocate part stock to a build. Once the Build is completed, the parts are removed from stock and the BuildItemAllocation objects are removed. @@ -1153,17 +1155,17 @@ class BuildItem(models.Model): install_into: Destination stock item (or None) """ - @staticmethod - def get_api_url(): - """Return the API URL used to access this model""" - return reverse('api-build-item-list') - class Meta: """Serializer metaclass""" unique_together = [ ('build', 'stock_item', 'install_into'), ] + @staticmethod + def get_api_url(): + """Return the API URL used to access this model""" + return reverse('api-build-item-list') + def save(self, *args, **kwargs): """Custom save method for the BuildItem model""" self.clean() @@ -1219,7 +1221,7 @@ class BuildItem(models.Model): 'quantity': _('Quantity must be 1 for serialized stock') }) - except (StockModels.StockItem.DoesNotExist, PartModels.Part.DoesNotExist): + except (stock.models.StockItem.DoesNotExist, part.models.Part.DoesNotExist): pass """ @@ -1258,8 +1260,8 @@ class BuildItem(models.Model): for idx, ancestor in enumerate(ancestors): try: - bom_item = PartModels.BomItem.objects.get(part=self.build.part, sub_part=ancestor) - except PartModels.BomItem.DoesNotExist: + bom_item = part.models.BomItem.objects.get(part=self.build.part, sub_part=ancestor) + except part.models.BomItem.DoesNotExist: continue # A matching BOM item has been found! @@ -1349,7 +1351,7 @@ class BuildItem(models.Model): # Internal model which links part <-> sub_part # We need to track this separately, to allow for "variant' stock bom_item = models.ForeignKey( - PartModels.BomItem, + part.models.BomItem, on_delete=models.CASCADE, related_name='allocate_build_items', blank=True, null=True, diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 1f2844bda8..3ac30928bd 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -30,7 +30,49 @@ from .models import Build, BuildItem, BuildOrderAttachment class BuildSerializer(InvenTreeModelSerializer): """Serializes a Build object.""" + class Meta: + """Serializer metaclass""" + model = Build + fields = [ + 'pk', + 'url', + 'title', + 'barcode_hash', + 'batch', + 'creation_date', + 'completed', + 'completion_date', + 'destination', + 'parent', + 'part', + 'part_detail', + 'overdue', + 'reference', + 'sales_order', + 'quantity', + 'status', + 'status_text', + 'target_date', + 'take_from', + 'notes', + 'link', + 'issued_by', + 'issued_by_detail', + 'responsible', + 'responsible_detail', + 'priority', + ] + + read_only_fields = [ + 'completed', + 'creation_date', + 'completion_data', + 'status', + 'status_text', + ] + url = serializers.CharField(source='get_absolute_url', read_only=True) + status_text = serializers.CharField(source='get_status_display', read_only=True) part_detail = PartBriefSerializer(source='part', many=False, read_only=True) @@ -43,6 +85,8 @@ class BuildSerializer(InvenTreeModelSerializer): responsible_detail = OwnerSerializer(source='responsible', read_only=True) + barcode_hash = serializers.CharField(read_only=True) + @staticmethod def annotate_queryset(queryset): """Add custom annotations to the BuildSerializer queryset, performing database queries as efficiently as possible. @@ -83,46 +127,6 @@ class BuildSerializer(InvenTreeModelSerializer): return reference - class Meta: - """Serializer metaclass""" - model = Build - fields = [ - 'pk', - 'url', - 'title', - 'batch', - 'creation_date', - 'completed', - 'completion_date', - 'destination', - 'parent', - 'part', - 'part_detail', - 'overdue', - 'reference', - 'sales_order', - 'quantity', - 'status', - 'status_text', - 'target_date', - 'take_from', - 'notes', - 'link', - 'issued_by', - 'issued_by_detail', - 'responsible', - 'responsible_detail', - 'priority', - ] - - read_only_fields = [ - 'completed', - 'creation_date', - 'completion_data', - 'status', - 'status_text', - ] - class BuildOutputSerializer(serializers.Serializer): """Serializer for a "BuildOutput". @@ -130,6 +134,12 @@ class BuildOutputSerializer(serializers.Serializer): Note that a "BuildOutput" is really just a StockItem which is "in production"! """ + class Meta: + """Serializer metaclass""" + fields = [ + 'output', + ] + output = serializers.PrimaryKeyRelatedField( queryset=StockItem.objects.all(), many=False, @@ -170,12 +180,6 @@ class BuildOutputSerializer(serializers.Serializer): return output - class Meta: - """Serializer metaclass""" - fields = [ - 'output', - ] - class BuildOutputCreateSerializer(serializers.Serializer): """Serializer for creating a new BuildOutput against a BuildOrder. @@ -633,6 +637,15 @@ class BuildUnallocationSerializer(serializers.Serializer): class BuildAllocationItemSerializer(serializers.Serializer): """A serializer for allocating a single stock item against a build order.""" + class Meta: + """Serializer metaclass""" + fields = [ + 'bom_item', + 'stock_item', + 'quantity', + 'output', + ] + bom_item = serializers.PrimaryKeyRelatedField( queryset=BomItem.objects.all(), many=False, @@ -693,15 +706,6 @@ class BuildAllocationItemSerializer(serializers.Serializer): label=_('Build Output'), ) - class Meta: - """Serializer metaclass""" - fields = [ - 'bom_item', - 'stock_item', - 'quantity', - 'output', - ] - def validate(self, data): """Perform data validation for this item""" super().validate(data) @@ -751,14 +755,14 @@ class BuildAllocationItemSerializer(serializers.Serializer): class BuildAllocationSerializer(serializers.Serializer): """DRF serializer for allocation stock items against a build order.""" - items = BuildAllocationItemSerializer(many=True) - class Meta: """Serializer metaclass""" fields = [ 'items', ] + items = BuildAllocationItemSerializer(many=True) + def validate(self, data): """Validation.""" data = super().validate(data) @@ -870,6 +874,24 @@ class BuildAutoAllocationSerializer(serializers.Serializer): class BuildItemSerializer(InvenTreeModelSerializer): """Serializes a BuildItem object.""" + class Meta: + """Serializer metaclass""" + model = BuildItem + fields = [ + 'pk', + 'bom_part', + 'build', + 'build_detail', + 'install_into', + 'location', + 'location_detail', + 'part', + 'part_detail', + 'stock_item', + 'stock_item_detail', + 'quantity' + ] + bom_part = serializers.IntegerField(source='bom_item.sub_part.pk', read_only=True) part = serializers.IntegerField(source='stock_item.part.pk', read_only=True) location = serializers.IntegerField(source='stock_item.location.pk', read_only=True) @@ -903,24 +925,6 @@ class BuildItemSerializer(InvenTreeModelSerializer): if not stock_detail: self.fields.pop('stock_item_detail') - class Meta: - """Serializer metaclass""" - model = BuildItem - fields = [ - 'pk', - 'bom_part', - 'build', - 'build_detail', - 'install_into', - 'location', - 'location_detail', - 'part', - 'part_detail', - 'stock_item', - 'stock_item_detail', - 'quantity' - ] - class BuildAttachmentSerializer(InvenTreeAttachmentSerializer): """Serializer for a BuildAttachment.""" @@ -929,18 +933,6 @@ class BuildAttachmentSerializer(InvenTreeAttachmentSerializer): """Serializer metaclass""" model = BuildOrderAttachment - fields = [ - 'pk', + fields = InvenTreeAttachmentSerializer.attachment_fields([ 'build', - 'attachment', - 'link', - 'filename', - 'comment', - 'upload_date', - 'user', - 'user_detail', - ] - - read_only_fields = [ - 'upload_date', - ] + ]) diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index 01aae6e573..f0aff38766 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -33,6 +33,24 @@ src="{% static 'img/blank_image.png' %}" {% url 'admin:build_build_change' build.pk as url %} {% include "admin_button.html" with url=url %} {% endif %} +{% if barcodes %} + +
+ + +
+{% endif %} {% if report_enabled %}
@@ -90,6 +108,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "Build Description" %} {{ build.title }} + {% include "barcode_data.html" with instance=build %}
@@ -98,13 +117,6 @@ src="{% static 'img/blank_image.png' %}" {% trans "No build outputs have been created for this build order" %}
{% endif %} - {% if build.sales_order %} -
- {% object_link 'so-detail' build.sales_order.id build.sales_order as link %} - {% blocktrans %}This Build Order is allocated to Sales Order {{link}}{% endblocktrans %} -
- {% endif %} - {% if build.parent %}
{% object_link 'build-detail' build.parent.id build.parent as link %} @@ -162,7 +174,12 @@ src="{% static 'img/blank_image.png' %}" {% endif %} - + + {% if build.completed >= build.quantity %} + + {% else %} + + {% endif %} {% trans "Completed" %} {% progress_bar build.completed build.quantity id='build-completed' max_width='150px' %} @@ -247,7 +264,11 @@ src="{% static 'img/blank_image.png' %}" {% if report_enabled %} $('#print-build-report').click(function() { - printBuildReports([{{ build.pk }}]); + printReports({ + items: [{{ build.pk }}], + key: 'build', + url: '{% url "api-build-report-list" %}', + }); }); {% endif %} @@ -262,4 +283,33 @@ src="{% static 'img/blank_image.png' %}" ); }); + {% if barcodes %} + + $('#show-qr-code').click(function() { + showQRDialog( + '{% trans "Build Order QR Code" %}', + '{"build": {{ build.pk }}}' + ); + }); + + {% if roles.purchase_order.change %} + $("#barcode-link").click(function() { + linkBarcodeDialog( + { + build: {{ build.pk }}, + }, + { + title: '{% trans "Link Barcode to Build Order" %}', + } + ); + }); + + $("#barcode-unlink").click(function() { + unlinkBarcode({ + build: {{ build.pk }}, + }); + }); + {% endif %} + {% endif %} + {% endblock %} diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html index f7d57b8288..66933629a8 100644 --- a/InvenTree/build/templates/build/detail.html +++ b/InvenTree/build/templates/build/detail.html @@ -67,7 +67,7 @@ {% trans "Completed" %} {% progress_bar build.completed build.quantity id='build-completed-2' max_width='150px' %} - {% if build.active and build.has_untracked_bom_items %} + {% if build.active and has_untracked_bom_items %} {% trans "Allocated Parts" %} @@ -179,7 +179,7 @@

{% trans "Allocate Stock to Build" %}

{% include "spacer.html" %}
- {% if roles.build.add and build.active and build.has_untracked_bom_items %} + {% if roles.build.add and build.active and has_untracked_bom_items %} @@ -199,7 +199,7 @@
- {% if build.has_untracked_bom_items %} + {% if has_untracked_bom_items %} {% if build.active %} {% if build.are_untracked_parts_allocated %}
@@ -268,24 +268,6 @@ {% endif %}
- - - - - {% if build.has_tracked_bom_items %} - {% include "expand_rows.html" with label="outputs" %} - {% include "collapse_rows.html" with label="outputs" %} - {% endif %} - {% include "filter_list.html" with id='incompletebuilditems' %}
{% endif %} @@ -372,20 +354,6 @@ onPanelLoad('children', function() { onPanelLoad('attachments', function() { - enableDragAndDrop( - '#attachment-dropzone', - '{% url "api-build-attachment-list" %}', - { - data: { - build: {{ build.id }}, - }, - label: 'attachment', - success: function(data, status, xhr) { - $('#attachment-table').bootstrapTable('refresh'); - } - } - ); - loadAttachmentTable('{% url "api-build-attachment-list" %}', { filters: { build: {{ build.pk }}, @@ -414,10 +382,6 @@ onPanelLoad('notes', function() { ); }); -function reloadTable() { - $('#allocation-table-untracked').bootstrapTable('refresh'); -} - onPanelLoad('outputs', function() { {% if build.active %} @@ -436,7 +400,7 @@ onPanelLoad('outputs', function() { {% endif %} }); -{% if build.active and build.has_untracked_bom_items %} +{% if build.active and has_untracked_bom_items %} function loadUntrackedStockTable() { diff --git a/InvenTree/build/templates/build/index.html b/InvenTree/build/templates/build/index.html index 4d1476f959..6f08348f44 100644 --- a/InvenTree/build/templates/build/index.html +++ b/InvenTree/build/templates/build/index.html @@ -26,20 +26,6 @@
- - {% if report_enabled %} - - {% endif %} {% include "filter_list.html" with id="build" %}
@@ -62,17 +48,4 @@ loadBuildTable($("#build-table"), { locale: '{{ request.LANGUAGE_CODE }}', }); -{% if report_enabled %} -$('#multi-build-print').click(function() { - var rows = getTableData("#build-table"); - var build_ids = []; - - rows.forEach(function(row) { - build_ids.push(row.pk); - }); - - printBuildReports(build_ids); -}); -{% endif %} - {% endblock %} diff --git a/InvenTree/build/test_api.py b/InvenTree/build/test_api.py index af6d7a0781..d27102e53d 100644 --- a/InvenTree/build/test_api.py +++ b/InvenTree/build/test_api.py @@ -37,49 +37,50 @@ class TestBuildAPI(InvenTreeAPITestCase): def test_get_build_list(self): """Test that we can retrieve list of build objects.""" url = reverse('api-build-list') - response = self.client.get(url, format='json') + + response = self.get(url, expected_code=200) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 5) # Filter query by build status - response = self.client.get(url, {'status': 40}, format='json') + response = self.get(url, {'status': 40}, expected_code=200) self.assertEqual(len(response.data), 4) # Filter by "active" status - response = self.client.get(url, {'active': True}, format='json') + response = self.get(url, {'active': True}, expected_code=200) self.assertEqual(len(response.data), 1) self.assertEqual(response.data[0]['pk'], 1) - response = self.client.get(url, {'active': False}, format='json') + response = self.get(url, {'active': False}, expected_code=200) self.assertEqual(len(response.data), 4) # Filter by 'part' status - response = self.client.get(url, {'part': 25}, format='json') + response = self.get(url, {'part': 25}, expected_code=200) self.assertEqual(len(response.data), 1) # Filter by an invalid part - response = self.client.get(url, {'part': 99999}, format='json') - self.assertEqual(len(response.data), 0) + response = self.get(url, {'part': 99999}, expected_code=400) + self.assertIn('Select a valid choice', str(response.data)) # Get a certain reference - response = self.client.get(url, {'reference': 'BO-0001'}, format='json') + response = self.get(url, {'reference': 'BO-0001'}, expected_code=200) self.assertEqual(len(response.data), 1) # Get a certain reference - response = self.client.get(url, {'reference': 'BO-9999XX'}, format='json') + response = self.get(url, {'reference': 'BO-9999XX'}, expected_code=200) self.assertEqual(len(response.data), 0) def test_get_build_item_list(self): """Test that we can retrieve list of BuildItem objects.""" url = reverse('api-build-item-list') - response = self.client.get(url, format='json') + response = self.get(url, expected_code=200) self.assertEqual(response.status_code, status.HTTP_200_OK) # Test again, filtering by park ID - response = self.client.get(url, {'part': '1'}, format='json') + response = self.get(url, {'part': '1'}, expected_code=200) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -731,38 +732,42 @@ class BuildOverallocationTest(BuildAPITest): Using same Build ID=1 as allocation test above. """ - def setUp(self): + @classmethod + def setUpTestData(cls): """Basic operation as part of test suite setup""" - super().setUp() + super().setUpTestData() - self.assignRole('build.add') - self.assignRole('build.change') + cls.assignRole('build.add') + cls.assignRole('build.change') - self.build = Build.objects.get(pk=1) - self.url = reverse('api-build-finish', kwargs={'pk': self.build.pk}) + cls.build = Build.objects.get(pk=1) + cls.url = reverse('api-build-finish', kwargs={'pk': cls.build.pk}) StockItem.objects.create(part=Part.objects.get(pk=50), quantity=30) # Keep some state for use in later assertions, and then overallocate - self.state = {} - self.allocation = {} - for i, bi in enumerate(self.build.part.bom_items.all()): - rq = self.build.required_quantity(bi, None) + i + 1 + cls.state = {} + cls.allocation = {} + + for i, bi in enumerate(cls.build.part.bom_items.all()): + rq = cls.build.required_quantity(bi, None) + i + 1 si = StockItem.objects.filter(part=bi.sub_part, quantity__gte=rq).first() - self.state[bi.sub_part] = (si, si.quantity, rq) + cls.state[bi.sub_part] = (si, si.quantity, rq) BuildItem.objects.create( - build=self.build, + build=cls.build, stock_item=si, quantity=rq, ) # create and complete outputs - self.build.create_build_output(self.build.quantity) - outputs = self.build.build_outputs.all() - self.build.complete_build_output(outputs[0], self.user) + cls.build.create_build_output(cls.build.quantity) + outputs = cls.build.build_outputs.all() + cls.build.complete_build_output(outputs[0], cls.user) + + def test_setup(self): + """Validate expected state after set-up.""" - # Validate expected state after set-up. self.assertEqual(self.build.incomplete_outputs.count(), 0) self.assertEqual(self.build.complete_outputs.count(), 1) self.assertEqual(self.build.completed, self.build.quantity) diff --git a/InvenTree/build/test_build.py b/InvenTree/build/test_build.py index 38c20c331b..d6788d38ec 100644 --- a/InvenTree/build/test_build.py +++ b/InvenTree/build/test_build.py @@ -29,7 +29,8 @@ class BuildTestBase(TestCase): 'users', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Initialize data to use for these tests. The base Part 'assembly' has a BOM consisting of three parts: @@ -45,27 +46,29 @@ class BuildTestBase(TestCase): """ + super().setUpTestData() + # Create a base "Part" - self.assembly = Part.objects.create( + cls.assembly = Part.objects.create( name="An assembled part", description="Why does it matter what my description is?", assembly=True, trackable=True, ) - self.sub_part_1 = Part.objects.create( + cls.sub_part_1 = Part.objects.create( name="Widget A", description="A widget", component=True ) - self.sub_part_2 = Part.objects.create( + cls.sub_part_2 = Part.objects.create( name="Widget B", description="A widget", component=True ) - self.sub_part_3 = Part.objects.create( + cls.sub_part_3 = Part.objects.create( name="Widget C", description="A widget", component=True, @@ -73,63 +76,63 @@ class BuildTestBase(TestCase): ) # Create BOM item links for the parts - self.bom_item_1 = BomItem.objects.create( - part=self.assembly, - sub_part=self.sub_part_1, + cls.bom_item_1 = BomItem.objects.create( + part=cls.assembly, + sub_part=cls.sub_part_1, quantity=5 ) - self.bom_item_2 = BomItem.objects.create( - part=self.assembly, - sub_part=self.sub_part_2, + cls.bom_item_2 = BomItem.objects.create( + part=cls.assembly, + sub_part=cls.sub_part_2, quantity=3, optional=True ) # sub_part_3 is trackable! - self.bom_item_3 = BomItem.objects.create( - part=self.assembly, - sub_part=self.sub_part_3, + cls.bom_item_3 = BomItem.objects.create( + part=cls.assembly, + sub_part=cls.sub_part_3, quantity=2 ) ref = generate_next_build_reference() # Create a "Build" object to make 10x objects - self.build = Build.objects.create( + cls.build = Build.objects.create( reference=ref, title="This is a build", - part=self.assembly, + part=cls.assembly, quantity=10, issued_by=get_user_model().objects.get(pk=1), ) # Create some build output (StockItem) objects - self.output_1 = StockItem.objects.create( - part=self.assembly, + cls.output_1 = StockItem.objects.create( + part=cls.assembly, quantity=3, is_building=True, - build=self.build + build=cls.build ) - self.output_2 = StockItem.objects.create( - part=self.assembly, + cls.output_2 = StockItem.objects.create( + part=cls.assembly, quantity=7, is_building=True, - build=self.build, + build=cls.build, ) # Create some stock items to assign to the build - self.stock_1_1 = StockItem.objects.create(part=self.sub_part_1, quantity=3) - self.stock_1_2 = StockItem.objects.create(part=self.sub_part_1, quantity=100) + cls.stock_1_1 = StockItem.objects.create(part=cls.sub_part_1, quantity=3) + cls.stock_1_2 = StockItem.objects.create(part=cls.sub_part_1, quantity=100) - self.stock_2_1 = StockItem.objects.create(part=self.sub_part_2, quantity=5) - self.stock_2_2 = StockItem.objects.create(part=self.sub_part_2, quantity=5) - self.stock_2_3 = StockItem.objects.create(part=self.sub_part_2, quantity=5) - self.stock_2_4 = StockItem.objects.create(part=self.sub_part_2, quantity=5) - self.stock_2_5 = StockItem.objects.create(part=self.sub_part_2, quantity=5) + cls.stock_2_1 = StockItem.objects.create(part=cls.sub_part_2, quantity=5) + cls.stock_2_2 = StockItem.objects.create(part=cls.sub_part_2, quantity=5) + cls.stock_2_3 = StockItem.objects.create(part=cls.sub_part_2, quantity=5) + cls.stock_2_4 = StockItem.objects.create(part=cls.sub_part_2, quantity=5) + cls.stock_2_5 = StockItem.objects.create(part=cls.sub_part_2, quantity=5) - self.stock_3_1 = StockItem.objects.create(part=self.sub_part_3, quantity=1000) + cls.stock_3_1 = StockItem.objects.create(part=cls.sub_part_3, quantity=1000) class BuildTest(BuildTestBase): @@ -567,6 +570,29 @@ class BuildTest(BuildTestBase): self.assertTrue(messages.filter(user__pk=4).exists()) + def test_metadata(self): + """Unit tests for the metadata field.""" + + # Make sure a BuildItem exists before trying to run this test + b = BuildItem(stock_item=self.stock_1_2, build=self.build, install_into=self.output_1, quantity=10) + b.save() + + for model in [Build, BuildItem]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) + class AutoAllocationTests(BuildTestBase): """Tests for auto allocating stock against a build order""" diff --git a/InvenTree/build/urls.py b/InvenTree/build/urls.py index 0b33c7d78e..6dab501239 100644 --- a/InvenTree/build/urls.py +++ b/InvenTree/build/urls.py @@ -1,13 +1,13 @@ """URL lookup for Build app.""" -from django.urls import include, re_path +from django.urls import include, path, re_path from . import views build_urls = [ - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^.*$', views.BuildDetail.as_view(), name='build-detail'), ])), diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index bccd1b31e6..4de664d2a1 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -34,15 +34,11 @@ class BuildDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView): build = self.get_object() - ctx['bom_price'] = build.part.get_price_info(build.quantity, buy=False) ctx['BuildStatus'] = BuildStatus - ctx['sub_build_count'] = build.sub_build_count() part = build.part - bom_items = build.bom_items ctx['part'] = part - ctx['bom_items'] = bom_items ctx['has_tracked_bom_items'] = build.has_tracked_bom_items() ctx['has_untracked_bom_items'] = build.has_untracked_bom_items() diff --git a/InvenTree/common/api.py b/InvenTree/common/api.py index 4061e37b3b..80e509173f 100644 --- a/InvenTree/common/api.py +++ b/InvenTree/common/api.py @@ -7,10 +7,9 @@ from django.urls import include, path, re_path from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt -from django_filters.rest_framework import DjangoFilterBackend from django_q.tasks import async_task from djmoney.contrib.exchange.models import ExchangeBackend, Rate -from rest_framework import filters, permissions, serializers +from rest_framework import permissions, serializers from rest_framework.exceptions import NotAcceptable, NotFound from rest_framework.permissions import IsAdminUser from rest_framework.response import Response @@ -20,6 +19,7 @@ import common.models import common.serializers from InvenTree.api import BulkDeleteMixin from InvenTree.config import CONFIG_LOOKUPS +from InvenTree.filters import ORDER_FILTER, SEARCH_ORDER_FILTER from InvenTree.helpers import inheritors from InvenTree.mixins import (ListAPI, RetrieveAPI, RetrieveUpdateAPI, RetrieveUpdateDestroyAPI) @@ -167,11 +167,7 @@ class SettingsList(ListAPI): This is inheritted by all list views for settings. """ - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'pk', @@ -187,7 +183,7 @@ class SettingsList(ListAPI): class GlobalSettingsList(SettingsList): """API endpoint for accessing a list of global settings objects.""" - queryset = common.models.InvenTreeSetting.objects.all() + queryset = common.models.InvenTreeSetting.objects.exclude(key__startswith="_") serializer_class = common.serializers.GlobalSettingsSerializer @@ -216,7 +212,7 @@ class GlobalSettingsDetail(RetrieveUpdateAPI): """ lookup_field = 'key' - queryset = common.models.InvenTreeSetting.objects.all() + queryset = common.models.InvenTreeSetting.objects.exclude(key__startswith="_") serializer_class = common.serializers.GlobalSettingsSerializer def get_object(self): @@ -226,7 +222,10 @@ class GlobalSettingsDetail(RetrieveUpdateAPI): if key not in common.models.InvenTreeSetting.SETTINGS.keys(): raise NotFound() - return common.models.InvenTreeSetting.get_setting_object(key) + return common.models.InvenTreeSetting.get_setting_object( + key, + cache=False, create=True + ) permission_classes = [ permissions.IsAuthenticated, @@ -284,7 +283,11 @@ class UserSettingsDetail(RetrieveUpdateAPI): if key not in common.models.InvenTreeUserSetting.SETTINGS.keys(): raise NotFound() - return common.models.InvenTreeUserSetting.get_setting_object(key, user=self.request.user) + return common.models.InvenTreeUserSetting.get_setting_object( + key, + user=self.request.user, + cache=False, create=True + ) permission_classes = [ UserSettingsPermissions, @@ -332,11 +335,7 @@ class NotificationList(NotificationMessageMixin, BulkDeleteMixin, ListAPI): permission_classes = [permissions.IsAuthenticated, ] - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'category', @@ -401,10 +400,7 @@ class NewsFeedMixin: class NewsFeedEntryList(NewsFeedMixin, BulkDeleteMixin, ListAPI): """List view for all news items.""" - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - ] + filter_backends = ORDER_FILTER ordering_fields = [ 'published', @@ -457,7 +453,7 @@ settings_api_urls = [ # Notification settings re_path(r'^notification/', include([ # Notification Settings Detail - re_path(r'^(?P\d+)/', NotificationUserSettingsDetail.as_view(), name='api-notification-setting-detail'), + path(r'/', NotificationUserSettingsDetail.as_view(), name='api-notification-setting-detail'), # Notification Settings List re_path(r'^.*$', NotificationUserSettingsList.as_view(), name='api-notifcation-setting-list'), @@ -486,7 +482,7 @@ common_api_urls = [ # Notifications re_path(r'^notifications/', include([ # Individual purchase order detail URLs - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'.*$', NotificationDetail.as_view(), name='api-notifications-detail'), ])), # Read all @@ -498,7 +494,7 @@ common_api_urls = [ # News re_path(r'^news/', include([ - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'.*$', NewsFeedEntryDetail.as_view(), name='api-news-detail'), ])), re_path(r'^.*$', NewsFeedEntryList.as_view(), name='api-news-list'), diff --git a/InvenTree/common/files.py b/InvenTree/common/files.py index 786b49e782..5f0e2cb38d 100644 --- a/InvenTree/common/files.py +++ b/InvenTree/common/files.py @@ -59,7 +59,8 @@ class FileManager: # Reset stream position to beginning of file file.seek(0) else: - raise ValidationError(_(f'Unsupported file format: {ext.upper()}')) + fmt = ext.upper() + raise ValidationError(_(f'Unsupported file format: {fmt}')) except UnicodeEncodeError: raise ValidationError(_('Error reading file (invalid encoding)')) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index d71d9e3aba..c5123a7e72 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -46,6 +46,7 @@ import InvenTree.ready import InvenTree.tasks import InvenTree.validators import order.validators +from plugin import registry logger = logging.getLogger('inventree') @@ -179,6 +180,10 @@ class BaseInvenTreeSetting(models.Model): """ results = cls.objects.all() + if exclude_hidden: + # Keys which start with an undersore are used for internal functionality + results = results.exclude(key__startswith='_') + # Optionally filter by user if user is not None: results = results.filter(user=user) @@ -383,10 +388,10 @@ class BaseInvenTreeSetting(models.Model): if not setting: # Unless otherwise specified, attempt to create the setting - create = kwargs.get('create', True) + create = kwargs.pop('create', True) # Prevent creation of new settings objects when importing data - if InvenTree.ready.isImportingData() or not InvenTree.ready.canAppAccessDatabase(allow_test=True): + if InvenTree.ready.isImportingData() or not InvenTree.ready.canAppAccessDatabase(allow_test=True, allow_shell=True): create = False if create: @@ -852,6 +857,12 @@ class InvenTreeSetting(BaseInvenTreeSetting): even if that key does not exist. """ + class Meta: + """Meta options for InvenTreeSetting.""" + + verbose_name = "InvenTree Setting" + verbose_name_plural = "InvenTree Settings" + def save(self, *args, **kwargs): """When saving a global setting, check to see if it requires a server restart. @@ -973,6 +984,17 @@ class InvenTreeSetting(BaseInvenTreeSetting): ] }, + 'INVENTREE_UPDATE_CHECK_INTERVAL': { + 'name': _('Update Check Inverval'), + 'description': _('How often to check for updates (set to zero to disable)'), + 'validator': [ + int, + MinValueValidator(0), + ], + 'default': 7, + 'units': _('days'), + }, + 'INVENTREE_BACKUP_ENABLE': { 'name': _('Automatic Backup'), 'description': _('Enable automatic backup of database and media files'), @@ -981,20 +1003,21 @@ class InvenTreeSetting(BaseInvenTreeSetting): }, 'INVENTREE_BACKUP_DAYS': { - 'name': _('Days Between Backup'), + 'name': _('Auto Backup Interval'), 'description': _('Specify number of days between automated backup events'), 'validator': [ int, MinValueValidator(1), ], 'default': 1, + 'units': _('days'), }, 'INVENTREE_DELETE_TASKS_DAYS': { - 'name': _('Delete Old Tasks'), + 'name': _('Task Deletion Interval'), 'description': _('Background task results will be deleted after specified number of days'), 'default': 30, - 'units': 'days', + 'units': _('days'), 'validator': [ int, MinValueValidator(7), @@ -1002,10 +1025,10 @@ class InvenTreeSetting(BaseInvenTreeSetting): }, 'INVENTREE_DELETE_ERRORS_DAYS': { - 'name': _('Delete Error Logs'), + 'name': _('Error Log Deletion Interval'), 'description': _('Error logs will be deleted after specified number of days'), 'default': 30, - 'units': 'days', + 'units': _('days'), 'validator': [ int, MinValueValidator(7) @@ -1013,10 +1036,10 @@ class InvenTreeSetting(BaseInvenTreeSetting): }, 'INVENTREE_DELETE_NOTIFICATIONS_DAYS': { - 'name': _('Delete Notifications'), + 'name': _('Notification Deletion Interval'), 'description': _('User notifications will be deleted after specified number of days'), 'default': 30, - 'units': 'days', + 'units': _('days'), 'validator': [ int, MinValueValidator(7), @@ -1048,6 +1071,13 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'validator': bool, }, + 'PART_ENABLE_REVISION': { + 'name': _('Part Revisions'), + 'description': _('Enable revision field for Part'), + 'validator': bool, + 'default': True, + }, + 'PART_IPN_REGEX': { 'name': _('IPN Regex'), 'description': _('Regular expression pattern for matching Part IPN') @@ -1186,9 +1216,20 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': '', }, + 'PRICING_DECIMAL_PLACES_MIN': { + 'name': _('Minimum Pricing Decimal Places'), + 'description': _('Minimum number of decimal places to display when rendering pricing data'), + 'default': 0, + 'validator': [ + int, + MinValueValidator(0), + MaxValueValidator(4), + ] + }, + 'PRICING_DECIMAL_PLACES': { - 'name': _('Pricing Decimal Places'), - 'description': _('Number of decimal places to display when rendering pricing data'), + 'name': _('Maximum Pricing Decimal Places'), + 'description': _('Maximum number of decimal places to display when rendering pricing data'), 'default': 6, 'validator': [ int, @@ -1222,7 +1263,7 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'name': _('Stock Item Pricing Age'), 'description': _('Exclude stock items older than this number of days from pricing calculations'), 'default': 0, - 'units': 'days', + 'units': _('days'), 'validator': [ int, MinValueValidator(0), @@ -1244,7 +1285,7 @@ class InvenTreeSetting(BaseInvenTreeSetting): }, 'PRICING_UPDATE_DAYS': { - 'name': _('Pricing Rebuild Time'), + 'name': _('Pricing Rebuild Interval'), 'description': _('Number of days before part pricing is automatically updated'), 'units': _('days'), 'default': 30, @@ -1400,6 +1441,27 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'validator': build.validators.validate_build_order_reference_pattern, }, + 'RETURNORDER_ENABLED': { + 'name': _('Enable Return Orders'), + 'description': _('Enable return order functionality in the user interface'), + 'validator': bool, + 'default': False, + }, + + 'RETURNORDER_REFERENCE_PATTERN': { + 'name': _('Return Order Reference Pattern'), + 'description': _('Required pattern for generating Return Order reference field'), + 'default': 'RMA-{ref:04d}', + 'validator': order.validators.validate_return_order_reference_pattern, + }, + + 'RETURNORDER_EDIT_COMPLETED_ORDERS': { + 'name': _('Edit Completed Return Orders'), + 'description': _('Allow editing of return orders after they have been completed'), + 'default': False, + 'validator': bool, + }, + 'SALESORDER_REFERENCE_PATTERN': { 'name': _('Sales Order Reference Pattern'), 'description': _('Required pattern for generating Sales Order reference field'), @@ -1568,16 +1630,39 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'validator': bool, 'requires_restart': True, }, + + 'STOCKTAKE_ENABLE': { + 'name': _('Stocktake Functionality'), + 'description': _('Enable stocktake functionality for recording stock levels and calculating stock value'), + 'validator': bool, + 'default': False, + }, + + 'STOCKTAKE_AUTO_DAYS': { + 'name': _('Automatic Stocktake Period'), + 'description': _('Number of days between automatic stocktake recording (set to zero to disable)'), + 'validator': [ + int, + MinValueValidator(0), + ], + 'default': 0, + }, + + 'STOCKTAKE_DELETE_REPORT_DAYS': { + 'name': _('Report Deletion Interval'), + 'description': _('Stocktake reports will be deleted after specified number of days'), + 'default': 30, + 'units': _('days'), + 'validator': [ + int, + MinValueValidator(7), + ] + }, + } typ = 'inventree' - class Meta: - """Meta options for InvenTreeSetting.""" - - verbose_name = "InvenTree Setting" - verbose_name_plural = "InvenTree Settings" - key = models.CharField( max_length=50, blank=False, @@ -1599,9 +1684,27 @@ class InvenTreeSetting(BaseInvenTreeSetting): return False +def label_printer_options(): + """Build a list of available label printer options.""" + printers = [('', _('No Printer (Export to PDF)'))] + label_printer_plugins = registry.with_mixin('labels') + if label_printer_plugins: + printers.extend([(p.slug, p.name + ' - ' + p.human_name) for p in label_printer_plugins]) + return printers + + class InvenTreeUserSetting(BaseInvenTreeSetting): """An InvenTreeSetting object with a usercontext.""" + class Meta: + """Meta options for InvenTreeUserSetting.""" + + verbose_name = "InvenTree User Setting" + verbose_name_plural = "InvenTree User Settings" + constraints = [ + models.UniqueConstraint(fields=['key', 'user'], name='unique key and user') + ] + SETTINGS = { 'HOMEPAGE_PART_STARRED': { 'name': _('Show subscribed parts'), @@ -1743,6 +1846,13 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): 'validator': bool, }, + "LABEL_DEFAULT_PRINTER": { + 'name': _('Default label printer'), + 'description': _('Configure which label printer should be selected by default'), + 'default': '', + 'choices': label_printer_options + }, + "REPORT_INLINE": { 'name': _('Inline report display'), 'description': _('Display PDF reports in the browser, instead of downloading as a file'), @@ -1758,7 +1868,7 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): }, 'SEARCH_PREVIEW_SHOW_SUPPLIER_PARTS': { - 'name': _('Seach Supplier Parts'), + 'name': _('Search Supplier Parts'), 'description': _('Display supplier parts in search preview window'), 'default': True, 'validator': bool, @@ -1848,6 +1958,20 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): 'default': True, }, + 'SEARCH_PREVIEW_SHOW_RETURN_ORDERS': { + 'name': _('Search Return Orders'), + 'description': _('Display return orders in search preview window'), + 'default': True, + 'validator': bool, + }, + + 'SEARCH_PREVIEW_EXCLUDE_INACTIVE_RETURN_ORDERS': { + 'name': _('Exclude Inactive Return Orders'), + 'description': _('Exclude inactive return orders from search preview window'), + 'validator': bool, + 'default': True, + }, + 'SEARCH_PREVIEW_RESULTS': { 'name': _('Search Preview Results'), 'description': _('Number of results to show in each section of the search preview window'), @@ -1855,6 +1979,20 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): 'validator': [int, MinValueValidator(1)] }, + 'SEARCH_REGEX': { + 'name': _('Regex Search'), + 'description': _('Enable regular expressions in search queries'), + 'default': False, + 'validator': bool, + }, + + 'SEARCH_WHOLE': { + 'name': _('Whole Word Search'), + 'description': _('Search queries return results for whole word matches'), + 'default': False, + 'validator': bool, + }, + 'PART_SHOW_QUANTITY_IN_FORMS': { 'name': _('Show Quantity in Forms'), 'description': _('Display available part quantity in some forms'), @@ -1900,7 +2038,7 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): 'DISPLAY_STOCKTAKE_TAB': { 'name': _('Part Stocktake'), - 'description': _('Display part stocktake information'), + 'description': _('Display part stocktake information (if stocktake functionality is enabled)'), 'default': True, 'validator': bool, }, @@ -1918,15 +2056,6 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): typ = 'user' - class Meta: - """Meta options for InvenTreeUserSetting.""" - - verbose_name = "InvenTree User Setting" - verbose_name_plural = "InvenTree User Settings" - constraints = [ - models.UniqueConstraint(fields=['key', 'user'], name='unique key and user') - ] - key = models.CharField( max_length=50, blank=False, diff --git a/InvenTree/common/notifications.py b/InvenTree/common/notifications.py index db8c5d11a7..a20b5e8a75 100644 --- a/InvenTree/common/notifications.py +++ b/InvenTree/common/notifications.py @@ -180,7 +180,7 @@ class MethodStorageClass: Args: selected_classes (class, optional): References to the classes that should be registered. Defaults to None. """ - logger.info('collecting notification methods') + logger.debug('Collecting notification methods') current_method = InvenTree.helpers.inheritors(NotificationMethod) - IGNORED_NOTIFICATION_CLS # for testing selective loading is made available @@ -196,7 +196,7 @@ class MethodStorageClass: filtered_list[ref] = item storage.liste = list(filtered_list.values()) - logger.info(f'found {len(storage.liste)} notification methods') + logger.info(f'Found {len(storage.liste)} notification methods') def get_usersettings(self, user) -> list: """Returns all user settings for a specific user. @@ -305,6 +305,13 @@ class InvenTreeNotificationBodies: template='email/purchase_order_received.html', ) + ReturnOrderItemsReceived = NotificationBody( + name=_('Items Received'), + slug='return_order.items_received', + message=_('Items have been received against a return order'), + template='email/return_order_received.html', + ) + def trigger_notification(obj, category=None, obj_ref='pk', **kwargs): """Send out a notification.""" diff --git a/InvenTree/common/serializers.py b/InvenTree/common/serializers.py index c84d478548..7b6998da5a 100644 --- a/InvenTree/common/serializers.py +++ b/InvenTree/common/serializers.py @@ -77,8 +77,6 @@ class GlobalSettingsSerializer(SettingsSerializer): class UserSettingsSerializer(SettingsSerializer): """Serializer for the InvenTreeUserSetting model.""" - user = serializers.PrimaryKeyRelatedField(read_only=True) - class Meta: """Meta options for UserSettingsSerializer.""" @@ -97,6 +95,8 @@ class UserSettingsSerializer(SettingsSerializer): 'typ', ] + user = serializers.PrimaryKeyRelatedField(read_only=True) + class GenericReferencedSettingSerializer(SettingsSerializer): """Serializer for a GenericReferencedSetting model. @@ -140,28 +140,41 @@ class GenericReferencedSettingSerializer(SettingsSerializer): class NotificationMessageSerializer(InvenTreeModelSerializer): """Serializer for the InvenTreeUserSetting model.""" + class Meta: + """Meta options for NotificationMessageSerializer.""" + + model = NotificationMessage + fields = [ + 'pk', + 'target', + 'source', + 'user', + 'category', + 'name', + 'message', + 'creation', + 'age', + 'age_human', + 'read', + ] + + read_only_fields = [ + 'category', + 'name', + 'message', + 'creation', + 'age', + 'age_human', + ] + target = serializers.SerializerMethodField(read_only=True) - source = serializers.SerializerMethodField(read_only=True) - user = serializers.PrimaryKeyRelatedField(read_only=True) - - category = serializers.CharField(read_only=True) - - name = serializers.CharField(read_only=True) - - message = serializers.CharField(read_only=True) - - creation = serializers.CharField(read_only=True) - - age = serializers.IntegerField(read_only=True) - - age_human = serializers.CharField(read_only=True) - read = serializers.BooleanField() def get_target(self, obj): """Function to resolve generic object reference to target.""" + target = get_objectreference(obj, 'target_content_type', 'target_object_id') if target and 'link' not in target: @@ -184,30 +197,10 @@ class NotificationMessageSerializer(InvenTreeModelSerializer): """Function to resolve generic object reference to source.""" return get_objectreference(obj, 'source_content_type', 'source_object_id') - class Meta: - """Meta options for NotificationMessageSerializer.""" - - model = NotificationMessage - fields = [ - 'pk', - 'target', - 'source', - 'user', - 'category', - 'name', - 'message', - 'creation', - 'age', - 'age_human', - 'read', - ] - class NewsFeedEntrySerializer(InvenTreeModelSerializer): """Serializer for the NewsFeedEntry model.""" - read = serializers.BooleanField() - class Meta: """Meta options for NewsFeedEntrySerializer.""" @@ -223,6 +216,8 @@ class NewsFeedEntrySerializer(InvenTreeModelSerializer): 'read', ] + read = serializers.BooleanField() + class ConfigSerializer(serializers.Serializer): """Serializer for the InvenTree configuration. diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py index f77b32ca0e..ce6f1bf283 100644 --- a/InvenTree/common/tests.py +++ b/InvenTree/common/tests.py @@ -1,6 +1,7 @@ """Tests for mechanisms in common.""" import json +import time from datetime import timedelta from http import HTTPStatus @@ -921,7 +922,16 @@ class CurrencyAPITests(InvenTreeAPITestCase): # Delete any existing exchange rate data Rate.objects.all().delete() - self.post(reverse('api-currency-refresh')) + # Updating via the external exchange may not work every time + for _idx in range(5): + self.post(reverse('api-currency-refresh')) - # There should be some new exchange rate objects now - self.assertTrue(Rate.objects.all().exists()) + # There should be some new exchange rate objects now + if Rate.objects.all().exists(): + # Exit early + return + + # Delay and try again + time.sleep(10) + + raise TimeoutError("Could not refresh currency exchange data after 5 attempts") diff --git a/InvenTree/company/admin.py b/InvenTree/company/admin.py index 1c1c98e6a1..dc1aa2ba72 100644 --- a/InvenTree/company/admin.py +++ b/InvenTree/company/admin.py @@ -41,6 +41,13 @@ class CompanyAdmin(ImportExportModelAdmin): class SupplierPartResource(InvenTreeResource): """Class for managing SupplierPart data import/export.""" + class Meta: + """Metaclass defines extra admin options""" + model = SupplierPart + skip_unchanged = True + report_skipped = True + clean_model_instances = True + part = Field(attribute='part', widget=widgets.ForeignKeyWidget(Part)) part_name = Field(attribute='part__full_name', readonly=True) @@ -49,13 +56,6 @@ class SupplierPartResource(InvenTreeResource): supplier_name = Field(attribute='supplier__name', readonly=True) - class Meta: - """Metaclass defines extra admin options""" - model = SupplierPart - skip_unchanged = True - report_skipped = True - clean_model_instances = True - class SupplierPriceBreakInline(admin.TabularInline): """Inline for supplier-part pricing""" @@ -87,6 +87,13 @@ class SupplierPartAdmin(ImportExportModelAdmin): class ManufacturerPartResource(InvenTreeResource): """Class for managing ManufacturerPart data import/export.""" + class Meta: + """Metaclass defines extra admin options""" + model = ManufacturerPart + skip_unchanged = True + report_skipped = True + clean_model_instances = True + part = Field(attribute='part', widget=widgets.ForeignKeyWidget(Part)) part_name = Field(attribute='part__full_name', readonly=True) @@ -95,13 +102,6 @@ class ManufacturerPartResource(InvenTreeResource): manufacturer_name = Field(attribute='manufacturer__name', readonly=True) - class Meta: - """Metaclass defines extra admin options""" - model = ManufacturerPart - skip_unchanged = True - report_skipped = True - clean_model_instances = True - class ManufacturerPartAdmin(ImportExportModelAdmin): """Admin class for ManufacturerPart model.""" @@ -157,6 +157,13 @@ class ManufacturerPartParameterAdmin(ImportExportModelAdmin): class SupplierPriceBreakResource(InvenTreeResource): """Class for managing SupplierPriceBreak data import/export.""" + class Meta: + """Metaclass defines extra admin options""" + model = SupplierPriceBreak + skip_unchanged = True + report_skipped = False + clean_model_instances = True + part = Field(attribute='part', widget=widgets.ForeignKeyWidget(SupplierPart)) supplier_id = Field(attribute='part__supplier__pk', readonly=True) @@ -169,13 +176,6 @@ class SupplierPriceBreakResource(InvenTreeResource): MPN = Field(attribute='part__MPN', readonly=True) - class Meta: - """Metaclass defines extra admin options""" - model = SupplierPriceBreak - skip_unchanged = True - report_skipped = False - clean_model_instances = True - class SupplierPriceBreakAdmin(ImportExportModelAdmin): """Admin class for the SupplierPriceBreak model""" diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index 7095b2fff8..a0c4e8c34d 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -1,24 +1,24 @@ """Provides a JSON API for the Company app.""" from django.db.models import Q -from django.urls import include, re_path +from django.urls import include, path, re_path from django_filters import rest_framework as rest_filters from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters import part.models -from InvenTree.api import AttachmentMixin, ListCreateDestroyAPIView -from InvenTree.filters import InvenTreeOrderingFilter +from InvenTree.api import (AttachmentMixin, ListCreateDestroyAPIView, + MetadataView) +from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER, + SEARCH_ORDER_FILTER_ALIAS) from InvenTree.helpers import str2bool -from InvenTree.mixins import (ListCreateAPI, RetrieveUpdateAPI, - RetrieveUpdateDestroyAPI) -from plugin.serializers import MetadataSerializer +from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI -from .models import (Company, ManufacturerPart, ManufacturerPartAttachment, - ManufacturerPartParameter, SupplierPart, - SupplierPriceBreak) -from .serializers import (CompanySerializer, +from .models import (Company, CompanyAttachment, Contact, ManufacturerPart, + ManufacturerPartAttachment, ManufacturerPartParameter, + SupplierPart, SupplierPriceBreak) +from .serializers import (CompanyAttachmentSerializer, CompanySerializer, + ContactSerializer, ManufacturerPartAttachmentSerializer, ManufacturerPartParameterSerializer, ManufacturerPartSerializer, SupplierPartSerializer, @@ -44,11 +44,7 @@ class CompanyList(ListCreateAPI): return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'is_customer', @@ -86,14 +82,57 @@ class CompanyDetail(RetrieveUpdateDestroyAPI): return queryset -class CompanyMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating Company metadata.""" +class CompanyAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for the CompanyAttachment model""" - def get_serializer(self, *args, **kwargs): - """Return MetadataSerializer instance for a Company""" - return MetadataSerializer(Company, *args, **kwargs) + queryset = CompanyAttachment.objects.all() + serializer_class = CompanyAttachmentSerializer - queryset = Company.objects.all() + filter_backends = [ + DjangoFilterBackend, + ] + + filterset_fields = [ + 'company', + ] + + +class CompanyAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for CompanyAttachment model.""" + + queryset = CompanyAttachment.objects.all() + serializer_class = CompanyAttachmentSerializer + + +class ContactList(ListCreateDestroyAPIView): + """API endpoint for list view of Company model""" + + queryset = Contact.objects.all() + serializer_class = ContactSerializer + + filter_backends = SEARCH_ORDER_FILTER + + filterset_fields = [ + 'company', + ] + + search_fields = [ + 'company__name', + 'name', + ] + + ordering_fields = [ + 'name', + ] + + ordering = 'name' + + +class ContactDetail(RetrieveUpdateDestroyAPI): + """Detail endpoint for Company model""" + + queryset = Contact.objects.all() + serializer_class = ContactSerializer class ManufacturerPartFilter(rest_filters.FilterSet): @@ -145,11 +184,7 @@ class ManufacturerPartList(ListCreateDestroyAPIView): return self.serializer_class(*args, **kwargs) - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER search_fields = [ 'manufacturer__name', @@ -195,11 +230,30 @@ class ManufacturerPartAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI serializer_class = ManufacturerPartAttachmentSerializer +class ManufacturerPartParameterFilter(rest_filters.FilterSet): + """Custom filterset for the ManufacturerPartParameterList API endpoint""" + + class Meta: + """Metaclass options""" + model = ManufacturerPartParameter + fields = [ + 'name', + 'value', + 'units', + 'manufacturer_part', + ] + + manufacturer = rest_filters.ModelChoiceFilter(queryset=Company.objects.all(), field_name='manufacturer_part__manufacturer') + + part = rest_filters.ModelChoiceFilter(queryset=part.models.Part.objects.all(), field_name='manufacturer_part__part') + + class ManufacturerPartParameterList(ListCreateDestroyAPIView): """API endpoint for list view of ManufacturerPartParamater model.""" queryset = ManufacturerPartParameter.objects.all() serializer_class = ManufacturerPartParameterSerializer + filterset_class = ManufacturerPartParameterFilter def get_serializer(self, *args, **kwargs): """Return serializer instance for this endpoint""" @@ -221,38 +275,7 @@ class ManufacturerPartParameterList(ListCreateDestroyAPIView): return self.serializer_class(*args, **kwargs) - def filter_queryset(self, queryset): - """Custom filtering for the queryset.""" - queryset = super().filter_queryset(queryset) - - params = self.request.query_params - - # Filter by manufacturer? - manufacturer = params.get('manufacturer', None) - - if manufacturer is not None: - queryset = queryset.filter(manufacturer_part__manufacturer=manufacturer) - - # Filter by part? - part = params.get('part', None) - - if part is not None: - queryset = queryset.filter(manufacturer_part__part=part) - - return queryset - - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] - - filterset_fields = [ - 'name', - 'value', - 'units', - 'manufacturer_part', - ] + filter_backends = SEARCH_ORDER_FILTER search_fields = [ 'name', @@ -349,11 +372,7 @@ class SupplierPartList(ListCreateDestroyAPIView): serializer_class = SupplierPartSerializer - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_fields = [ 'SKU', @@ -405,6 +424,15 @@ class SupplierPartDetail(RetrieveUpdateDestroyAPI): class SupplierPriceBreakFilter(rest_filters.FilterSet): """Custom API filters for the SupplierPriceBreak list endpoint""" + class Meta: + """Metaclass options""" + + model = SupplierPriceBreak + fields = [ + 'part', + 'quantity', + ] + base_part = rest_filters.ModelChoiceFilter( label='Base Part', queryset=part.models.Part.objects.all(), @@ -417,15 +445,6 @@ class SupplierPriceBreakFilter(rest_filters.FilterSet): field_name='part__supplier', ) - class Meta: - """Metaclass options""" - - model = SupplierPriceBreak - fields = [ - 'part', - 'quantity', - ] - class SupplierPriceBreakList(ListCreateAPI): """API endpoint for list view of SupplierPriceBreak object. @@ -454,10 +473,7 @@ class SupplierPriceBreakList(ListCreateAPI): return self.serializer_class(*args, **kwargs) - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - ] + filter_backends = ORDER_FILTER ordering_fields = [ 'quantity', @@ -477,18 +493,21 @@ manufacturer_part_api_urls = [ # Base URL for ManufacturerPartAttachment API endpoints re_path(r'^attachment/', include([ - re_path(r'^(?P\d+)/', ManufacturerPartAttachmentDetail.as_view(), name='api-manufacturer-part-attachment-detail'), + path(r'/', ManufacturerPartAttachmentDetail.as_view(), name='api-manufacturer-part-attachment-detail'), re_path(r'^$', ManufacturerPartAttachmentList.as_view(), name='api-manufacturer-part-attachment-list'), ])), re_path(r'^parameter/', include([ - re_path(r'^(?P\d+)/', ManufacturerPartParameterDetail.as_view(), name='api-manufacturer-part-parameter-detail'), + path(r'/', ManufacturerPartParameterDetail.as_view(), name='api-manufacturer-part-parameter-detail'), # Catch anything else re_path(r'^.*$', ManufacturerPartParameterList.as_view(), name='api-manufacturer-part-parameter-list'), ])), - re_path(r'^(?P\d+)/?', ManufacturerPartDetail.as_view(), name='api-manufacturer-part-detail'), + re_path(r'^(?P\d+)/?', include([ + re_path('^metadata/', MetadataView.as_view(), {'model': ManufacturerPart}, name='api-manufacturer-part-metadata'), + re_path('^.*$', ManufacturerPartDetail.as_view(), name='api-manufacturer-part-detail'), + ])), # Catch anything else re_path(r'^.*$', ManufacturerPartList.as_view(), name='api-manufacturer-part-list'), @@ -497,7 +516,10 @@ manufacturer_part_api_urls = [ supplier_part_api_urls = [ - re_path(r'^(?P\d+)/?', SupplierPartDetail.as_view(), name='api-supplier-part-detail'), + re_path(r'^(?P\d+)/?', include([ + re_path('^metadata/', MetadataView.as_view(), {'model': SupplierPart}, name='api-supplier-part-metadata'), + re_path('^.*$', SupplierPartDetail.as_view(), name='api-supplier-part-detail'), + ])), # Catch anything else re_path(r'^.*$', SupplierPartList.as_view(), name='api-supplier-part-list'), @@ -517,10 +539,20 @@ company_api_urls = [ ])), re_path(r'^(?P\d+)/?', include([ - re_path(r'^metadata/', CompanyMetadata.as_view(), name='api-company-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': Company}, name='api-company-metadata'), re_path(r'^.*$', CompanyDetail.as_view(), name='api-company-detail'), ])), + re_path(r'^attachment/', include([ + path(r'/', CompanyAttachmentDetail.as_view(), name='api-company-attachment-detail'), + re_path(r'^$', CompanyAttachmentList.as_view(), name='api-company-attachment-list'), + ])), + + re_path(r'^contact/', include([ + path('/', ContactDetail.as_view(), name='api-contact-detail'), + re_path(r'^.*$', ContactList.as_view(), name='api-contact-list'), + ])), + re_path(r'^.*$', CompanyList.as_view(), name='api-company-list'), ] diff --git a/InvenTree/company/migrations/0026_auto_20201110_1011.py b/InvenTree/company/migrations/0026_auto_20201110_1011.py index f61b64d29f..4b1f155458 100644 --- a/InvenTree/company/migrations/0026_auto_20201110_1011.py +++ b/InvenTree/company/migrations/0026_auto_20201110_1011.py @@ -23,7 +23,7 @@ def migrate_currencies(apps, schema_editor): for the SupplierPriceBreak model, to a new django-money compatible currency. """ - logger.info("Updating currency references for SupplierPriceBreak model...") + logger.debug("Updating currency references for SupplierPriceBreak model...") # A list of available currency codes currency_codes = CURRENCIES.keys() diff --git a/InvenTree/company/migrations/0054_companyattachment.py b/InvenTree/company/migrations/0054_companyattachment.py new file mode 100644 index 0000000000..44a415fce3 --- /dev/null +++ b/InvenTree/company/migrations/0054_companyattachment.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.16 on 2023-02-15 12:55 + +import InvenTree.fields +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), + ('company', '0053_supplierpart_updated'), + ] + + operations = [ + migrations.CreateModel( + name='CompanyAttachment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), + ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), + ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), + ('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='company.company', verbose_name='Company')), + ('user', 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')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/company/migrations/0055_auto_20230317_0816.py b/InvenTree/company/migrations/0055_auto_20230317_0816.py new file mode 100644 index 0000000000..a4a85a7f35 --- /dev/null +++ b/InvenTree/company/migrations/0055_auto_20230317_0816.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0054_companyattachment'), + ] + + operations = [ + migrations.AddField( + model_name='manufacturerpart', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='supplierpart', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 6add14d125..8155caeeea 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -81,11 +81,6 @@ class Company(MetadataMixin, models.Model): currency_code: Specifies the default currency for the company """ - @staticmethod - def get_api_url(): - """Return the API URL associated with the Company model""" - return reverse('api-company-list') - class Meta: """Metaclass defines extra model options""" ordering = ['name', ] @@ -94,6 +89,11 @@ class Company(MetadataMixin, models.Model): ] verbose_name_plural = "Companies" + @staticmethod + def get_api_url(): + """Return the API URL associated with the Company model""" + return reverse('api-company-list') + name = models.CharField(max_length=100, blank=False, help_text=_('Company name'), verbose_name=_('Company name')) @@ -205,6 +205,25 @@ class Company(MetadataMixin, models.Model): return stock.objects.filter(Q(supplier_part__supplier=self.id) | Q(supplier_part__manufacturer_part__manufacturer=self.id)).all() +class CompanyAttachment(InvenTreeAttachment): + """Model for storing file or URL attachments against a Company object""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with this model""" + return reverse('api-company-attachment-list') + + def getSubdir(self): + """Return the subdirectory where these attachments are uploaded""" + return os.path.join('company_files', str(self.company.pk)) + + company = models.ForeignKey( + Company, on_delete=models.CASCADE, + verbose_name=_('Company'), + related_name='attachments', + ) + + class Contact(models.Model): """A Contact represents a person who works at a particular company. A Company may have zero or more associated Contact objects. @@ -216,6 +235,11 @@ class Contact(models.Model): role: position in company """ + @staticmethod + def get_api_url(): + """Return the API URL associated with the Contcat model""" + return reverse('api-contact-list') + company = models.ForeignKey(Company, related_name='contacts', on_delete=models.CASCADE) @@ -228,7 +252,7 @@ class Contact(models.Model): role = models.CharField(max_length=100, blank=True) -class ManufacturerPart(models.Model): +class ManufacturerPart(MetadataMixin, models.Model): """Represents a unique part as provided by a Manufacturer Each ManufacturerPart is identified by a MPN (Manufacturer Part Number) Each ManufacturerPart is also linked to a Part object. A Part may be available from multiple manufacturers. Attributes: @@ -239,15 +263,15 @@ class ManufacturerPart(models.Model): description: Descriptive notes field """ + class Meta: + """Metaclass defines extra model options""" + unique_together = ('part', 'manufacturer', 'MPN') + @staticmethod def get_api_url(): """Return the API URL associated with the ManufacturerPart instance""" return reverse('api-manufacturer-part-list') - class Meta: - """Metaclass defines extra model options""" - unique_together = ('part', 'manufacturer', 'MPN') - part = models.ForeignKey('part.Part', on_delete=models.CASCADE, related_name='manufacturer_parts', verbose_name=_('Base Part'), @@ -341,15 +365,15 @@ class ManufacturerPartParameter(models.Model): Each parameter is a simple string (text) value. """ + class Meta: + """Metaclass defines extra model options""" + unique_together = ('manufacturer_part', 'name') + @staticmethod def get_api_url(): """Return the API URL associated with the ManufacturerPartParameter model""" return reverse('api-manufacturer-part-parameter-list') - class Meta: - """Metaclass defines extra model options""" - unique_together = ('manufacturer_part', 'name') - manufacturer_part = models.ForeignKey( ManufacturerPart, on_delete=models.CASCADE, @@ -396,7 +420,7 @@ class SupplierPartManager(models.Manager): ) -class SupplierPart(InvenTreeBarcodeMixin, common.models.MetaMixin): +class SupplierPart(MetadataMixin, InvenTreeBarcodeMixin, common.models.MetaMixin): """Represents a unique part as provided by a Supplier Each SupplierPart is identified by a SKU (Supplier Part Number) Each SupplierPart is also linked to a Part or ManufacturerPart object. A Part may be available from multiple suppliers. Attributes: @@ -415,6 +439,13 @@ class SupplierPart(InvenTreeBarcodeMixin, common.models.MetaMixin): updated: Date that the SupplierPart was last updated """ + class Meta: + """Metaclass defines extra model options""" + unique_together = ('part', 'supplier', 'SKU') + + # This model was moved from the 'Part' app + db_table = 'part_supplierpart' + objects = SupplierPartManager() @staticmethod @@ -434,13 +465,6 @@ class SupplierPart(InvenTreeBarcodeMixin, common.models.MetaMixin): } } - class Meta: - """Metaclass defines extra model options""" - unique_together = ('part', 'supplier', 'SKU') - - # This model was moved from the 'Part' app - db_table = 'part_supplierpart' - def clean(self): """Custom clean action for the SupplierPart model: @@ -677,13 +701,6 @@ class SupplierPriceBreak(common.models.PriceBreak): currency: Reference to the currency of this pricebreak (leave empty for base currency) """ - @staticmethod - def get_api_url(): - """Return the API URL associated with the SupplierPriceBreak model""" - return reverse('api-part-supplier-price-list') - - part = models.ForeignKey(SupplierPart, on_delete=models.CASCADE, related_name='pricebreaks', verbose_name=_('Part'),) - class Meta: """Metaclass defines extra model options""" unique_together = ("part", "quantity") @@ -695,6 +712,13 @@ class SupplierPriceBreak(common.models.PriceBreak): """Format a string representation of a SupplierPriceBreak instance""" return f'{self.part.SKU} - {self.price} @ {self.quantity}' + @staticmethod + def get_api_url(): + """Return the API URL associated with the SupplierPriceBreak model""" + return reverse('api-part-supplier-price-list') + + part = models.ForeignKey(SupplierPart, on_delete=models.CASCADE, related_name='pricebreaks', verbose_name=_('Part'),) + @receiver(post_save, sender=SupplierPriceBreak, dispatch_uid='post_save_supplier_price_break') def after_save_supplier_price(sender, instance, created, **kwargs): @@ -703,7 +727,7 @@ def after_save_supplier_price(sender, instance, created, **kwargs): if InvenTree.ready.canAppAccessDatabase() and not InvenTree.ready.isImportingData(): if instance.part and instance.part.part: - instance.part.part.schedule_pricing_update() + instance.part.part.schedule_pricing_update(create=True) @receiver(post_delete, sender=SupplierPriceBreak, dispatch_uid='post_delete_supplier_price_break') @@ -713,4 +737,4 @@ def after_delete_supplier_price(sender, instance, **kwargs): if InvenTree.ready.canAppAccessDatabase() and not InvenTree.ready.isImportingData(): if instance.part and instance.part.part: - instance.part.part.schedule_pricing_update() + instance.part.part.schedule_pricing_update(create=False) diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index 52d4f55921..bad595d85f 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -9,26 +9,22 @@ from rest_framework import serializers from sql_util.utils import SubqueryCount import part.filters -from common.settings import currency_code_default, currency_code_mappings from InvenTree.serializers import (InvenTreeAttachmentSerializer, + InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeImageSerializerField, InvenTreeModelSerializer, InvenTreeMoneySerializer, RemoteImageMixin) from part.serializers import PartBriefSerializer -from .models import (Company, ManufacturerPart, ManufacturerPartAttachment, - ManufacturerPartParameter, SupplierPart, - SupplierPriceBreak) +from .models import (Company, CompanyAttachment, Contact, ManufacturerPart, + ManufacturerPartAttachment, ManufacturerPartParameter, + SupplierPart, SupplierPriceBreak) class CompanyBriefSerializer(InvenTreeModelSerializer): """Serializer for Company object (limited detail)""" - url = serializers.CharField(source='get_absolute_url', read_only=True) - - image = serializers.CharField(source='get_thumbnail_url', read_only=True) - class Meta: """Metaclass options.""" @@ -41,39 +37,14 @@ class CompanyBriefSerializer(InvenTreeModelSerializer): 'image', ] + url = serializers.CharField(source='get_absolute_url', read_only=True) + + image = serializers.CharField(source='get_thumbnail_url', read_only=True) + class CompanySerializer(RemoteImageMixin, InvenTreeModelSerializer): """Serializer for Company object (full detail)""" - @staticmethod - def annotate_queryset(queryset): - """Annoate the supplied queryset with aggregated information""" - # Add count of parts manufactured - queryset = queryset.annotate( - parts_manufactured=SubqueryCount('manufactured_parts') - ) - - queryset = queryset.annotate( - parts_supplied=SubqueryCount('supplied_parts') - ) - - return queryset - - url = serializers.CharField(source='get_absolute_url', read_only=True) - - image = InvenTreeImageSerializerField(required=False, allow_null=True) - - parts_supplied = serializers.IntegerField(read_only=True) - parts_manufactured = serializers.IntegerField(read_only=True) - - currency = serializers.ChoiceField( - choices=currency_code_mappings(), - initial=currency_code_default, - help_text=_('Default currency used for this supplier'), - label=_('Currency Code'), - required=True, - ) - class Meta: """Metaclass options.""" @@ -101,6 +72,29 @@ class CompanySerializer(RemoteImageMixin, InvenTreeModelSerializer): 'remote_image', ] + @staticmethod + def annotate_queryset(queryset): + """Annoate the supplied queryset with aggregated information""" + # Add count of parts manufactured + queryset = queryset.annotate( + parts_manufactured=SubqueryCount('manufactured_parts') + ) + + queryset = queryset.annotate( + parts_supplied=SubqueryCount('supplied_parts') + ) + + return queryset + + url = serializers.CharField(source='get_absolute_url', read_only=True) + + image = InvenTreeImageSerializerField(required=False, allow_null=True) + + parts_supplied = serializers.IntegerField(read_only=True) + parts_manufactured = serializers.IntegerField(read_only=True) + + currency = InvenTreeCurrencySerializer(help_text=_('Default currency used for this supplier'), required=True) + def save(self): """Save the Company instance""" super().save() @@ -126,14 +120,53 @@ class CompanySerializer(RemoteImageMixin, InvenTreeModelSerializer): return self.instance +class CompanyAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializer for the CompanyAttachment class""" + + class Meta: + """Metaclass defines serializer options""" + model = CompanyAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields([ + 'company', + ]) + + +class ContactSerializer(InvenTreeModelSerializer): + """Serializer class for the Contact model""" + + class Meta: + """Metaclass options""" + + model = Contact + fields = [ + 'pk', + 'company', + 'name', + 'phone', + 'email', + 'role', + ] + + class ManufacturerPartSerializer(InvenTreeModelSerializer): """Serializer for ManufacturerPart object.""" - part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + class Meta: + """Metaclass options.""" - manufacturer_detail = CompanyBriefSerializer(source='manufacturer', many=False, read_only=True) - - pretty_name = serializers.CharField(read_only=True) + model = ManufacturerPart + fields = [ + 'pk', + 'part', + 'part_detail', + 'pretty_name', + 'manufacturer', + 'manufacturer_detail', + 'description', + 'MPN', + 'link', + ] def __init__(self, *args, **kwargs): """Initialize this serializer with extra detail fields as required""" @@ -152,24 +185,14 @@ class ManufacturerPartSerializer(InvenTreeModelSerializer): if prettify is not True: self.fields.pop('pretty_name') + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + + manufacturer_detail = CompanyBriefSerializer(source='manufacturer', many=False, read_only=True) + + pretty_name = serializers.CharField(read_only=True) + manufacturer = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_manufacturer=True)) - class Meta: - """Metaclass options.""" - - model = ManufacturerPart - fields = [ - 'pk', - 'part', - 'part_detail', - 'pretty_name', - 'manufacturer', - 'manufacturer_detail', - 'description', - 'MPN', - 'link', - ] - class ManufacturerPartAttachmentSerializer(InvenTreeAttachmentSerializer): """Serializer for the ManufacturerPartAttachment class.""" @@ -179,37 +202,14 @@ class ManufacturerPartAttachmentSerializer(InvenTreeAttachmentSerializer): model = ManufacturerPartAttachment - fields = [ - 'pk', + fields = InvenTreeAttachmentSerializer.attachment_fields([ 'manufacturer_part', - 'attachment', - 'filename', - 'link', - 'comment', - 'upload_date', - 'user', - 'user_detail', - ] - - read_only_fields = [ - 'upload_date', - ] + ]) class ManufacturerPartParameterSerializer(InvenTreeModelSerializer): """Serializer for the ManufacturerPartParameter model.""" - manufacturer_part_detail = ManufacturerPartSerializer(source='manufacturer_part', many=False, read_only=True) - - def __init__(self, *args, **kwargs): - """Initialize this serializer with extra detail fields as required""" - man_detail = kwargs.pop('manufacturer_part_detail', False) - - super().__init__(*args, **kwargs) - - if not man_detail: - self.fields.pop('manufacturer_part_detail') - class Meta: """Metaclass options.""" @@ -224,66 +224,20 @@ class ManufacturerPartParameterSerializer(InvenTreeModelSerializer): 'units', ] - -class SupplierPartSerializer(InvenTreeModelSerializer): - """Serializer for SupplierPart object.""" - - # Annotated field showing total in-stock quantity - in_stock = serializers.FloatField(read_only=True) - - part_detail = PartBriefSerializer(source='part', many=False, read_only=True) - - supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) - - manufacturer_detail = CompanyBriefSerializer(source='manufacturer_part.manufacturer', many=False, read_only=True) - - pretty_name = serializers.CharField(read_only=True) - - pack_size = serializers.FloatField(label=_('Pack Quantity')) - def __init__(self, *args, **kwargs): """Initialize this serializer with extra detail fields as required""" - - # Check if 'available' quantity was supplied - self.has_available_quantity = 'available' in kwargs.get('data', {}) - - brief = kwargs.pop('brief', False) - - detail_default = not brief - - part_detail = kwargs.pop('part_detail', detail_default) - supplier_detail = kwargs.pop('supplier_detail', detail_default) - manufacturer_detail = kwargs.pop('manufacturer_detail', detail_default) - - prettify = kwargs.pop('pretty', False) + man_detail = kwargs.pop('manufacturer_part_detail', False) super().__init__(*args, **kwargs) - if part_detail is not True: - self.fields.pop('part_detail') - - if supplier_detail is not True: - self.fields.pop('supplier_detail') - - if manufacturer_detail is not True: - self.fields.pop('manufacturer_detail') + if not man_detail: self.fields.pop('manufacturer_part_detail') - if prettify is not True: - self.fields.pop('pretty_name') + manufacturer_part_detail = ManufacturerPartSerializer(source='manufacturer_part', many=False, read_only=True) - supplier = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_supplier=True)) - manufacturer = serializers.CharField(read_only=True) - - MPN = serializers.CharField(read_only=True) - - manufacturer_part_detail = ManufacturerPartSerializer(source='manufacturer_part', read_only=True) - - url = serializers.CharField(source='get_absolute_url', read_only=True) - - # Date fields - updated = serializers.DateTimeField(allow_null=True, read_only=True) +class SupplierPartSerializer(InvenTreeModelSerializer): + """Serializer for SupplierPart object.""" class Meta: """Metaclass options.""" @@ -320,6 +274,63 @@ class SupplierPartSerializer(InvenTreeModelSerializer): 'barcode_hash', ] + def __init__(self, *args, **kwargs): + """Initialize this serializer with extra detail fields as required""" + + # Check if 'available' quantity was supplied + self.has_available_quantity = 'available' in kwargs.get('data', {}) + + brief = kwargs.pop('brief', False) + + detail_default = not brief + + part_detail = kwargs.pop('part_detail', detail_default) + supplier_detail = kwargs.pop('supplier_detail', detail_default) + manufacturer_detail = kwargs.pop('manufacturer_detail', detail_default) + + prettify = kwargs.pop('pretty', False) + + super().__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + + if supplier_detail is not True: + self.fields.pop('supplier_detail') + + if manufacturer_detail is not True: + self.fields.pop('manufacturer_detail') + self.fields.pop('manufacturer_part_detail') + + if prettify is not True: + self.fields.pop('pretty_name') + + # Annotated field showing total in-stock quantity + in_stock = serializers.FloatField(read_only=True) + + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + + supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) + + manufacturer_detail = CompanyBriefSerializer(source='manufacturer_part.manufacturer', many=False, read_only=True) + + pretty_name = serializers.CharField(read_only=True) + + pack_size = serializers.FloatField(label=_('Pack Quantity')) + + supplier = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_supplier=True)) + + manufacturer = serializers.CharField(read_only=True) + + MPN = serializers.CharField(read_only=True) + + manufacturer_part_detail = ManufacturerPartSerializer(source='manufacturer_part', read_only=True) + + url = serializers.CharField(source='get_absolute_url', read_only=True) + + # Date fields + updated = serializers.DateTimeField(allow_null=True, read_only=True) + @staticmethod def annotate_queryset(queryset): """Annotate the SupplierPart queryset with extra fields: @@ -375,6 +386,22 @@ class SupplierPartSerializer(InvenTreeModelSerializer): class SupplierPriceBreakSerializer(InvenTreeModelSerializer): """Serializer for SupplierPriceBreak object.""" + class Meta: + """Metaclass options.""" + + model = SupplierPriceBreak + fields = [ + 'pk', + 'part', + 'part_detail', + 'quantity', + 'price', + 'price_currency', + 'supplier', + 'supplier_detail', + 'updated', + ] + def __init__(self, *args, **kwargs): """Initialize this serializer with extra fields as required""" @@ -397,11 +424,7 @@ class SupplierPriceBreakSerializer(InvenTreeModelSerializer): label=_('Price'), ) - price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - default=currency_code_default, - label=_('Currency'), - ) + price_currency = InvenTreeCurrencySerializer() supplier = serializers.PrimaryKeyRelatedField(source='part.supplier', many=False, read_only=True) @@ -409,19 +432,3 @@ class SupplierPriceBreakSerializer(InvenTreeModelSerializer): # Detail serializer for SupplierPart part_detail = SupplierPartSerializer(source='part', brief=True, many=False, read_only=True) - - class Meta: - """Metaclass options.""" - - model = SupplierPriceBreak - fields = [ - 'pk', - 'part', - 'part_detail', - 'quantity', - 'price', - 'price_currency', - 'supplier', - 'supplier_detail', - 'updated', - ] diff --git a/InvenTree/company/templates/company/detail.html b/InvenTree/company/templates/company/detail.html index e77f81a0f8..0f3bc6e203 100644 --- a/InvenTree/company/templates/company/detail.html +++ b/InvenTree/company/templates/company/detail.html @@ -1,6 +1,7 @@ {% extends "company/company_base.html" %} {% load static %} {% load i18n %} +{% load inventree_extras %} {% block sidebar %} {% include 'company/sidebar.html' %} @@ -137,6 +138,8 @@
+{% if company.is_customer %} +{% if roles.sales_order.view %}
@@ -162,7 +165,9 @@
+{% endif %} +{% if roles.stock.view %}

{% trans "Assigned Stock" %}

@@ -175,9 +180,40 @@
-
+{% endif %} + +{% if roles.return_order.view and return_order_enabled %} +
+
+
+

{% trans "Return Orders" %}

+ {% include "spacer.html" %} +
+ {% if roles.return_order.add %} + + {% endif %} +
+
+
+
+
+
+
+ {% include "filter_list.html" with id="returnorder" %} +
+
+
+ +
+
+
+{% endif %} + +{% endif %}
@@ -194,11 +230,86 @@
+
+
+
+

{% trans "Company Contacts" %}

+ {% include "spacer.html" %} +
+ {% if roles.purchase_order.add or roles.sales_order.add %} + + {% endif %} +
+
+
+
+
+
+ {% include "filter_list.html" with id="contacts" %} +
+
+ +
+
+
+ +
+
+
+

{% trans "Attachments" %}

+ {% include "spacer.html" %} +
+ {% include "attachment_button.html" %} +
+
+
+
+ {% include "attachment_table.html" %} +
+
+ {% endblock %} {% block js_ready %} {{ block.super }} + onPanelLoad("attachments", function() { + loadAttachmentTable('{% url "api-company-attachment-list" %}', { + filters: { + company: {{ company.pk }}, + }, + fields: { + company: { + value: {{ company.pk }}, + hidden: true + } + } + }); + }); + + // Callback function when the 'contacts' panel is loaded + onPanelLoad('company-contacts', function() { + loadContactTable('#contacts-table', { + params: { + company: {{ company.pk }}, + }, + allow_edit: {% js_bool roles.purchase_order.change %} || {% js_bool roles.sales_order.change %}, + allow_delete: {% js_bool roles.purchase_order.delete %} || {% js_bool roles.sales_order.delete %}, + }); + + $('#new-contact').click(function() { + createContact({ + company: {{ company.pk }}, + onSuccess: function() { + $('#contacts-table').bootstrapTable('refresh'); + } + }); + }); + }); + + // Callback function when the 'notes' panel is loaded onPanelLoad('company-notes', function() { setupNotesField( @@ -207,18 +318,7 @@ { editable: true, } - ) - }); - - loadStockTable($("#assigned-stock-table"), { - params: { - customer: {{ company.id }}, - part_detail: true, - location_detail: true, - }, - url: "{% url 'api-stock-list' %}", - filterKey: "customerstock", - filterTarget: '#filter-list-customerstock', + ); }); onPanelLoad('company-stock', function() { @@ -239,20 +339,65 @@ }); {% if company.is_customer %} + + {% if return_order_enabled %} + // Callback function when the 'return orders' panel is loaded + onPanelLoad('return-orders', function() { + + {% if roles.return_order.view %} + loadReturnOrderTable('#return-order-table', { + params: { + customer: {{ company.pk }}, + } + }); + {% endif %} + + {% if roles.return_order.add %} + $('#new-return-order').click(function() { + createReturnOrder({ + customer: {{ company.pk }}, + }); + }); + {% endif %} + }); + {% endif %} + + // Callback function when the 'assigned stock' panel is loaded + onPanelLoad('assigned-stock', function() { + + {% if roles.stock.view %} + loadStockTable($("#assigned-stock-table"), { + params: { + customer: {{ company.id }}, + part_detail: true, + location_detail: true, + }, + url: "{% url 'api-stock-list' %}", + filterKey: "customerstock", + filterTarget: '#filter-list-customerstock', + }); + {% endif %} + }); + + // Callback function when the 'sales orders' panel is loaded onPanelLoad('sales-orders', function() { + {% if roles.sales_order.view %} loadSalesOrderTable("#sales-order-table", { url: "{% url 'api-so-list' %}", params: { customer: {{ company.id }}, } }); + {% endif %} + {% if roles.salse_order.add %} $("#new-sales-order").click(function() { createSalesOrder({ customer: {{ company.pk }}, }); }); + {% endif %} }); {% endif %} @@ -291,7 +436,7 @@ createManufacturerPart({ manufacturer: {{ company.pk }}, onSuccess: function() { - $("#part-table").bootstrapTable("refresh"); + $("#part-table").bootstrapTable('refresh'); } }); }); @@ -313,7 +458,7 @@ deleteManufacturerParts(selections, { success: function() { - $("#manufacturer-part-table").bootstrapTable("refresh"); + $("#manufacturer-part-table").bootstrapTable('refresh'); } }); }); diff --git a/InvenTree/company/templates/company/manufacturer_part.html b/InvenTree/company/templates/company/manufacturer_part.html index 0521cd039e..6c3da85448 100644 --- a/InvenTree/company/templates/company/manufacturer_part.html +++ b/InvenTree/company/templates/company/manufacturer_part.html @@ -209,26 +209,8 @@ onPanelLoad("attachments", function() { } } }); - - enableDragAndDrop( - '#attachment-dropzone', - '{% url "api-manufacturer-part-attachment-list" %}', - { - data: { - manufacturer_part: {{ part.id }}, - }, - label: 'attachment', - success: function(data, status, xhr) { - reloadAttachmentTable(); - } - } - ); }); -function reloadParameters() { - $("#parameter-table").bootstrapTable("refresh"); -} - $('#parameter-create').click(function() { constructForm('{% url "api-manufacturer-part-parameter-list" %}', { @@ -243,7 +225,7 @@ $('#parameter-create').click(function() { } }, title: '{% trans "Add Parameter" %}', - onSuccess: reloadParameters + refreshTable: '#parameter-table', }); }); diff --git a/InvenTree/company/templates/company/sidebar.html b/InvenTree/company/templates/company/sidebar.html index 0063853732..7fe616b7d1 100644 --- a/InvenTree/company/templates/company/sidebar.html +++ b/InvenTree/company/templates/company/sidebar.html @@ -17,10 +17,22 @@ {% include "sidebar_item.html" with label='company-stock' text=text icon="fa-boxes" %} {% endif %} {% if company.is_customer %} +{% if roles.sales_order.view %} {% trans "Sales Orders" as text %} {% include "sidebar_item.html" with label='sales-orders' text=text icon="fa-truck" %} +{% endif %} +{% if roles.stock.view %} {% trans "Assigned Stock Items" as text %} {% include "sidebar_item.html" with label='assigned-stock' text=text icon="fa-sign-out-alt" %} {% endif %} +{% if roles.return_order.view and return_order_enabled %} +{% trans "Return Orders" as text %} +{% include "sidebar_item.html" with label='return-orders' text=text icon="fa-undo" %} +{% endif %} +{% endif %} +{% trans "Contacts" as text %} +{% include "sidebar_item.html" with label='company-contacts' text=text icon="fa-users" %} {% trans "Notes" as text %} {% include "sidebar_item.html" with label='company-notes' text=text icon="fa-clipboard" %} +{% trans "Attachments" as text %} +{% include "sidebar_item.html" with label='attachments' text=text icon="fa-paperclip" %} diff --git a/InvenTree/company/templates/company/supplier_part.html b/InvenTree/company/templates/company/supplier_part.html index 32c5f425aa..7bb9f06560 100644 --- a/InvenTree/company/templates/company/supplier_part.html +++ b/InvenTree/company/templates/company/supplier_part.html @@ -116,13 +116,7 @@ src="{% static 'img/blank_image.png' %}" {% decimal part.available %}{% render_date part.availability_updated %} {% endif %} - {% if part.barcode_hash %} - - - {% trans "Barcode Identifier" %} - {{ part.barcode_hash }} - - {% endif %} + {% include "barcode_data.html" with instance=part %} {% endblock details %} @@ -270,10 +264,10 @@ src="{% static 'img/blank_image.png' %}" {% if barcodes %} $("#show-qr-code").click(function() { - launchModalForm("{% url 'supplier-part-qr' part.pk %}", - { - no_post: true, - }); + showQRDialog( + '{% trans "Supplier Part QR Code" %}', + '{"supplierpart": {{ part.pk }}}' + ); }); $("#barcode-link").click(function() { @@ -299,27 +293,12 @@ loadSupplierPriceBreakTable({ }); $('#new-price-break').click(function() { - - constructForm( - '{% url "api-part-supplier-price-list" %}', - { - method: 'POST', - fields: { - quantity: {}, - part: { - value: {{ part.pk }}, - hidden: true, - }, - price: {}, - price_currency: { - }, - }, - title: '{% trans "Add Price Break" %}', - onSuccess: function() { - $("#price-break-table").bootstrapTable("refresh"); - } + createSupplierPartPriceBreak({{ part.pk }}, { + onSuccess: function() { + $("#price-break-table").bootstrapTable('refresh'); } - ); + }); + }); loadPurchaseOrderTable($("#purchase-order-table"), { diff --git a/InvenTree/company/templates/company/supplier_part_navbar.html b/InvenTree/company/templates/company/supplier_part_navbar.html deleted file mode 100644 index d83338f1e0..0000000000 --- a/InvenTree/company/templates/company/supplier_part_navbar.html +++ /dev/null @@ -1,33 +0,0 @@ -{% load i18n %} -{% load inventree_extras %} - - diff --git a/InvenTree/company/test_api.py b/InvenTree/company/test_api.py index 6f3e9e5bf2..6865a1be99 100644 --- a/InvenTree/company/test_api.py +++ b/InvenTree/company/test_api.py @@ -6,7 +6,7 @@ from rest_framework import status from InvenTree.api_tester import InvenTreeAPITestCase -from .models import Company, SupplierPart +from .models import Company, Contact, SupplierPart class CompanyTest(InvenTreeAPITestCase): @@ -17,11 +17,14 @@ class CompanyTest(InvenTreeAPITestCase): 'purchase_order.change', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Perform initialization for the unit test class""" - super().setUp() - self.acme = Company.objects.create(name='ACME', description='Supplier', is_customer=False, is_supplier=True) + super().setUpTestData() + + # Create some company objects to work with + cls.acme = Company.objects.create(name='ACME', description='Supplier', is_customer=False, is_supplier=True) Company.objects.create(name='Drippy Cup Co.', description='Customer', is_customer=True, is_supplier=False) Company.objects.create(name='Sippy Cup Emporium', description='Another supplier') @@ -137,6 +140,144 @@ class CompanyTest(InvenTreeAPITestCase): self.assertTrue('currency' in response.data) +class ContactTest(InvenTreeAPITestCase): + """Tests for the Contact models""" + + roles = [] + + @classmethod + def setUpTestData(cls): + """Perform init for this test class""" + + super().setUpTestData() + + # Create some companies + companies = [ + Company( + name=f"Company {idx}", + description="Some company" + ) for idx in range(3) + ] + + Company.objects.bulk_create(companies) + + contacts = [] + + # Create some contacts + for cmp in Company.objects.all(): + contacts += [ + Contact( + company=cmp, + name=f"My name {idx}", + ) for idx in range(3) + ] + + Contact.objects.bulk_create(contacts) + + cls.url = reverse('api-contact-list') + + def test_list(self): + """Test company list API endpoint""" + + # List all results + response = self.get(self.url, {}, expected_code=200) + + self.assertEqual(len(response.data), 9) + + for result in response.data: + for key in ['name', 'email', 'pk', 'company']: + self.assertIn(key, result) + + # Filter by particular company + for cmp in Company.objects.all(): + response = self.get( + self.url, + { + 'company': cmp.pk, + }, + expected_code=200 + ) + + self.assertEqual(len(response.data), 3) + + def test_create(self): + """Test that we can create a new Contact object via the API""" + + n = Contact.objects.count() + + company = Company.objects.first() + + # Without required permissions, creation should fail + self.post( + self.url, + { + 'company': company.pk, + 'name': 'Joe Bloggs', + }, + expected_code=403 + ) + + self.assignRole('return_order.add') + + self.post( + self.url, + { + 'company': company.pk, + 'name': 'Joe Bloggs', + }, + expected_code=201 + ) + + self.assertEqual(Contact.objects.count(), n + 1) + + def test_edit(self): + """Test that we can edit a Contact via the API""" + + url = reverse('api-contact-detail', kwargs={'pk': 1}) + + # Retrieve detail view + data = self.get(url, expected_code=200).data + + for key in ['pk', 'name', 'role']: + self.assertIn(key, data) + + self.patch( + url, + { + 'role': 'model', + }, + expected_code=403 + ) + + self.assignRole('purchase_order.change') + + self.patch( + url, + { + 'role': 'x', + }, + expected_code=200 + ) + + contact = Contact.objects.get(pk=1) + self.assertEqual(contact.role, 'x') + + def test_delete(self): + """Tests that we can delete a Contact via the API""" + + url = reverse('api-contact-detail', kwargs={'pk': 6}) + + # Delete (without required permissions) + self.delete(url, expected_code=403) + + self.assignRole('sales_order.delete') + + self.delete(url, expected_code=204) + + # Try to access again (gone!) + self.get(url, expected_code=404) + + class ManufacturerTest(InvenTreeAPITestCase): """Series of tests for the Manufacturer DRF API.""" diff --git a/InvenTree/company/tests.py b/InvenTree/company/tests.py index cb42653afc..4c83864297 100644 --- a/InvenTree/company/tests.py +++ b/InvenTree/company/tests.py @@ -26,8 +26,12 @@ class CompanySimpleTest(TestCase): 'price_breaks', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Perform initialization for the tests in this class""" + + super().setUpTestData() + Company.objects.create(name='ABC Co.', description='Seller of ABC products', website='www.abc-sales.com', @@ -35,10 +39,10 @@ class CompanySimpleTest(TestCase): is_customer=False, is_supplier=True) - self.acme0001 = SupplierPart.objects.get(SKU='ACME0001') - self.acme0002 = SupplierPart.objects.get(SKU='ACME0002') - self.zerglphs = SupplierPart.objects.get(SKU='ZERGLPHS') - self.zergm312 = SupplierPart.objects.get(SKU='ZERGM312') + cls.acme0001 = SupplierPart.objects.get(SKU='ACME0001') + cls.acme0002 = SupplierPart.objects.get(SKU='ACME0002') + cls.zerglphs = SupplierPart.objects.get(SKU='ZERGLPHS') + cls.zergm312 = SupplierPart.objects.get(SKU='ZERGM312') def test_company_model(self): """Tests for the company model data""" @@ -128,6 +132,23 @@ class CompanySimpleTest(TestCase): with self.assertRaises(ValidationError): company.full_clean() + def test_metadata(self): + """Unit tests for the metadata field.""" + p = Company.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) + class ContactSimpleTest(TestCase): """Unit tests for the Contact model""" @@ -201,3 +222,21 @@ class ManufacturerPartSimpleTest(TestCase): Part.objects.get(pk=self.part.id).delete() # Check that ManufacturerPart was deleted self.assertEqual(ManufacturerPart.objects.count(), 3) + + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [ManufacturerPart, SupplierPart]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index 34aa85a366..71985964fb 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -1,13 +1,13 @@ """URL lookup for Company app.""" -from django.urls import include, re_path +from django.urls import include, path, re_path from . import views company_urls = [ # Detail URLs for a specific Company instance - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^.*$', views.CompanyDetail.as_view(), name='company-detail'), ])), @@ -21,12 +21,11 @@ company_urls = [ manufacturer_part_urls = [ - re_path(r'^(?P\d+)/', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part.html'), name='manufacturer-part-detail'), + path(r'/', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part.html'), name='manufacturer-part-detail'), ] supplier_part_urls = [ - re_path(r'^(?P\d+)/', include([ - re_path('^qr_code/?', views.SupplierPartQRCode.as_view(), name='supplier-part-qr'), + path(r'/', include([ re_path('^.*$', views.SupplierPartDetail.as_view(template_name='company/supplier_part.html'), name='supplier-part-detail'), ])) diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 96411bb493..147e5e407d 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -4,7 +4,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView, ListView -from InvenTree.views import InvenTreeRoleMixin, QRCodeView +from InvenTree.views import InvenTreeRoleMixin from plugin.views import InvenTreePluginViewMixin from .models import Company, ManufacturerPart, SupplierPart @@ -112,18 +112,3 @@ class SupplierPartDetail(InvenTreePluginViewMixin, DetailView): context_object_name = 'part' queryset = SupplierPart.objects.all() permission_required = 'purchase_order.view' - - -class SupplierPartQRCode(QRCodeView): - """View for displaying a QR code for a StockItem object.""" - - ajax_form_title = _("Stock Item QR Code") - role_required = 'stock.view' - - def get_qr_data(self): - """Generate QR code data for the StockItem.""" - try: - part = SupplierPart.objects.get(id=self.pk) - return part.format_barcode() - except SupplierPart.DoesNotExist: - return None diff --git a/InvenTree/config_template.yaml b/InvenTree/config_template.yaml index 481d2935d6..f771930e0b 100644 --- a/InvenTree/config_template.yaml +++ b/InvenTree/config_template.yaml @@ -119,6 +119,10 @@ plugins_enabled: False #plugin_file: '/path/to/plugins.txt' #plugin_dir: '/path/to/plugins/' +# Set this variable to True to enable auto-migrations +# Alternatively, use the environment variable INVENTREE_AUTO_UPDATE +auto_update: False + # Allowed hosts (see ALLOWED_HOSTS in Django settings documentation) # A list of strings representing the host/domain names that this Django site can serve. # Default behaviour is to allow all hosts (THIS IS NOT SECURE!) diff --git a/InvenTree/label/api.py b/InvenTree/label/api.py index 9d8092f551..ca076cf968 100644 --- a/InvenTree/label/api.py +++ b/InvenTree/label/api.py @@ -3,14 +3,17 @@ from django.conf import settings from django.core.exceptions import FieldError, ValidationError from django.http import HttpResponse, JsonResponse -from django.urls import include, re_path +from django.urls import include, path, re_path +from django.utils.decorators import method_decorator +from django.views.decorators.cache import cache_page, never_cache from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters from rest_framework.exceptions import NotFound import common.models import InvenTree.helpers +from InvenTree.api import MetadataView +from InvenTree.filters import InvenTreeSearchFilter from InvenTree.mixins import ListAPI, RetrieveAPI, RetrieveUpdateDestroyAPI from InvenTree.tasks import offload_task from part.models import Part @@ -45,7 +48,7 @@ class LabelFilterMixin: ids = [] # Construct a list of possible query parameter value options - # e.g. if self.ITEM_KEY = 'part' -> ['part', 'part', 'parts', parts[]'] + # e.g. if self.ITEM_KEY = 'part' -> ['part', 'part[]', 'parts', parts[]'] for k in [self.ITEM_KEY + x for x in ['', '[]', 's', 's[]']]: if ids := self.request.query_params.getlist(k, []): # Return the first list of matches @@ -121,7 +124,7 @@ class LabelListView(LabelFilterMixin, ListAPI): filter_backends = [ DjangoFilterBackend, - filters.SearchFilter + InvenTreeSearchFilter ] filterset_fields = [ @@ -134,9 +137,15 @@ class LabelListView(LabelFilterMixin, ListAPI): ] +@method_decorator(cache_page(5), name='dispatch') class LabelPrintMixin(LabelFilterMixin): """Mixin for printing labels.""" + @method_decorator(never_cache) + def dispatch(self, *args, **kwargs): + """Prevent caching when printing report templates""" + return super().dispatch(*args, **kwargs) + def get(self, request, *args, **kwargs): """Perform a GET request against this endpoint to print labels""" return self.print(request, self.get_items()) @@ -185,7 +194,7 @@ class LabelPrintMixin(LabelFilterMixin): outputs = [] # In debug mode, generate single HTML output, rather than PDF - debug_mode = common.models.InvenTreeSetting.get_setting('REPORT_DEBUG_MODE') + debug_mode = common.models.InvenTreeSetting.get_setting('REPORT_DEBUG_MODE', cache=False) label_name = "label.pdf" @@ -260,7 +269,7 @@ class LabelPrintMixin(LabelFilterMixin): pdf = outputs[0].get_document().copy(pages).write_pdf() - inline = common.models.InvenTreeUserSetting.get_setting('LABEL_INLINE', user=request.user) + inline = common.models.InvenTreeUserSetting.get_setting('LABEL_INLINE', user=request.user, cache=False) return InvenTree.helpers.DownloadFile( pdf, @@ -270,7 +279,17 @@ class LabelPrintMixin(LabelFilterMixin): ) -class StockItemLabelList(LabelListView): +class StockItemLabelMixin: + """Mixin for StockItemLabel endpoints""" + + queryset = StockItemLabel.objects.all() + serializer_class = StockItemLabelSerializer + + ITEM_MODEL = StockItem + ITEM_KEY = 'item' + + +class StockItemLabelList(StockItemLabelMixin, LabelListView): """API endpoint for viewing list of StockItemLabel objects. Filterable by: @@ -279,32 +298,30 @@ class StockItemLabelList(LabelListView): - item: Filter by single stock item - items: Filter by list of stock items """ - - queryset = StockItemLabel.objects.all() - serializer_class = StockItemLabelSerializer - - ITEM_MODEL = StockItem - ITEM_KEY = 'item' + pass -class StockItemLabelDetail(RetrieveUpdateDestroyAPI): +class StockItemLabelDetail(StockItemLabelMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single StockItemLabel object.""" - - queryset = StockItemLabel.objects.all() - serializer_class = StockItemLabelSerializer + pass -class StockItemLabelPrint(LabelPrintMixin, RetrieveAPI): +class StockItemLabelPrint(StockItemLabelMixin, LabelPrintMixin, RetrieveAPI): """API endpoint for printing a StockItemLabel object.""" - - queryset = StockItemLabel.objects.all() - serializer_class = StockItemLabelSerializer - - ITEM_MODEL = StockItem - ITEM_KEY = 'item' + pass -class StockLocationLabelList(LabelListView): +class StockLocationLabelMixin: + """Mixin for StockLocationLabel endpoints""" + + queryset = StockLocationLabel.objects.all() + serializer_class = StockLocationLabelSerializer + + ITEM_MODEL = StockLocation + ITEM_KEY = 'location' + + +class StockLocationLabelList(StockLocationLabelMixin, LabelListView): """API endpoint for viewiing list of StockLocationLabel objects. Filterable by: @@ -313,56 +330,41 @@ class StockLocationLabelList(LabelListView): - location: Filter by a single stock location - locations: Filter by list of stock locations """ - - queryset = StockLocationLabel.objects.all() - serializer_class = StockLocationLabelSerializer - - ITEM_MODEL = StockLocation - ITEM_KEY = 'location' + pass -class StockLocationLabelDetail(RetrieveUpdateDestroyAPI): +class StockLocationLabelDetail(StockLocationLabelMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single StockLocationLabel object.""" - - queryset = StockLocationLabel.objects.all() - serializer_class = StockLocationLabelSerializer + pass -class StockLocationLabelPrint(LabelPrintMixin, RetrieveAPI): +class StockLocationLabelPrint(StockLocationLabelMixin, LabelPrintMixin, RetrieveAPI): """API endpoint for printing a StockLocationLabel object.""" - - queryset = StockLocationLabel.objects.all() - seiralizer_class = StockLocationLabelSerializer - - ITEM_MODEL = StockLocation - ITEM_KEY = 'location' + pass -class PartLabelList(LabelListView): +class PartLabelMixin: + """Mixin for PartLabel endpoints""" + queryset = PartLabel.objects.all() + serializer_class = PartLabelSerializer + + ITEM_MODEL = Part + ITEM_KEY = 'part' + + +class PartLabelList(PartLabelMixin, LabelListView): """API endpoint for viewing list of PartLabel objects.""" - - queryset = PartLabel.objects.all() - serializer_class = PartLabelSerializer - - ITEM_MODEL = Part - ITEM_KEY = 'part' + pass -class PartLabelDetail(RetrieveUpdateDestroyAPI): +class PartLabelDetail(PartLabelMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single PartLabel object.""" - - queryset = PartLabel.objects.all() - serializer_class = PartLabelSerializer + pass -class PartLabelPrint(LabelPrintMixin, RetrieveAPI): +class PartLabelPrint(PartLabelMixin, LabelPrintMixin, RetrieveAPI): """API endpoint for printing a PartLabel object.""" - - queryset = PartLabel.objects.all() - serializer_class = PartLabelSerializer - - ITEM_MODEL = Part - ITEM_KEY = 'part' + pass label_api_urls = [ @@ -370,8 +372,9 @@ label_api_urls = [ # Stock item labels re_path(r'stock/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/?', StockItemLabelPrint.as_view(), name='api-stockitem-label-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': StockItemLabel}, name='api-stockitem-label-metadata'), re_path(r'^.*$', StockItemLabelDetail.as_view(), name='api-stockitem-label-detail'), ])), @@ -382,8 +385,9 @@ label_api_urls = [ # Stock location labels re_path(r'location/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/?', StockLocationLabelPrint.as_view(), name='api-stocklocation-label-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': StockLocationLabel}, name='api-stocklocation-label-metadata'), re_path(r'^.*$', StockLocationLabelDetail.as_view(), name='api-stocklocation-label-detail'), ])), @@ -394,8 +398,9 @@ label_api_urls = [ # Part labels re_path(r'^part/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^print/', PartLabelPrint.as_view(), name='api-part-label-print'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': PartLabel}, name='api-part-label-metadata'), re_path(r'^.*$', PartLabelDetail.as_view(), name='api-part-label-detail'), ])), diff --git a/InvenTree/label/migrations/0009_auto_20230317_0816.py b/InvenTree/label/migrations/0009_auto_20230317_0816.py new file mode 100644 index 0000000000..16b81a5f7f --- /dev/null +++ b/InvenTree/label/migrations/0009_auto_20230317_0816.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0008_auto_20210708_2106'), + ] + + operations = [ + migrations.AddField( + model_name='partlabel', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='stockitemlabel', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='stocklocationlabel', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/label/models.py b/InvenTree/label/models.py index 27a340f0c6..a862860436 100644 --- a/InvenTree/label/models.py +++ b/InvenTree/label/models.py @@ -17,6 +17,7 @@ import common.models import part.models import stock.models from InvenTree.helpers import normalize, validateFilterString +from plugin.models import MetadataMixin try: from django_weasyprint import WeasyTemplateResponseMixin @@ -70,7 +71,7 @@ class WeasyprintLabelMixin(WeasyTemplateResponseMixin): self.pdf_filename = kwargs.get('filename', 'label.pdf') -class LabelTemplate(models.Model): +class LabelTemplate(MetadataMixin, models.Model): """Base class for generic, filterable labels.""" class Meta: diff --git a/InvenTree/label/serializers.py b/InvenTree/label/serializers.py index b250b6f441..da5e6ccedc 100644 --- a/InvenTree/label/serializers.py +++ b/InvenTree/label/serializers.py @@ -9,8 +9,6 @@ from .models import PartLabel, StockItemLabel, StockLocationLabel class StockItemLabelSerializer(InvenTreeModelSerializer): """Serializes a StockItemLabel object.""" - label = InvenTreeAttachmentSerializerField(required=True) - class Meta: """Metaclass options.""" @@ -24,12 +22,12 @@ class StockItemLabelSerializer(InvenTreeModelSerializer): 'enabled', ] + label = InvenTreeAttachmentSerializerField(required=True) + class StockLocationLabelSerializer(InvenTreeModelSerializer): """Serializes a StockLocationLabel object.""" - label = InvenTreeAttachmentSerializerField(required=True) - class Meta: """Metaclass options.""" @@ -43,12 +41,12 @@ class StockLocationLabelSerializer(InvenTreeModelSerializer): 'enabled', ] + label = InvenTreeAttachmentSerializerField(required=True) + class PartLabelSerializer(InvenTreeModelSerializer): """Serializes a PartLabel object.""" - label = InvenTreeAttachmentSerializerField(required=True) - class Meta: """Metaclass options.""" @@ -61,3 +59,5 @@ class PartLabelSerializer(InvenTreeModelSerializer): 'filters', 'enabled', ] + + label = InvenTreeAttachmentSerializerField(required=True) diff --git a/InvenTree/label/tests.py b/InvenTree/label/tests.py index 605d706181..523364ff1f 100644 --- a/InvenTree/label/tests.py +++ b/InvenTree/label/tests.py @@ -27,9 +27,10 @@ class LabelTest(InvenTreeAPITestCase): 'stock' ] - def setUp(self) -> None: + @classmethod + def setUpTestData(cls): """Ensure that some label instances exist as part of init routine""" - super().setUp() + super().setUpTestData() apps.get_app_config('label').create_labels() def test_default_labels(self): @@ -129,3 +130,21 @@ class LabelTest(InvenTreeAPITestCase): self.assertIn("http://testserver/part/1/", content) self.assertIn("image: /static/img/blank_image.png", content) self.assertIn("logo: /static/img/inventree.png", content) + + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [StockItemLabel, StockLocationLabel, PartLabel]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) diff --git a/InvenTree/locale/cs/LC_MESSAGES/django.po b/InvenTree/locale/cs/LC_MESSAGES/django.po index c54c764a65..7e878a4673 100644 --- a/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Uživatel nemá právo zobrazit tento model" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" @@ -29,23 +33,26 @@ msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" msgid "Enter date" msgstr "Zadejte datum" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Poznámky" @@ -58,23 +65,23 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru" msgid "Provided value does not match required pattern: " msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Zadejte heslo" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Zadejte nové heslo" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Potvrďte heslo" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Potvrďte nové heslo" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Původní heslo" @@ -92,101 +99,101 @@ msgstr "Pokaždé musíte zadat stejný email." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Zadaná primární e-mailová adresa je neplatná." #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Zadaná e-mailová doména není povolena." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" -msgstr "" +msgstr "Zadaná URL adresa není platný soubor obrázku" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" -msgstr "" +msgstr "Duplicitní výrobní číslo" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" -msgstr "" +msgstr "Neplatný rozsah skupiny: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "Odstranit HTML tagy z této hodnoty" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,1151 +201,1241 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Chybějící soubor" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Příloha" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Vyberte soubor k přiložení" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Odkaz" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Odkaz na externí URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Komentář" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Komentář k souboru" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Uživatel" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "datum přidání" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Název souboru nesmí být prázdný" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Neplatný adresář přílohy" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Název souboru obsahuje nepovolený znak '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Chybějící přípona souboru" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Příloha s tímto názvem již existuje" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Chyba při přejmenování souboru" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Název" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Popis" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "nadřazený" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Cesta" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" -msgstr "" +msgstr "Data čárového kódu" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" -msgstr "" +msgstr "Hash čárového kódu" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" -msgstr "" +msgstr "Jedinečný hash dat čárového kódu" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" -msgstr "" +msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." -msgstr "" +msgstr "Server zaznamenal chybu." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Měna" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Vyberte měnu z dostupných možností" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Název souboru" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Datový soubor" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Vyberte datový soubor k nahrání" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Nepodporovaný typ souboru" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Soubor je příliš velký" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "V souboru nebyly nalezeny žádné sloupce" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "V souboru nebyly nalezeny žádné řádky s daty" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Nebyly zadány žádné řádky s daty" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Nebyly zadány žádné sloupce s daty" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Chybí povinný sloupec: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicitní sloupec: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" -msgstr "" +msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" -msgstr "" +msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Čeština" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" -msgstr "" +msgstr "Dánština" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Němčina" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Řečtina" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Angličtina" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Španělština" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Španělština (Mexiko)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Perština" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francouzština" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebrejština" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Maďarština" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italština" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japonština" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Korejština" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Nizozemština" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norština" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polština" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugalština" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugalština (Brazilská)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Ruština" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" -msgstr "" +msgstr "Slovinština" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Švédština" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thajština" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turečtina" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamština" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Čínština" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Kontrola procesů na pozadí se nezdařila" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Email backend není nakonfigurován" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Kontroly zdraví systému InvenTree selhaly" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Nevyřízeno" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Umístěno" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Hotovo" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Zrušeno" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Ztraceno" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Vráceno" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Odesláno" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Vyžaduje pozornost" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Poškozeno" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Zničeno" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Odmítnuto" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" -msgstr "" +msgstr "V karanténě" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Původní položka sledování zásob" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Položka zásob vytvořena" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Položka zásob upravena" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Přiřazeno výrobní číslo" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Stav zásob sečten" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Zásoba přidána ručně" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Zásoba odebrána ručně" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Umístění změněno" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Odstraněná komponenta" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Rozdělit od nadřazené položky" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Odesláno zákazníkovi" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" +msgstr "Výroba" + +#: InvenTree/status_codes.py:430 +msgid "Return" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Upravit informace o uživateli" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Nastavit heslo" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Hesla se musí shodovat" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" -msgstr "" +msgstr "Zadáno špatné heslo" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Informace o systému" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" -msgstr "" +msgstr "O InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:791 msgid "Build Order" -msgstr "" +msgstr "Vytvořit objednávku" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" +msgstr "Vytvořené objednávky" + +#: build/models.py:113 +msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:155 +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Díl" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" -msgstr "" +msgstr "Externí odkaz" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Jméno společnosti" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "Formát data" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" -msgstr "" +msgstr "Cena" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" -msgstr "" +msgstr "Id" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,62 +3329,66 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" -msgstr "" +msgstr "Webová stránka" #: company/models.py:111 msgid "Company website URL" -msgstr "" +msgstr "Webové stránky společnosti" #: company/models.py:115 company/templates/company/company_base.html:119 msgid "Address" -msgstr "" +msgstr "Adresa" #: company/models.py:116 msgid "Company address" -msgstr "" +msgstr "Adresa společnosti" #: company/models.py:119 msgid "Phone number" -msgstr "" +msgstr "Telefonní číslo" #: company/models.py:120 msgid "Contact phone number" -msgstr "" +msgstr "Kontaktní telefonní číslo" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" -msgstr "" +msgstr "E-mail" #: company/models.py:123 msgid "Contact email address" -msgstr "" +msgstr "Kontaktní e-mailová adresa" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "" +msgstr "Kontakt" #: company/models.py:127 msgid "Point of contact" -msgstr "" +msgstr "Kontaktní místo" #: company/models.py:129 msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" -msgstr "" +msgstr "Obrazek" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" -msgstr "" +msgstr "Poznámky ke společnosti" #: company/models.py:145 msgid "is customer" -msgstr "" +msgstr "je zákazník" #: company/models.py:145 msgid "Do you sell items to this company?" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 +#: company/models.py:222 company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 +msgid "Company" +msgstr "Společnost" + +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 msgid "Base Part" -msgstr "" +msgstr "Základní díl" -#: company/models.py:257 company/models.py:492 +#: company/models.py:281 company/models.py:516 msgid "Select part" -msgstr "" +msgstr "Zvolte díl" -#: company/models.py:268 company/templates/company/company_base.html:77 +#: company/models.py:292 company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 msgid "Manufacturer" -msgstr "" +msgstr "Výrobce" -#: company/models.py:269 +#: company/models.py:293 msgid "Select manufacturer" -msgstr "" +msgstr "Vyberte výrobce" -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 msgid "MPN" msgstr "" -#: company/models.py:276 +#: company/models.py:300 msgid "Manufacturer Part Number" -msgstr "" +msgstr "Číslo dílu výrobce" -#: company/models.py:282 +#: company/models.py:306 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:288 +#: company/models.py:312 msgid "Manufacturer part description" -msgstr "" +msgstr "Popis dílu výrobce" -#: company/models.py:333 company/models.py:357 company/models.py:511 +#: company/models.py:357 company/models.py:381 company/models.py:535 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 +#: stock/templates/stock/item_base.html:218 msgid "Manufacturer Part" -msgstr "" +msgstr "Výrobce dílu" -#: company/models.py:364 +#: company/models.py:388 msgid "Parameter name" -msgstr "" +msgstr "Název parametru" -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Value" -msgstr "" +msgstr "Hodnota" -#: company/models.py:371 +#: company/models.py:395 msgid "Parameter value" -msgstr "" +msgstr "Hodnota parametru" -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 msgid "Units" -msgstr "" +msgstr "Jednotky" -#: company/models.py:378 +#: company/models.py:402 msgid "Parameter units" msgstr "" -#: company/models.py:456 +#: company/models.py:480 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 #: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 msgid "Supplier" msgstr "" -#: company/models.py:499 +#: company/models.py:523 msgid "Select supplier" msgstr "" -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 msgid "SKU" msgstr "" -#: company/models.py:505 part/serializers.py:365 +#: company/models.py:529 part/serializers.py:354 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:512 +#: company/models.py:536 msgid "Select manufacturer part" msgstr "" -#: company/models.py:518 +#: company/models.py:542 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:524 +#: company/models.py:548 msgid "Supplier part description" msgstr "" -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 msgid "Note" msgstr "" -#: company/models.py:533 part/models.py:1867 +#: company/models.py:557 part/models.py:1910 msgid "base cost" msgstr "" -#: company/models.py:533 part/models.py:1867 +#: company/models.py:557 part/models.py:1910 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 msgid "Packaging" msgstr "" -#: company/models.py:535 +#: company/models.py:559 msgid "Part packaging" msgstr "" -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 msgid "Pack Quantity" msgstr "" -#: company/models.py:539 +#: company/models.py:563 msgid "Unit quantity supplied in a single pack" msgstr "" -#: company/models.py:545 part/models.py:1869 +#: company/models.py:569 part/models.py:1912 msgid "multiple" msgstr "" -#: company/models.py:545 +#: company/models.py:569 msgid "Order multiple" msgstr "" -#: company/models.py:553 company/templates/company/supplier_part.html:115 +#: company/models.py:577 company/templates/company/supplier_part.html:115 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 msgid "Available" msgstr "" -#: company/models.py:554 +#: company/models.py:578 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:558 +#: company/models.py:582 msgid "Availability Updated" msgstr "" -#: company/models.py:559 +#: company/models.py:583 msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:72 +#: company/serializers.py:96 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 -msgid "Company" -msgstr "" - #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3369,47 +3643,50 @@ msgstr "" #: company/templates/company/company_base.html:33 msgid "Edit company information" -msgstr "" +msgstr "Upravit údaje o společnosti" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" -msgstr "" +msgstr "Upravit společnost" #: company/templates/company/company_base.html:38 msgid "Delete company" -msgstr "" +msgstr "Odstranit společnost" #: company/templates/company/company_base.html:39 #: company/templates/company/company_base.html:163 msgid "Delete Company" -msgstr "" +msgstr "Odstranit společnost" #: company/templates/company/company_base.html:56 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "" +msgstr "Nahrát nový obrázek" #: company/templates/company/company_base.html:59 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "" +msgstr "Stáhnout obrázek z URL" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "" +msgstr "Smazat obrázek" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" -msgstr "" +msgstr "Zákazník" #: company/templates/company/company_base.html:112 msgid "Uses default currency" @@ -3417,135 +3694,165 @@ msgstr "" #: company/templates/company/company_base.html:126 msgid "Phone" -msgstr "" +msgstr "Telefon" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" -msgstr "" +msgstr "Odstranit obrázek" #: company/templates/company/company_base.html:207 msgid "Remove associated image from this company" -msgstr "" +msgstr "Odstranit přiřazený obrázek této společnosti" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" -msgstr "" +msgstr "Odstranit" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" -msgstr "" +msgstr "Nahrát obrázek" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" -msgstr "" +msgstr "Stáhnout obrázek" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" -msgstr "" - -#: company/templates/company/detail.html:18 -msgid "Create new supplier part" -msgstr "" +msgstr "Dodavatel dílů" #: company/templates/company/detail.html:19 +msgid "Create new supplier part" +msgstr "Vytvořit nového dodavatele dílu" + +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" -msgstr "" +msgstr "Nová díl dodavatele" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" -msgstr "" - -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" +msgstr "Objednávka dílů" #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "Odstranit díly" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" -msgstr "" +msgstr "Odstraněné díly" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" -msgstr "" +msgstr "Výrobce dílů" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" -msgstr "" +msgstr "Vytvořit nového výrobce dílu" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" -msgstr "" +msgstr "Nový výrobce dílu" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" -msgstr "" +msgstr "Dodavatelský sklad" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" -msgstr "" +msgstr "Zakoupené objednávky" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" -msgstr "" +msgstr "Odstranit" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Pro data čárového kódu byla nalezena shoda" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Potvrdit" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" -msgstr "" +msgstr "Vybrané díly" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,119 +12133,115 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" #: templates/yesnolabel.html:4 msgid "Yes" -msgstr "" +msgstr "Ano" #: templates/yesnolabel.html:6 msgid "No" -msgstr "" +msgstr "Ne" #: users/admin.py:61 msgid "Users" -msgstr "" +msgstr "Uživatelé" #: users/admin.py:62 msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" -msgstr "" +msgstr "Osobní údaje" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" -msgstr "" +msgstr "Oprávnění" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Nastavení oprávnění" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Skupina" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Zobrazit" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Oprávnění k zobrazení položek" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Oprávnění přidat položky" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Změnit" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Oprávnění k úpravě položek" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Oprávnění k odstranění položek" diff --git a/InvenTree/locale/da/LC_MESSAGES/django.po b/InvenTree/locale/da/LC_MESSAGES/django.po index 5804042b02..3dfe475357 100644 --- a/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Fejloplysninger kan findes i admin panelet" @@ -29,23 +33,26 @@ msgstr "Fejloplysninger kan findes i admin panelet" msgid "Enter date" msgstr "Angiv dato" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Bemærkninger" @@ -58,23 +65,23 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Den angivne værdi matcher ikke det påkrævede mønster: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Indtast adgangskode" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Indtast ny adgangskode" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Bekræft adgangskode" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Bekræft ny adgangskode" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Gammel adgangskode" @@ -92,101 +99,101 @@ msgstr "Du skal indtaste den samme e-mail hver gang." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Den indtastede email adresse er ikke gyldig." #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Det angivne e-mail domæne er ikke godkendt." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Serienummer streng er tom" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Duplikeret serienummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ugyldigt gruppe-interval: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Gruppeinterval {g} overstiger det tilladte antal ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ugyldig gruppesekvens: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Ingen serienumre fundet" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Antal unikke serienumre ({s}) skal matche antal ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tags fra denne værdi" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Forkert formateret mønster" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Ukendt formatnøgle angivet" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøgle" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Referencefelt må ikke være tomt" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Reference skal matche det påkrævede mønster" @@ -194,566 +201,615 @@ msgstr "Reference skal matche det påkrævede mønster" msgid "Reference number is too large" msgstr "Referencenummer er for stort" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Manglende fil" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Manglende eksternt link" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Vedhæftning" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Vælg fil, der skal vedhæftes" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link til ekstern URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Bruger" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "dato for upload" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Filnavn må ikke være tomt" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Ugyldig vedhæftningsmappe" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Filnavn indeholder ugyldigt tegn '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Filnavn mangler filtype" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Vedhæftning med dette filnavn findes allerede" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Fejl ved omdøbning af fil" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "overordnet" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Stregkode Data" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Tredjeparts stregkode data" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Stregkode Hash" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Unik hash af stregkode data" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Filnavn" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Vælg datafilen til upload" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Filtype ikke understøttet" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Filen er for stor" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Ingen kolonner fundet i fil" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Ingen datarækker fundet i fil" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Ingen data-rækker angivet" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Ingen data-kolonner angivet" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Mangler påkrævet kolonne: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikeret kolonne: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tjekkisk" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Dansk" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Tysk" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Græsk" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Engelsk" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spansk" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spansk (Mexikansk)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Fransk" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italiensk" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japansk" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreansk" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Hollandsk" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polsk" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasilien)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Russisk" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" -msgstr "" +msgstr "Slovensk" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Svensk" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Kinesisk" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Kontrol af baggrundstjeneste mislykkedes" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "E-mail backend ej konfigureret" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Helbredstjek af InvenTree system mislykkedes" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Afventende" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Placeret" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Fuldført" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Annulleret" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Mistet" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Returneret" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Afsendt" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Opmærksomhed påkrævet" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Beskadiget" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Destrueret" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Afvist" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "I karantæne" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Forældet lager sporings post" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Lager-element oprettet" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Redigeret lager-element" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Serienummer tildelt" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Lagerbeholdning optalt" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Lagerbeholdning tilføjet manuelt" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Lagerbeholdning fjernet manuelt" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Lokation ændret" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Monteret i samling" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Fjernet fra samling" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Installeret komponent element" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Fjernet komponent element" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Opdel fra overordnet element" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Opdel underordnet element" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Flettede lagervarer" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Konverteret til variant" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Sendt til kunde" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Returneret fra kunde" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Byggeordre output genereret" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Byggeorder output fuldført" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Brugt efter byggeordre" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Modtaget mod indkøbsordre" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Produktion" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN skal matche regex mønster {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Overskud må ikke være negativ" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Overskuddet må ikke overstige 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Ugyldig værdi for overskud" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Rediger brugerinformation" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Vælg adgangskode" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "De indtastede adgangskoder skal være ens" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Forkert adgangskode indtastet" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Systemoplysninger" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Ugyldigt valg for overordnet produktion" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Ugyldigt valg for overordnet produktion" msgid "Build Order" msgstr "Produktionsordre" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Ugyldigt valg for overordnet produktion" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Reference" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Kort beskrivelse af produktionsordre" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Overordnet produktion" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Produktionsordre som er tildelt denne produktion" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" -msgstr "" +msgstr "Del" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" -msgstr "" +msgstr "Salgsordrereference" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordre, som er tildelt denne produktion" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" -msgstr "" +msgstr "Kilde Lokation" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vælg lokation for lager, som skal benyttes til denne produktion (lad feltet stå tomt for at benytte vilkårligt lager)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" -msgstr "" +msgstr "Destinations Placering" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" -msgstr "" +msgstr "Vælg placering, hvor de færdige elementer vil blive gemt" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:227 -msgid "Completed items" -msgstr "" - #: build/models.py:229 -msgid "Number of stock items which have been completed" -msgstr "" +msgid "Completed items" +msgstr "Afsluttede elementer" -#: build/models.py:233 +#: build/models.py:231 +msgid "Number of stock items which have been completed" +msgstr "Antal lagervarer som er færdiggjort" + +#: build/models.py:235 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" -msgstr "" +msgstr "Batch Kode" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" -msgstr "" +msgstr "Oprettelsesdato" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" -msgstr "" +msgstr "Projekteret afslutningsdato" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" -msgstr "" +msgstr "Dato for afslutning" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" -msgstr "" +msgstr "udført af" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" -msgstr "" +msgstr "Udstedt af" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" -msgstr "" +msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" -msgstr "" +msgstr "Ansvarlig" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" -msgstr "" +msgstr "Ekstern link" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" -msgstr "" +msgstr "Ekstra bygge noter" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" -msgstr "" +msgstr "Bygge Prioritet" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" -msgstr "" +msgstr "Prioritet af denne byggeordre" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" -msgstr "" +msgstr "En byggeordre er fuldført" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN skal matche regex mønster {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 8641afbfc2..ce287a8c03 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-07 09:21\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Fehlerdetails finden Sie im Admin-Panel" @@ -29,23 +33,26 @@ msgstr "Fehlerdetails finden Sie im Admin-Panel" msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Notizen" @@ -58,23 +65,23 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein" msgid "Provided value does not match required pattern: " msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Passwort eingeben" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Neues Passwort eingeben" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Passwort wiederholen" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Neues Passwort bestätigen" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Altes Passwort" @@ -98,662 +105,711 @@ msgstr "Die angegebene primäre E-Mail-Adresse ist ungültig." msgid "The provided email domain is not approved." msgstr "Die angegebene E-Mail-Domain ist nicht freigegeben." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Duplizierter Seriennummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ungültiger Gruppenbereich: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Gruppenbereich {g} überschreitet die zulässige Menge ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ungültige Gruppensequenz: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) übereinstimmen" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Falsch formatiertes Muster" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Unbekannter Formatschlüssel angegeben" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Erforderlicher Formatschlüssel fehlt" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Referenz-Feld darf nicht leer sein" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" -msgstr "Referenz erforderlichem Muster entsprechen" +msgstr "Referenz muss erforderlichem Muster entsprechen" #: InvenTree/models.py:306 msgid "Reference number is too large" msgstr "Referenznummer ist zu groß" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Fehlende Datei" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Fehlender externer Link" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Anhang" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Benutzer" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "Hochladedatum" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Dateiname darf nicht leer sein" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Ungültiges Verzeichnis für Anhang" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Dateiname enthält ungültiges Zeichen '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Dateiendung fehlt" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Anhang mit diesem Dateinamen bereits vorhanden" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Fehler beim Umbenennen" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Name" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Beschreibung" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "Eltern" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Pfad" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Barcode-Daten" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Drittanbieter-Barcode-Daten" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Eindeutiger Hash der Barcode-Daten" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Währung" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Währung aus verfügbaren Optionen auswählen" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Dateiname" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Datendatei" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Neue Datei zum Hochladen auswählen" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Nicht unterstütztes Dateiformat" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Datei ist zu groß" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Keine Spalten in der Datei gefunden" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Keine Datensätze in der Datei gefunden" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Keine Zeilen ausgewählt" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Keine Spalten angegeben" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Erforderliche Spalte '{name}' fehlt" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Doppelte Spalte: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tschechisch" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Dänisch" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Deutsch" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Griechisch" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Englisch" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spanisch" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spanisch (Mexikanisch)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Persisch" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Französisch" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebräisch" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Ungarisch" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italienisch" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japanisch" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreanisch" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Niederländisch" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norwegisch" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polnisch" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugiesisch" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugiesisch (Brasilien)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Slowenisch" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Schwedisch" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thailändisch" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Chinesisch" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "E-Mail-Backend nicht konfiguriert" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Ausstehend" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Platziert" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Fertig" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Storniert" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Verloren" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Zurückgegeben" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Versendet" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "erfordert Eingriff" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Beschädigt" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Zerstört" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Zurückgewiesen" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "In Quarantäne" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Alter Bestand-Verfolgungs-Eintrag" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Lagerartikel erstellt" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Lagerartikel bearbeitet" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Seriennummer hinzugefügt" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Bestand gezählt" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Bestand manuell hinzugefügt" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Bestand manuell entfernt" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Standort geändert" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "In Baugruppe installiert" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Aus Baugruppe entfernt" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Komponente installiert" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Komponente entfernt" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Vom übergeordneten Element geteilt" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Unterobjekt geteilt" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Lagerartikel zusammengeführt" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "In Variante umgewandelt" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Zum Kunden geschickt" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Rücksendung vom Kunden" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Endprodukt erstellt" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Endprodukt fertiggestellt" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Durch Bauauftrag verbraucht" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Gegen Bestellung empfangen" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "in Arbeit" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN muss zu Regex-Muster {pat} passen" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Überschuss-Wert darf nicht negativ sein" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Überschuss darf 100% nicht überschreiten" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Ungültiger Wert für Ausschuss" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Benutzerinformationen bearbeiten" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Passwort eingeben" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Passwörter stimmen nicht überein" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Falsches Passwort angegeben" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Systeminformationen" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Über InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Ungültige Wahl für übergeordneten Bauauftrag" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Ungültige Wahl für übergeordneten Bauauftrag" msgid "Build Order" msgstr "Bauauftrag" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Ungültige Wahl für übergeordneten Bauauftrag" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referenz" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Kurze Beschreibung des Baus" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Teil" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Nutzer der für diesen Bauauftrag zuständig ist" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Externer Link" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Extranotizen für den Bauauftrag" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Ausgewähltes Bestands-Objekt nicht in Stückliste für Teil '{p}' gefunden" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Bauauftrag" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Bauauftrag starten um Teile zuzuweisen" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ganzzahl erforderlich da die Stückliste nachverfolgbare Teile enthält" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Lagerort" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Status" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "Zugewiesenen Bestand entfernen" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "Abzug aller Lagerbestände, die diesem Build bereits zugewiesen wurden" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Wie sollen zusätzliche Lagerbestandteile, die dem Bauauftrag zugewiesen wurden, behandelt werden" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Akzeptieren, dass Lagerartikel diesem Bauauftrag nicht vollständig zugewiesen wurden" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Akzeptieren, dass die erforderliche Anzahl der Bauaufträge nicht abgeschlossen ist" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Endprodukt kann bei Zuweisung nicht-verfolgter Teile nicht angegeben werden" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Dieser Lagerbestand wurde bereits diesem Endprodukt zugewiesen" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerort, von dem Teile bezogen werden sollen (leer lassen, um sie von jedem Lagerort zu nehmen)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Barcode Aktionen" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "QR-Code anzeigen" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "Barcode abhängen" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "Barcode anhängen" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Aktionen drucken" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Bauauftragsbericht drucken" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Bau-Auftrag Aktionen" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Bauauftrag bearbeiten" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Bauauftrag abbrechen" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "Bauauftrag duplizieren" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Bauauftrag löschen" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Bauauftrag fertigstellen" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Baubeschreibung" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Es wurden keine Endprodukte für diesen Bauauftrag erstellt" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Dieser Bauauftrag ist dem Auftrag %(link)s zugeordnet" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Dieser Bauauftrag ist dem Bauauftrag %(link)s untergeordnet" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "Bauauftrag ist bereit abgeschlossen zu werden" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Bauauftrag kann nicht abgeschlossen werden, da es noch ausstehende Endprodukte gibt" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Bestand wurde Bauauftrag noch nicht vollständig zugewiesen" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Zieldatum" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Bauauftrag war fällig am %(target)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Überfällig" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Fertig" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Auftrag" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Aufgegeben von" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "Priorität" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Bauauftrag löschen" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Bau-Status" @@ -1497,8 +1652,8 @@ 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:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Ziel-Lager" @@ -1510,21 +1665,23 @@ msgstr "Ziel-Lagerort nicht angegeben" msgid "Allocated Parts" msgstr "Zugewiesene Teile" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Losnummer" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Erstellt" @@ -1544,7 +1701,7 @@ msgstr "Unter-Bauaufträge" msgid "Allocate Stock to Build" msgstr "Bestand Bauauftrag zuweisen" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Bestandszuordnung aufheben" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Benötigte Teile bestellen" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Teile bestellen" @@ -1627,52 +1785,42 @@ msgstr "Ausgewählte Endprodukte löschen" msgid "Delete outputs" msgstr "Endprodukte löschen" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Druck Aktionen" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Label drucken" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Fertiggestellte Endprodukte" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Anhänge" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Bauauftrags-Notizen" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "Zuordnung abgeschlossen" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "Alle nicht verfolgten Lagerartikel wurden zugewiesen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Neuer Bauauftrag" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Bauaufträge ausdrucken" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "Bauauftragdetails" @@ -1685,23 +1833,24 @@ msgstr "Unfertige Endprodukte" msgid "Completed Outputs" msgstr "Fertiggestellte Endprodukte" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Dateiformat nicht unterstützt: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Fehler beim Lesen der Datei (ungültige Kodierung)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Fehler beim Lesen der Datei (ungültiges Format)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Fehler beim Lesen der Datei (falsche Größe)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Fehler beim Lesen der Datei (Daten könnten beschädigt sein)" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} Datei" msgid "Select {name} file to upload" msgstr "{name} Datei zum Hochladen auswählen" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "Aktualisiert" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "Zeitstempel der letzten Aktualisierung" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Keine Gruppe" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "Eine leere Domain ist nicht erlaubt." -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ungültiger Domainname: {domain}" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Firmenname" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "interner Firmenname" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Standardwährung" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "Wählen Sie die Basiswährung für die Preiskalkulation" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Überschreiben des Benutzer-Agenten, der verwendet wird, um Bilder und Dateien von externer Servern herunterzuladen (leer für die Standardeinstellung)" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "Bestätigung verpflichtend" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "Eine ausdrückliche Benutzerbestätigung für bestimmte Aktionen erfordern." -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "Baumtiefe" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standard Ebene für Baumansicht. Tiefere Ebenen kann bei Bedarf nachgeladen werden." -#: common/models.py:966 -msgid "Automatic Backup" -msgstr "Automatische Sicherung" +#: common/models.py:988 +msgid "Update Check Inverval" +msgstr "Intervall für die Suche nach Updates" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" -msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" +msgstr "Wie oft soll nach Updates gesucht werden? (auf 0 setzen zum Deaktivieren)" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "Tage zwischen Sicherung" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "Anzahl der Tage zwischen automatischen Sicherungen" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "Alte Aufgaben löschen" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "Ergebnisse der Hintergrundaufgabe werden nach der angegebenen Anzahl von Tagen gelöscht" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "Fehlerprotokolle löschen" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "Benachrichtigungen löschen" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Bacode-Feature verwenden" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Barcode-Scanner Unterstützung" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "Barcode-Eingabeverzögerung" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "Verzögerungszeit bei Barcode-Eingabe" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "Barcode Webcam-Unterstützung" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Barcode-Scannen über Webcam im Browser erlauben" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "IPN Regex" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "RegEx Muster für die Zuordnung von Teil-IPN" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Mehrere Artikel mit gleicher IPN erlaubt" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Mehrere Artikel mit gleicher IPN erlaubt" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Ändern von IPN erlaubt" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Teil-Stückliste kopieren" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Teil-Parameter kopieren" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Teil-Testdaten kopieren" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Kategorie-Parametervorlage kopieren" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Vorlage" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Teile sind standardmäßig Vorlagen" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Baugruppe" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Komponente" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Teile können standardmäßig in Baugruppen benutzt werden" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Kaufbar" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Artikel sind grundsätzlich kaufbar" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Verkäuflich" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Artikel sind grundsätzlich verkaufbar" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Nachverfolgbar" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Artikel sind grundsätzlich verfolgbar" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtuell" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Teile sind grundsätzlich virtuell" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Import in Ansichten anzeigen" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Importassistent in einigen Teil-Ansichten anzeigen" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Verwandte Teile anzeigen" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Verwandte Teile eines Teils anzeigen" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "Initialer Lagerbestand" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "Initiale Lieferantendaten" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Anzeigeformat für Teilenamen" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Format für den Namen eines Teiles" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "Standardsymbol der Teilkategorie" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "Dezimalstellen für Preise" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "Anzahl der Dezimalstellen, die bei der Darstellung der Preisdaten angezeigt werden sollen" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "Zulieferer-Preise verwenden" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "Kaufverlauf überschreiben" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "Lagerartikel-Preis verwenden" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "Lagerartikelpreis Alter" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "Lagerartikel, die älter als diese Anzahl an Tagen sind, von der Preisberechnung ausschließen" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "Variantenpreise verwenden" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "Nur aktive Varianten" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "Neuberechnungs-Zyklus für Preisinformationen" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "Tage" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "Automatische Sicherung" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "Intervall für automatische Sicherung" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "Anzahl der Tage zwischen automatischen Sicherungen" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "Löschinterval für Aufgaben" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "Ergebnisse der Hintergrundaufgabe werden nach der angegebenen Anzahl von Tagen gelöscht" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "Löschintervall für Fehlerprotokolle" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "Löschintervall für Benachrichtigungen" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Bacode-Feature verwenden" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Barcode-Scanner Unterstützung" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "Barcode-Eingabeverzögerung" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "Verzögerungszeit bei Barcode-Eingabe" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "Barcode Webcam-Unterstützung" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Barcode-Scannen über Webcam im Browser erlauben" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "Artikelrevisionen" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "Revisions-Feld für Artikel aktivieren" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "IPN Regex" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "RegEx Muster für die Zuordnung von Teil-IPN" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Mehrere Artikel mit gleicher IPN erlaubt" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Mehrere Artikel mit gleicher IPN erlaubt" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Ändern von IPN erlaubt" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Teil-Stückliste kopieren" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Teil-Parameter kopieren" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Teil-Testdaten kopieren" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Kategorie-Parametervorlage kopieren" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Vorlage" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Teile sind standardmäßig Vorlagen" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Baugruppe" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Komponente" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Teile können standardmäßig in Baugruppen benutzt werden" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Kaufbar" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Artikel sind grundsätzlich kaufbar" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Verkäuflich" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Artikel sind grundsätzlich verkaufbar" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Nachverfolgbar" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Artikel sind grundsätzlich verfolgbar" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtuell" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Teile sind grundsätzlich virtuell" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Import in Ansichten anzeigen" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Importassistent in einigen Teil-Ansichten anzeigen" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Verwandte Teile anzeigen" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Verwandte Teile eines Teils anzeigen" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "Initialer Lagerbestand" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "Initiale Lieferantendaten" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Anzeigeformat für Teilenamen" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Format für den Namen eines Teiles" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "Standardsymbol der Teilkategorie" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "Zulieferer-Preise verwenden" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "Kaufverlauf überschreiben" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "Lagerartikel-Preis verwenden" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "Lagerartikelpreis Alter" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "Lagerartikel, die älter als diese Anzahl an Tagen sind, von der Preisberechnung ausschließen" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "Variantenpreise verwenden" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "Nur aktive Varianten" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "Intervall für Neuberechnung von Preisen" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Interne Preise" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-Auflösung bei der Erstellung von Bilddateien für Etikettendruck-Plugins" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "Testberichte aktivieren" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "Testberichte anhängen" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Beim Drucken eines Testberichts dem zugehörigen Lagerbestand eine Kopie des Testberichts beifügen" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "Seriennummern automatisch ausfüllen" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "Seriennummern in Formularen automatisch ausfüllen" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel erschöpft ist" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie ablaufen" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bauaufträge" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Verkaufsaufträge bearbeiten" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bearbeitung von Verkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bestellungen" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bearbeitung von Einkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Selbstregistrierung über SSO für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "Passwort zweimal" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (komma-separiert, mit @ startend)" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Beim Start überprüfen, ob alle Plugins installiert sind - Für Container aktivieren" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "Plugin-Signaturen überprüfen" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "Signaturen für Plugins prüfen und anzeigen" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "Inventurfunktionen" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "Inventur-Funktionen zur Aufzeichnung von Lagerbeständen und zur Berechnung des Lagerwerts aktivieren" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "Automatische Inventur-Periode" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "Anzahl der Tage zwischen automatischen Bestandsaufnahmen (zum Deaktivieren auf Null setzen)" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "Löschintervall für Berichte" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "Inventurberichte werden nach der angegebenen Anzahl von Tagen gelöscht" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "Kein Drucker (Exportieren als PDF)" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "Aktuelle Teile-Stände" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "Nicht validierte Stücklisten anzeigen" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "aktueller Bestand" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "Anzahl des geänderten Bestands auf der Startseite" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "Zeige Neuigkeiten" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "Neuigkeiten auf der Startseite anzeigen" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-Labels im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "Standard-Etikettendrucker" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "Einen standardmäßig ausgewählten Etikettendrucker konfigurieren" + +#: common/models.py:1857 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-Berichte im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "Teile suchen" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "Teile in der Suchvorschau anzeigen" -#: common/models.py:1750 -msgid "Seach Supplier Parts" -msgstr "Zuliefererteile durchsuchen" +#: common/models.py:1871 +msgid "Search Supplier Parts" +msgstr "Zulieferteile durchsuchen" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "Zuliefererteile in der Suchvorschau anzeigen" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "Herstellerteile durchsuchen" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "Herstellerteile in der Suchvorschau anzeigen" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "Kategorien durchsuchen" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "Teilekategorien in der Suchvorschau anzeigen" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "Bestand durchsuchen" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "Lagerartikel in Suchvorschau anzeigen" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "Nicht verfügbare Artikel ausblenden" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nicht verfügbare Lagerartikel aus der Suchvorschau ausschließen" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "Lagerorte durchsuchen" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "Lagerorte in Suchvorschau anzeigen" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "Firmen durchsuchen" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "Firmen in der Suchvorschau anzeigen" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "Bauaufträge durchsuchen" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "Bauaufträge in der Suchvorschau anzeigen" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "Bestellungen durchsuchen" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "Bestellungen in der Suchvorschau anzeigen" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktive Bestellungen ausblenden" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktive Bestellungen in der Suchvorschau ausblenden" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "Aufträge durchsuchen" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "Aufträge in der Suchvorschau anzeigen" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "Inaktive Aufträge ausblenden" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktive Aufträge in der Suchvorschau ausblenden" -#: common/models.py:1841 +#: common/models.py:1962 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:1842 +#: common/models.py:1977 msgid "Number of results to show in each section of the search preview window" msgstr "Anzahl der Ergebnisse, die in der Vorschau pro Sektion angezeigt werden sollen" -#: common/models.py:1848 +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:1849 +#: common/models.py:1998 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:1855 +#: common/models.py:2004 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:1856 +#: common/models.py:2005 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:1862 +#: common/models.py:2011 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:1863 +#: common/models.py:2012 msgid "The navbar position is fixed to the top of the screen" msgstr "Position der Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:1869 +#: common/models.py:2018 msgid "Date Format" msgstr "Datumsformat" -#: common/models.py:1870 +#: common/models.py:2019 msgid "Preferred format for displaying dates" msgstr "Bevorzugtes Format für die Anzeige von Daten" -#: common/models.py:1884 part/templates/part/detail.html:41 +#: common/models.py:2033 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Teilzeitplanung" -#: common/models.py:1885 +#: common/models.py:2034 msgid "Display part scheduling information" msgstr "Zeige Zeitplanung für Teile" -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 +#: common/models.py:2040 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventur" -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "Inventurinformationen anzeigen" +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "Zeigt Inventur-Informationen an (falls die Inventurfunktion aktiviert ist)" -#: common/models.py:1898 +#: common/models.py:2047 msgid "Table String Length" msgstr "Zeichenkettenlänge in Tabellen" -#: common/models.py:1899 +#: common/models.py:2048 msgid "Maximimum length limit for strings displayed in table views" msgstr "Maximale Länge der Zeichenketten, die in Tabellenansichten angezeigt werden" -#: common/models.py:1963 +#: common/models.py:2103 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Preis" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Aktiv" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "Token" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "Host" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "Body" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "ID" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "Titel" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "Autor" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "Gelesen" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" @@ -3000,7 +3265,7 @@ msgstr "Neue {verbose_name}" msgid "A new order has been created and assigned to you" msgstr "Eine neue Bestellung wurde erstellt und Ihnen zugewiesen" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "Artikel erhalten" @@ -3008,21 +3273,25 @@ msgstr "Artikel erhalten" msgid "Items have been received against a purchase order" msgstr "Artikel wurden aus einer Bestellung erhalten" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "Fehler in Plugin aufgetreten" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Datei hochgeladen" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "Übereinstimmende Felder" @@ -3060,7 +3329,7 @@ msgstr "Firmenbeschreibung" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Website" @@ -3086,6 +3355,7 @@ msgstr "Kontakt-Telefon" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "Email" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "Kontakt-Email" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" @@ -3105,11 +3378,11 @@ msgstr "Anlaufstelle" msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Bild" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Firmenbemerkungen" @@ -3137,229 +3410,230 @@ msgstr "ist Hersteller" msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Währung" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Basisteil" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Teil auswählen" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Hersteller" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Hersteller auswählen" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "MPN" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Hersteller-Teilenummer" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "Externe URL für das Herstellerteil" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "Teilbeschreibung des Herstellers" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Herstellerteil" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Parametername" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Wert" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Parameterwert" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Einheiten" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Parametereinheit" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Zulieferer" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Zulieferer auswählen" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "SKU (Lagerbestandseinheit)" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "Lagerbestandseinheit (SKU) des Zulieferers" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "Herstellerteil auswählen" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "Teil-URL des Zulieferers" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "Zuliefererbeschreibung des Teils" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Notiz" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "Basiskosten" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "Mindestpreis" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Verpackungen" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "Teile-Verpackungen" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "Packmenge" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "Stückmenge in einer einzelnen Verpackungseinheit" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "Vielfache" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "Mehrere bestellen" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Verfügbar" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "Verfügbare Menge von Lieferanten" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "Verfügbarkeit aktualisiert" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "Standard-Währung für diesen Zulieferer" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Währungscode" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Firma" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Basisteil" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Teil auswählen" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Hersteller" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Hersteller auswählen" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "MPN" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Hersteller-Teilenummer" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "Externe URL für das Herstellerteil" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "Teilbeschreibung des Herstellers" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Herstellerteil" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Parametername" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Wert" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Parameterwert" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Einheiten" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Parametereinheit" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Zulieferer" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Zulieferer auswählen" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "SKU (Lagerbestandseinheit)" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "Lagerbestandseinheit (SKU) des Zulieferers" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "Herstellerteil auswählen" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "Teil-URL des Zulieferers" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "Zuliefererbeschreibung des Teils" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Notiz" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "Basiskosten" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "Mindestpreis" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Verpackungen" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "Teile-Verpackungen" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "Packmenge" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "Stückmenge in einer einzelnen Verpackungseinheit" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "Vielfache" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "Mehrere bestellen" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Verfügbar" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "Verfügbare Menge von Lieferanten" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "Verfügbarkeit aktualisiert" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Standard-Währung für diesen Zulieferer" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Bestellung anlegen" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "Firmeninformation bearbeiten" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Firma bearbeiten" @@ -3400,14 +3674,17 @@ msgstr "Bild von URL herunterladen" msgid "Delete image" msgstr "Bild löschen" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Kunde" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "Bild entfernen" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "Verknüpftes Bild von dieser Firma entfernen" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "Entfernen" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Bild hochladen" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Bild herunterladen" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Zuliefererteile" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Neues Zuliefererteil anlegen" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Neues Zuliefererteil" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Teile bestellen" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Teile löschen" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Teile löschen" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Herstellerteile" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Neues Herstellerteil anlegen" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Neues Herstellerteil" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Zulieferer-Bestand" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Bestellungen" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Neue Bestellung anlegen" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Neue Bestellung" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Aufträge" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Neuen Auftrag anlegen" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Neuer Auftrag" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "Zugeordneter Bestand" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Zulieferer-Liste" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Hersteller" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Teil bestellen" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Herstellerteil bearbeiten" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Herstellerteil löschen" @@ -3582,36 +3889,36 @@ msgstr "Keine Herstellerdaten verfügbar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Zulieferer" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Zuliefererteil entfernen" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Löschen" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parameter" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Neuer Parameter" @@ -3619,8 +3926,8 @@ msgstr "Neuer Parameter" msgid "Delete parameters" msgstr "Parameter löschen" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Parameter hinzufügen" @@ -3636,55 +3943,31 @@ msgstr "Zuliefererteile" msgid "Supplied Stock Items" msgstr "Zugelieferte Lagerartikel" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "Zugewiesene Lagerartikel" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Zuliefererteil" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Barcode Aktionen" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "QR-Code anzeigen" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "Barcode abhängen" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "Barcode anhängen" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "Zulieferer-Teil Aktionen" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Teil bestellen" @@ -3695,13 +3978,13 @@ msgstr "Verfügbarkeit aktualisieren" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "Zuliefererteil bearbeiten" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "Zulieferer-Teil duplizieren" @@ -3713,95 +3996,68 @@ msgstr "Zuliefererteil entfernen" msgid "Delete Supplier Part" msgstr "Zuliefererteil entfernen" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "Barcode-Bezeichner" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "Keine Lieferanteninformationen verfügbar" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "Zulieferer-Bestand" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "Neuen Lagerartikel hinzufügen" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "Neuer Lagerartikel" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "Zulieferer-Bestellungen" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Preisinformationen ansehen" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "Preisstaffel hinzufügen" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "Zuliefererteil QR-Code" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "Barcode mit Zuliefererteil verknüpfen" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "Teilverfügbarkeit aktualisieren" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Bestand" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Bestellungen" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "Zuliefererteil Bepreisung" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Bepreisung" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Lagerartikel" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Zuliefererteil Bepreisung" + #: company/views.py:33 msgid "New Supplier" msgstr "Neuer Zulieferer" @@ -3819,7 +4075,7 @@ msgstr "Kunden" msgid "New Customer" msgstr "Neuer Kunde" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Firmen" @@ -3827,519 +4083,604 @@ msgstr "Firmen" msgid "New Company" msgstr "Neue Firma" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "Lagerartikel-QR-Code" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "Label Name" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Label Beschreibung" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "Label" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "Label-Vorlage-Datei" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Aktiviert" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "Label-Vorlage ist aktiviert" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Breite [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "Label-Breite in mm" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Höhe [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "Label-Höhe in mm" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "Dateinamen-Muster" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "Muster für die Erstellung von Label-Dateinamen" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filter" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "Teile-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "Keine passende Bestellung gefunden" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Bestellung" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "Unbekannt" -#: order/models.py:83 -msgid "Order description" -msgstr "Bestellungs-Beschreibung" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Gesamtpreis" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "Gesamtpreis für diese Bestellung" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:93 -msgid "Created By" -msgstr "Erstellt von" - -#: order/models.py:100 -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:105 -msgid "Order notes" -msgstr "Bestell-Notizen" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "Bestell-Referenz" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "Bestellungs-Status" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "Firma bei der die Teile bestellt werden" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "Zulieferer-Referenz" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "Zulieferer Bestellreferenz" - -#: order/models.py:275 -msgid "received by" -msgstr "Empfangen von" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "Aufgabedatum" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "Datum an dem die Bestellung aufgegeben wurde" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Ziel-Versanddatum" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Erstellt von" + +#: order/models.py:223 +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:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Bestell-Notizen" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Bestell-Referenz" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Bestellungs-Status" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Firma bei der die Teile bestellt werden" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "Zulieferer-Referenz" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "Zulieferer Bestellreferenz" + +#: order/models.py:366 +msgid "received by" +msgstr "Empfangen von" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Aufgabedatum" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Datum an dem die Bestellung aufgegeben wurde" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "Zieldatum für Auftrags-Fertigstellung." - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "Versand von" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "Auftrag kann nicht abgeschlossen werden, da keine Teile zugewiesen wurden" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "Nur ein ausstehender Auftrag kann als abgeschlossen markiert werden" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Auftrag kann nicht abgeschlossen werden, da unvollständige Sendungen vorhanden sind" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "Auftrag kann nicht abgeschlossen werden, da es unvollständige Positionen gibt" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Zieldatum für diesen Einzelposten (leer lassen, um das Zieldatum des Auftrags zu verwenden)" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "Kontext" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "gelöscht" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "Bestellung" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "Empfangen" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "Wo möchte der Käufer diesen Artikel gelagert haben?" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "Ein virtuelles Teil kann nicht einem Auftrag zugeordnet werden" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "Sendung" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "Versandhinweise" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kann Lagerartikel keiner Zeile mit einem anderen Teil hinzufügen" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "Position" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "Position" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/serializers.py:63 -msgid "Price currency" -msgstr "Währung" +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "Position" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "Einzigartiger Identifikator" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "Barcode" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "Folgende Seriennummern sind bereits zugewiesen" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "Überfällige Bestellung" @@ -4358,102 +4699,123 @@ msgstr "Überfälliger Auftrag" msgid "Sales order {so} is now overdue" msgstr "Auftrag {so} ist jetzt überfällig" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "Bestellbericht drucken" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Exportiere Bestellung in Datei" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "Bestell-Aktionen" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Auftrag bearbeiten" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Bestellung duplizieren" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" -msgstr "Bestellung abschicken" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" +msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "Elemente empfangen" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "Teile empfangen" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Bestellung als vollständig markieren" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "Auftrag fertigstellen" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "Bestellreferenz" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "Bestellungsbeschreibung" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Bestellstatus" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "Keine Lieferanteninformationen verfügbar" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Abgeschlossene Positionen" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Unvollständig" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Aufgegeben" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "Gesamtsumme" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "Gesamtkosten konnten nicht berechnet werden" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "Auswahl duplizieren" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Zeile entfernen" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "Schritt %(step)s von %(count)s" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "Positionen" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "Bestellungs-Positionen" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "Position hinzufügen" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" -msgstr "Ausgewählte Positionen erhalten" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "Positionen löschen" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "Zusätzliche Positionen" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "Extra Zeile anzeigen" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "Empfangene Teile" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "Notizen zur Bestellung" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" -msgstr "Neue Auftragspositionen hinzufügen" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" +msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "Berichte drucken" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "Verkaufsauftragsbericht drucken" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "Paketliste drucken" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "Abgeschlossene Sendungen" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "Auftrag abschließen" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "Kundenreferenz" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "Gesamtkosten" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "Verkaufsauftragsbericht drucken" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "Auftrag abschließen" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" -msgstr "Auftrag bearbeiten" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" +msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "Auftrags-Positionen" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "Ausstehende Sendungen" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "Aktionen" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "Neue Sendung" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "Zuliefererteile zuordnen" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "Auftrag nicht gefunden" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "Preis nicht gefunden" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "Stückpreis für {part} auf {price} aktualisiert" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} Stückpreis auf {price} und Menge auf {qty} aktualisiert" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "Teil-ID" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "Name des Teils" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "Beschreibung des Teils" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Version" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "Kategorie-ID" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "Kategoriename" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "Standard-Standortnummer" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "Standard-Lieferantennummer" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "Auf Lager" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "Bestellt" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "Benutzt in" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "Zugeordnet" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "Im Bau" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "Eltern ID" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "Name des übergeordneten Teils" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "Pfad zur Kategorie" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Teile" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "Stücklistenebene" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "Stücklisten-Position ID" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "Übergeordnete IPN" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "Teil IPN" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "Eingehende Bestellung" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "Ausgehender Auftrag" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "Lagerartikel produziert von Bauauftrag" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "Lagerartikel für Bauauftrag benötigt" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "Gültig" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "Diese Option muss ausgewählt werden" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Standard-Lagerort" @@ -4855,815 +5260,940 @@ msgstr "Standard-Lagerort" msgid "Total Stock" msgstr "Gesamtbestand" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "Menge für die Preisberechnung" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Standard-Lagerort für Teile dieser Kategorie" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "Strukturell" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "Teile können nicht direkt einer strukturellen Kategorie zugeordnet werden, können aber untergeordneten Kategorien zugeordnet werden." - -#: part/models.py:128 -msgid "Default keywords" -msgstr "Standard Stichwörter" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "Standard-Stichworte für Teile dieser Kategorie" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "Symbol" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "Symbol (optional)" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "Sie können diese Teilekategorie nicht als strukturell festlegen, da ihr bereits Teile zugewiesen sind!" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Standard-Lagerort für Teile dieser Kategorie" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "Strukturell" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "Teile können nicht direkt einer strukturellen Kategorie zugeordnet werden, können aber untergeordneten Kategorien zugeordnet werden." + +#: part/models.py:133 +msgid "Default keywords" +msgstr "Standard Stichwörter" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "Standard-Stichworte für Teile dieser Kategorie" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "Symbol" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "Symbol (optional)" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "Sie können diese Teilekategorie nicht als strukturell festlegen, da ihr bereits Teile zugewiesen sind!" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "Ungültige Auswahl für übergeordnetes Teil" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, 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:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN muss zu Regex-Muster {pat} passen" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:834 -msgid "Part description" -msgstr "Beschreibung des Teils" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Kategorie" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "Standard Zuliefererteil" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:991 +#: part/models.py:1017 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:993 +#: part/models.py:1019 msgid "Part notes" msgstr "Teile-Notizen" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "Benutzer, der für diesen Teil verantwortlich ist" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "Stückzahl" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "Datum" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "Zusätzliche Notizen" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "Benutzer, der diese Inventur durchgeführt hat" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "Mindestbestandswert" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "Geschätzter Mindestwert des vorhandenen Bestands" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "Maximaler Bestandswert" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "Geschätzter Maximalwert des vorhandenen Bestands" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "Bericht" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "Inventur-Berichtsdatei (intern generiert)" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "Anzahl der Teile" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "Anzahl der Teile, die von der Inventur abgedeckt werden" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "Benutzer, der diesen Inventurbericht angefordert hat" + +#: part/models.py:3222 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:3096 +#: part/models.py:3239 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:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "Benötigt" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3135 +#: part/models.py:3278 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:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3141 +#: part/models.py:3284 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:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "Einheit des Parameters" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "Wert" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "Teilnummer oder Teilname" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "Eindeutige Teil-ID" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "IPN-Wert des Teils" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "Stufe" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "Stücklistenebene" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "Optional" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Diese Stücklisten-Position ist ein Verbrauchsartikel (sie wird nicht in Bauaufträgen verfolgt)" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Überschuss" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "Geerbt" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "überprüft" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "Diese Stücklistenposition wurde validiert" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "Wird vererbt" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Diese Stücklisten-Position wird in die Stücklisten von Teil-Varianten vererbt" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "Varianten zulassen" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Bestand von Varianten kann für diese Stücklisten-Position verwendet werden" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt werden" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt." -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "Kategorieparameter kopieren" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "Inventurbericht auf ein bestimmtes Teil und alle Variantenteile beschränken" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "Inventurbericht auf eine bestimmte Teilekategorie und alle untergeordneten Kategorien beschränken" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "Inventurbericht auf einen bestimmten Lagerort und alle untergeordneten Lagerorte beschränken" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "Bericht generieren" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "Erstelle Berichtsdatei mit berechneten Inventurdaten" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "Teile aktualisieren" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "Angegebene Teile mit berechneten Inventurdaten aktualisieren" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "Inventur-Funktionalität ist nicht aktiviert" + +#: part/serializers.py:964 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "Bestehende Stückliste löschen" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "Bestehende Stücklisten-Positionen vor dem Importieren entfernen" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "Keine Teilspalte angegeben" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "Mehrere übereinstimmende Teile gefunden" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "Keine passenden Teile gefunden" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "Teil ist nicht als Komponente angelegt" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "Menge nicht angegeben" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "Ungültige Menge" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "Mindestens eine Stückliste-Position ist erforderlich" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "Benachrichtigungen über geringen Bestand" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Der verfügbare Bestand für {part.name} ist unter das konfigurierte Mindestniveau gefallen" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "Gesamtstückzahl" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "Gesamt-Bestandswert min" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "Gesamt-Bestandswert max" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "Inventurbericht verfügbar" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "Ein neuer Inventurbericht steht zum Download zur Verfügung" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "Sie haben keine Berechtigung zum Bearbeiten der Stückliste." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" -msgstr "Die Stückliste für %(part)s hat sich geändert und muss kontrolliert werden.
" +msgid "The BOM this part has been changed, and must be validated" +msgstr "" #: part/templates/part/bom.html:17 #, python-format @@ -5675,7 +6205,7 @@ msgstr "Die Stückliste für %(part)s wurde zuletzt von %(checker)s am msgid "The BOM for %(part)s has not been validated." msgstr "Die Stückliste für %(part)s wurde noch nicht kontrolliert." -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "Stücklisten-Aktionen" @@ -5683,85 +6213,85 @@ msgstr "Stücklisten-Aktionen" msgid "Delete Items" msgstr "Einträge löschen" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "Inventur für diese Teilekategorie durchführen" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "Sie haben Benachrichtigungen für diese Kategorie abonniert" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "Benachrichtigungen für diese Kategorie abonnieren" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "Kategorieaktionen" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Kategorie bearbeiten" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Kategorie bearbeiten" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Kategorie löschen" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Kategorie löschen" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "Oberste Teil-Kategorie" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Teile (inklusive Unter-Kategorien)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "Neues Teil anlegen" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "Neues Teil" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "Optionen" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "Teil-Kategorie auswählen" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "Teil-Kategorie auswählen" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "Label drucken" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Teilparameter" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "Teil-Kategorie anlegen" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Neue Kategorie" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "Teil-Kategorie hinzufügen" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "Terminierungsdaten aktualisieren" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Neu laden" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "Inventurinformationen hinzufügen" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "Inventur" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "Teil Test-Vorlagen" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "Test Vorlage hinzufügen" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "Verkaufsauftragszuweisungen" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "Teile-Notizen" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "Teil Varianten" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "Neue Variante anlegen" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "neue Variante anlegen" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "Parameter hinzufügen" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Verknüpfte Teile" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Stückliste" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "Export-Aktionen" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Stückliste exportieren" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "Stücklisten-Bericht drucken" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "Stückliste hochladen" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "Stückliste überprüfen" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "Stücklisten-Position hinzufügen" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "Baugruppen" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "Gefertigte Teile" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "Bauauftragszuweisungen" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "Zulieferer" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "Teil-Hersteller" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "Herstellerteile löschen" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "verknüpftes Teil" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "Testergebnis-Vorlage hinzufügen" @@ -5948,13 +6480,13 @@ msgstr "Teile-Importvorlage herunterladen" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "Format" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "Dateiformat auswählen" @@ -5976,7 +6508,7 @@ msgstr "Barcode abhängen" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Label drucken" @@ -5986,7 +6518,7 @@ msgstr "Kosteninformationen ansehen" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Bestands-Aktionen" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "Teil kann an Kunden verkauft werden" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "Inaktiv" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "Teil ist virtuell (kein physisches Teil)" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "Inaktiv" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "Teildetails anzeigen" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "Dieses Teil ist eine Variante von %(link)s" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "Zu Bauaufträgen zugeordnet" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "Zur Bestellung zugeordnet" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "Herstellbar" @@ -6079,44 +6609,48 @@ msgstr "Herstellbar" msgid "Minimum stock level" msgstr "Minimaler Bestand" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "Preisspanne" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "letzte Seriennummer" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "Nach Seriennummer suchen" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "Teil-QR-Code" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "Barcode mit Teil verknüpfen" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "Berechnen" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "Verknüpftes Bild von diesem Teil entfernen" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "Keine passenden Bilder gefunden" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "Teildetails ausblenden" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "Zulieferer-Preise" @@ -6127,13 +6661,6 @@ msgstr "Zulieferer-Preise" msgid "Unit Cost" msgstr "Stückpreis" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "Gesamtkosten" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "Keine Zulieferer-Preise verfügbar" @@ -6171,11 +6698,27 @@ msgstr "Geplante Menge" msgid "Variants" msgstr "Varianten" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Bestand" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Bepreisung" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "Zeitplan" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "Testvorlagen" @@ -6191,11 +6734,11 @@ msgstr "Preisübersicht" msgid "Refresh Part Pricing" msgstr "Preis aktualisieren" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "Zuletzt aktualisiert" @@ -6258,8 +6801,8 @@ msgstr "Verkaufspreise" msgid "Add Sell Price Break" msgstr "Verkaufspreisstaffel hinzufügen" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "Kein Bestand" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "Neue Teilevariante anlegen" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." -msgstr "Neue Variante von Vorlage anlegen '%(full_name)s'." +msgid "Create a new variant part from this template" +msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "Unbekannte Datenbank" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "{title} v{version}" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "Referenzen zuteilen" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "Teil {name} kann nicht importiert werden, da keine Kategorie zugewiesen ist" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "Teil-QR-Code" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "Teilbild auswählen" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "Teilbild aktualisiert" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "Teilbild nicht gefunden" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "Teilbepreisung" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "Barcode entspricht einem bereits vorhandenen Artikel" @@ -6387,15 +6926,15 @@ msgstr "Kein Treffer für angegebenen Wert gefunden" msgid "Label printing failed" msgstr "Labeldruck fehlgeschlagen" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "InvenTree Barcodes" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "Bietet native Unterstützung für Barcodes" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "InvenTree Mitwirkende" @@ -6498,19 +7037,20 @@ msgstr "Kein Autor gefunden" msgid "No date found" msgstr "Kein Datum gefunden" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" -msgstr "Plugin `{plg_name}` ist nicht kompatibel mit der aktuellen InvenTree Version {version.inventreeVersion()}!" - -#: plugin/registry.py:446 +#: plugin/registry.py:452 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" -msgstr "Plugin benötigt mindestens Version {plg_i.MIN_VERSION}" +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" -msgstr "Plugin benötigt maximal Version {plg_i.MAX_VERSION}" +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" +msgstr "" #: plugin/samples/integration/sample.py:39 msgid "Enable PO" @@ -6544,132 +7084,136 @@ msgstr "Auswahleinstellungen" msgid "A setting with multiple choices" msgstr "Eine Einstellung mit mehreren Optionen" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "Quell-URL" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "Quelle für das Paket - dies kann eine eigene Registry oder ein VCS-Pfad sein" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "Paket-Name" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "Name für das Plugin-Paket - kann auch einen Versionstext enthalten" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "Plugin-Installation bestätigen" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "Dies wird dieses Plugin sofort in die aktuelle Instanz installieren. Die Instanz wird sofort in Wartung gehen." -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "Installation nicht bestätigt" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "Entweder Paketname oder URL muss angegeben werden" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "Keine korrekten Objekte für Vorlage gegeben" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Vorlagendatei '{template}' fehlt oder existiert nicht" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "Testbericht" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "Vorlagen Name" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "Bericht-Vorlage Datei" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "Bericht-Vorlage Beschreibung" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "Bericht Revisionsnummer (autom. erhöht)" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "Muster für die Erstellung von Berichtsdateinamen" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "Bericht-Vorlage ist ein" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "Lagerartikel-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "einfügen Installiert in Tests" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "Test-Ergebnisse für Lagerartikel in Baugruppen einschließen" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "Bauauftrag Filter" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "Bau-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "Teil Filter" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "Teile-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "Bestellungs-Abfragefilter" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "Auftrags-Abfragefilter" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "Snippet" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "Ressource" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "Ressource-Beschreibung" @@ -6681,361 +7225,426 @@ msgstr "Benötigte Materialien" msgid "Required For" msgstr "benötigt für" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Lieferant gelöscht" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Stück-Preis" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "Zusätzliche Positionen" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Summe" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Seriennummer" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Lagerartikel Test-Bericht" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Seriennummer" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Testergebnisse" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "Test" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "Ergebnis" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "bestanden" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "fehlgeschlagen" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Verbaute Objekte" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "Seriennummer" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "Standort-ID" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "Ortsname" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "Lagerortpfad" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "Lagerartikel ID" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "Statuscode" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "Zuliefererteil-ID" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "Zulieferer ID" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "Lieferant" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "Kunden ID" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "verbaut in" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "Bauauftrag-ID" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "Auftrags-ID" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "Bestellungs-ID" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "Überprüfung erforderlich" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "Löschen wenn leer" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "Ablaufdatum" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "Externer Standort" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "Besitzer" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "Besitzer auswählen" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "Lagerartikel können nicht direkt an einen strukturellen Lagerort verlegt werden, können aber an einen untergeordneten Lagerort verlegt werden." - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "Sie können diesen Lagerort nicht als strukturell markieren, da sich bereits Lagerartikel darin befinden!" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "Teile-Typ ('{pf}') muss {pe} sein" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" - -#: stock/models.py:592 -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:614 -msgid "Item cannot belong to itself" -msgstr "Teil kann nicht zu sich selbst gehören" - -#: stock/models.py:620 -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:634 -msgid "Build reference does not point to the same part object" -msgstr "Referenz verweist nicht auf das gleiche Teil" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "Eltern-Lagerartikel" - -#: stock/models.py:658 -msgid "Base part" -msgstr "Basis-Teil" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Bestand-Lagerorte" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "Besitzer" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "Besitzer auswählen" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "Lagerartikel können nicht direkt an einen strukturellen Lagerort verlegt werden, können aber an einen untergeordneten Lagerort verlegt werden." + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "Extern" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "Dies ist ein externer Lagerort" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "Sie können diesen Lagerort nicht als strukturell markieren, da sich bereits Lagerartikel darin befinden!" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "Teile-Typ ('{pf}') muss {pe} sein" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" + +#: stock/models.py:604 +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:626 +msgid "Item cannot belong to itself" +msgstr "Teil kann nicht zu sich selbst gehören" + +#: stock/models.py:632 +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:646 +msgid "Build reference does not point to the same part object" +msgstr "Referenz verweist nicht auf das gleiche Teil" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Eltern-Lagerartikel" + +#: stock/models.py:670 +msgid "Base part" +msgstr "Basis-Teil" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses Lagerartikel ist gelagert in" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ablaufdatum für Lagerartikel. Bestand wird danach als abgelaufen gekennzeichnet" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "Lagerartikel-Notizen" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1329 +#: stock/models.py:1373 #, 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:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "Seriennummern {exists} existieren bereits" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "Seriennummern existieren bereits" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagerartikel kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "Test Notizen" @@ -7043,128 +7652,124 @@ msgstr "Test Notizen" msgid "Serial number is too large" msgstr "Seriennummer ist zu lang" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "Kaufpreis für diesen Lagerartikel" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Seriennummern existieren bereits" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "Wählen Sie einen Teil aus, zu dem dieser Lagerartikel geändert werden soll" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "Das ausgewählte Teil ist keine gültige Option für die Umwandlung" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "Ziel Lagerort für zurückgegebene Artikel" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" @@ -7189,7 +7794,7 @@ msgstr "Testdaten" msgid "Test Report" msgstr "Test-Bericht" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "Testdaten löschen" @@ -7201,15 +7806,15 @@ msgstr "Testdaten hinzufügen" msgid "Installed Stock Items" msgstr "Installierte Lagerartikel" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "Lagerartikel installieren" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "Alle Testergebnisse für diesen Lagerartikel löschen" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "Testergebnis hinzufügen" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "zu Lagerort einscannen" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "Druck Aktionen" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "Bestands-Anpassungs Aktionen" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "Bestand hinzufügen" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "Bestand entfernen" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "Bestand serialisieren" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "Bestand verschieben" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "Kunden zuweisen" @@ -7292,125 +7897,133 @@ msgstr "Lagerartikel bearbeiten" msgid "Delete stock item" msgstr "Lagerartikel löschen" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "Elternposition" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "Kein Hersteller ausgewählt" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "Sie gehören nicht zu den Eigentümern dieses Objekts und können es nicht ändern." -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "Nur Leserechte" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "Dieser Lagerartikel wird gerade hergestellt und kann nicht geändert werden." -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "Ändern des Lagerartikel in der Bauauftrag-Ansicht." -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "Dieser Lagerartikel hat nicht alle Tests bestanden" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "Dieser Lagerartikel ist einem Auftrag zugewiesen" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "Dieser Lagerartikel ist einem Bauauftrag zugewiesen" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "Diesesr Lagerartikel ist serialisiert. Es hat eine eindeutige Seriennummer und die Anzahl kann nicht angepasst werden." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "vorherige Seite" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "Zur vorherigen Seriennummer wechseln" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "nächste Seite" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "Zur nächsten Seriennummer wechseln" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "Verfügbare Menge" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "Kein Lagerort gesetzt" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "Tests" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "Dieser Lagerartikel hat nicht alle Tests bestanden" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Dieser Lagerartikel lief am %(item.expiry_date)s ab" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "abgelaufen" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "Dieser Lagerartikel läuft am %(item.expiry_date)s ab" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "überfällig" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "Bestandsstatus bearbeiten" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "Lagerartikel-QR-Code" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "Barcode mit Lagerartikel verknüpfen" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "Wählen Sie eine der unten aufgeführten Teilvarianten aus." -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "Warnung" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "Lagerartikel umwandeln" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "zurück ins Lager" @@ -7422,47 +8035,51 @@ msgstr "Teile mit Seriennummern mit diesem BestandObjekt anlegen." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Zu serialisierende Anzahl und eindeutige Seriennummern angeben." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "Inventur für diesen Lagerort durchführen" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "Lagerort lokalisieren" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "Lagerartikel per Barcode-Scan zu diesem Lagerort hinzufügen" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "Lagerartikel einscannen" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "Lagerort hierher einscannen" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "Lagerort scannen" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Lagerort-Aktionen" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Lagerort bearbeiten" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Lagerort löschen" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "Oberster Lagerstandort" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "Standortbesitzer" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Sie sind nicht auf der Liste der Besitzer dieses Lagerorts. Der Bestands-Lagerort kann nicht verändert werden." @@ -7472,11 +8089,6 @@ msgstr "Sie sind nicht auf der Liste der Besitzer dieses Lagerorts. Der Bestands msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Bestand-Lagerorte" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "Neuen Lagerort anlegen" @@ -7485,11 +8097,15 @@ msgstr "Neuen Lagerort anlegen" msgid "New Location" msgstr "Neuer Lagerort" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "Lagerort an diesen Ort eingescannt" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "QR-Code für diesen Lagerort" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "Barcode mit Lagerort verknüpfen" @@ -7509,10 +8125,6 @@ msgstr "Zuweisungen" msgid "Child Items" msgstr "Untergeordnete Objekte" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "QR-Code für diesen Lagerort" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Zugriff verweigert" @@ -7529,7 +8141,8 @@ msgstr "Authentifizierungsfehler" msgid "You have been logged out from InvenTree." msgstr "Sie wurden von InvenTree abgemeldet." -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "Einloggen" @@ -7638,6 +8251,12 @@ msgstr "Aktuelle Neuigkeiten" msgid "Notification History" msgstr "Benachrichtigungsverlauf" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "Benachrichtigungen löschen" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "Ausstehende Benachrichtigungen" @@ -7650,7 +8269,7 @@ msgstr "Alle als gelesen markieren" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "Benachrichtigungen" @@ -7666,8 +8285,8 @@ msgstr "Kein Benachrichtigungsverlauf" msgid "Delete all read notifications" msgstr "Lösche alle gelesenen Benachrichtigungen" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "Benachrichtigung löschen" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "Labeleinstellungen" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "Anmeldeeinstellungen" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "Single Sign On" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "Einstellungen" @@ -7741,8 +8359,9 @@ msgid "Open in new tab" msgstr "In neuem Tab öffnen" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "Globale Benachrichtigungseinstellungen" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "Benachrichtigungs-Einstellungen" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -7752,20 +8371,28 @@ msgstr "Slug" msgid "Part Settings" msgstr "Teil-Einstellungen" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Teileimport" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Teil importieren" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "Teil-Parametervorlage" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "Inventur-Einstellungen" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "Inventurberichte" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "Plugin-Einstellungen" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "Wenn Sie die folgenden Einstellungen ändern, müssen Sie InvenTree sofort neu starten. Ändern Sie dies nicht während der aktiven Nutzung." #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "Plugins" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "Stufe" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "Meldung" @@ -7896,28 +8523,32 @@ msgstr "Bestellungs-Einstellungen" msgid "Pricing Settings" msgstr "Preiseinstellungen" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Wechselkurse" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Jetzt aktualisieren" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Letzte Aktualisierung" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Nie" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "Berichts-Einstellungen" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "Kein Wert angegeben" @@ -7926,71 +8557,71 @@ msgstr "Kein Wert angegeben" msgid "Edit setting" msgstr "Einstellungen ändern" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "Plugin-Einstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "Benachrichtigungs-Einstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "Allgemeine Einstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "Benutzereinstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "Kurs" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "Keine Kategorie-Parametervorlagen gefunden" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "Vorlage bearbeiten" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "Vorlage löschen" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "Kategorieparametervorlage anlegen" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "Kategorieparametervorlage löschen" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "Kategorieparametervorlage anlegen" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "Keine Teilparametervorlagen gefunden" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "ID" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "Teilparametervorlage anlegen" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "Teilparametervorlage bearbeiten" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "Alle Parameter, die diese Vorlage referenzieren, werden ebenfalls gelöscht" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "Teilparametervorlage löschen" @@ -8000,43 +8631,42 @@ msgid "User Settings" msgstr "Benutzer-Einstellungen" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Kontoeinstellungen" +msgid "Account" +msgstr "Benutzerkonto" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Anzeigeeinstellungen" +msgid "Display" +msgstr "Darstellung" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "Startseite" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Sucheinstellungen" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Suche" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "Etikettendruck" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "Berichte" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Allgemeine Einstellungen" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" -msgstr "Serverkonfiguration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "Server" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "Etiketten" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "Kategorien" @@ -8048,6 +8678,10 @@ msgstr "Auftrags-Einstellungen" msgid "Stock Settings" msgstr "Bestands-Einstellungen" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Kontoeinstellungen" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "Passwort ändern" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "Bearbeiten" @@ -8206,6 +8840,10 @@ msgstr "%(time)s vor" msgid "Do you really want to remove the selected email address?" msgstr "Möchten Sie die ausgewählte E-Mail-Adresse wirklich entfernen?" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Anzeigeeinstellungen" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Anzeige-Einstellungen" @@ -8271,9 +8909,9 @@ msgstr "InvenTree Übersetzungsprojekt" msgid "Home Page Settings" msgstr "Startseite-Einstellungen" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "Benachrichtigungs-Einstellungen" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Sucheinstellungen" #: templates/about.html:9 msgid "InvenTree Version" @@ -8341,7 +8979,7 @@ msgstr "E-Mail-Adresse bestätigen" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Bitte bestätigen Sie, dass %(email)s eine E-Mail-Adresse für den Benutzer %(user_display)s ist." -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Bestätigen" @@ -8509,11 +9147,11 @@ msgstr "Geben Sie das von der App generierte Token ein:" msgid "Verify" msgstr "Überprüfen" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "Link hinzufügen" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "Anhang hinzufügen" @@ -8521,32 +9159,33 @@ msgstr "Anhang hinzufügen" msgid "Delete selected attachments" msgstr "Markierte Anhänge löschen" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "Anhänge entfernen" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "Barcode-Bezeichner" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "Server-Neustart erforderlich" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "Eine Konfigurationsoption wurde geändert, die einen Neustart des Servers erfordert" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "Bitte kontaktieren Sie Ihren Administrator für mehr Informationen" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "Alle Zeilen einklappen" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "Klicken Sie auf den folgenden Link, um diesen Auftrag anzuzeigen" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "Bei den folgenden Teilen gibt es wenige Lagerartikel" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "Benötigte Menge" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "Klicken Sie auf den folgenden Link, um diesen Teil anzuzeigen" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "Mindestmenge" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "Alle Zeilen erweitern" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "Keine Antwort" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "keine Antwort vom InvenTree Server" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "Fehler 400: Fehlerhafte Anfrage" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "Fehler-Code 400 zurückgegeben" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "Fehler 401: Nicht Angemeldet" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "Authentication Kredentials nicht angegeben" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "Fehler 403: keine Berechtigung" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "Fehlende Berechtigung für diese Aktion" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "Fehler 404: Ressource nicht gefunden" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "Die angefragte Ressource kann auf diesem Server nicht gefunden werden" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "Fehler 405: Methode nicht erlaubt" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "HTTP-Methode für diese URL nicht erlaubt" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "Fehler 408: Zeitüberschreitung" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "Verbindungszeitüberschreitung bei der Datenanforderung" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "Unbehandelter Fehler-Code" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "Fehler-Code" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "Alle ausgewählten anhänge werden gelöscht" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "Keine Anhänge gefunden" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "Anhang bearbeiten" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "Hochladedatum" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "Anhang bearbeiten" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "Anhang löschen" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "Barcode Daten hier mit Barcode Scanner scannen" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "Barcode-Daten eingeben" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "Barcode" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "Barcode mittels angeschlossener Webcam scannen" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "Optionale Notizen zu Bestandsübertragung eingeben" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "Notizen eingeben" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "Server-Fehler" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "Unbekannte Antwort von Server erhalten" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "Ungültige Antwort von Server" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "Barcode Daten scannen" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Barcode scannen" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "keine URL in der Antwort" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "Dadurch wird der Link zu dem zugehörigen Barcode entfernt" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "Entfernen" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "Lagerartikel entfernen" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "Lagerartikel in Lagerort buchen" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "Barcode des Lagerartikels scannen um ihn an diesen Ort einzuchecken" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "Einbuchen" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "Kein Barcode vorhanden" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "Lagerartikel bereits gescannt" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "Lagerartikel besteht bereits in diesem Lagerort" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "Lagerartikel hinzugefügt" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "Barcode entspricht keinem Lagerartikel" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "Diesen Lagerort per Scan an einen anderen Lagerort verschieben" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "Barcode des Lagerorts scannen um ihn an diesen Ort einzuchecken" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "Barcode entspricht keinem Lagerort" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "In Lagerorten buchen" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "Barcode entspricht keinem Lagerort" @@ -8805,10 +9436,10 @@ msgstr "Zeilendaten anzeigen" msgid "Row Data" msgstr "Zeilendaten" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Schliessen" @@ -8881,122 +9512,122 @@ msgstr "Preisdaten einschließen" msgid "Include part pricing data in exported BOM" msgstr "Preisinformationen in Stücklisten-Export einschließen" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "Ersatzteil entfernen" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "Wählen Sie ein neues Ersatzteil aus und fügen Sie sie mit den folgenden Eingaben hinzu" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "Sind Sie sicher, dass Sie dieses Ersatzteil entfernen möchten?" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "Ersatzteil entfernen" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "Ersatzteil hinzufügen" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "Stücklisten Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "Alle ausgewählte Stücklistenpositionen werden gelöscht" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "Ausgewählte Stücklistenpositionen löschen?" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "Stückliste für Bauteile laden" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "Varianten erlaubt" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "Ersatzteile" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "Stückliste anzeigen" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "Stücklisten-Bepreisung ist vollständig" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "Stücklisten-Bepreisung ist unvollständig" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "Keine Preisinformation verfügbar" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "Beinhaltet Variante und Ersatzbestand" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "Beinhaltet Variantenbestand" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "Enthält Ersatzbestand" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "Verbrauchsartikel" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "Stücklisten-Position kontrollieren" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "Diese Position wurde kontrolliert" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "Stücklisten-Position bearbeiten" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "Stücklisten-Position löschen" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "Stückliste anzeigen" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "benötigtes Teil" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "Geerbt von übergeordneter Stückliste" @@ -9040,13 +9671,13 @@ msgstr "Bauauftrag ist unvollständig" msgid "Complete Build Order" msgstr "Bauauftrag fertigstellen" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "Nächste verfügbare Seriennummer" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "Letzte Seriennummer" @@ -9082,35 +9713,35 @@ msgstr "Bestand von Endpordukt zurücknehmen" msgid "Complete build output" msgstr "Endprodukt fertigstellen" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "Endprodukt entfernen" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "Sind Sie sicher, dass sie alle Lagerartikel von diesem Bauauftrag entfernen möchten?" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "Lagerartikel zurücknehmen" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "Endprodukte auswählen" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "Mindestens ein Endprodukt muss ausgewählt werden" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "Endprodukt" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "Endprodukte fertigstellen" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "Endprodukte entfernen" @@ -9122,541 +9753,558 @@ msgstr "Keine Allokationen für Bauauftrag gefunden" msgid "Location not specified" msgstr "Standort nicht angegeben" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "Keine aktiven Endprodukte gefunden" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "Bestand zuteilen" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "Keine nachverfolgten Stücklisten-Einträge für diesen Bauauftrag" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "Abgeschlossene Tests" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "Keine erforderlichen Tests für diesen Bauauftrag" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "Bestands-Zuordnung bearbeiten" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "Zuordnung bearbeiten" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "Zuordnung entfernen" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "Anzahl pro" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "Unzureichender Bestand verfügbar" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "Ausreichender Bestand verfügbar" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "Bestand bauen" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "Bestand zuweisen" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "Teile auswählen" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "Sie müssen mindestens ein Teil auswählen" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "Alle Teile zugeordnet" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "Alle ausgewählten Teile wurden vollständig zugeordnet" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "Wählen Sie den Quellort aus (leer lassen um von allen Standorten zu nehmen)" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "Lagerartikel für Bauauftrag zuweisen" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "Keine passenden Lagerstandorte" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "Keine passenden Lagerbestände" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "Automatische Lagerzuordnung" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Lagerartikel werden automatisch diesem Bauauftrag zugewiesen, entsprechend den angegebenen Richtlinien" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "Wenn ein Lagerort angegeben ist, wird der Lagerbestand nur von diesem Ort zugewiesen" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Wenn der Lagerbestand als austauschbar gilt, wird er vom ersten Standort zugewiesen, an dem er gefunden wird" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Wenn ein Ersatzbestand erlaubt ist, wird es dort verwendet, wo kein Vorrat des Primärteils gefunden werden kann" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "Lagerartikel zuordnen" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "Keine Bauaufträge passen zur Anfrage" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "Auswählen" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "Fortschritt" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "Gruppe" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "Keine Teile zugeordnet zu" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "Hersteller hinzufügen" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "Herstellerteil hinzufügen" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "Herstellerteil ändern" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "Zulieferer hinzufügen" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "Zuliefererteil hinzufügen" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "Alle ausgewählten Zulieferteile werden gelöscht" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "Zuliefererteil entfernen" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "Neue Firma hinzufügen" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "Teile geliefert" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "Hersteller-Teile" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "Keine Firmeninformation gefunden" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "Alle ausgewählten Herstellerrteile werden gelöscht" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "Herstellerteile löschen" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "Alle ausgewählten Parameter werden gelöscht" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Parameter löschen" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "Keine Herstellerteile gefunden" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "Vorlagenteil" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "Baugruppe" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "Keine Parameter gefunden" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "Parameter löschen" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "Parameter löschen" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "Keine Zuliefererteile gefunden" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "Verfügbarkeit" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "Zuliefererteil bearbeiten" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "Zuliefererteil entfernen" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "Preisstaffel löschen" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "Preisstaffel bearbeiten" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "Keine Informationen zur Preisstaffel gefunden" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "Zuletzt aktualisiert" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "Preisstaffel bearbeiten" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "Preisstaffel löschen" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "ja" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "nein" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "Filter auswählen" -#: templates/js/translated/filters.js:292 -msgid "Download data" -msgstr "Daten herunterladen" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" +msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" -msgstr "Daten neu laden" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" +msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "Filter hinzufügen" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "Filter entfernen" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "Filter anlegen" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "Aktion verboten" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "Erstellvorgang nicht erlaubt" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "Updatevorgang nicht erlaubt" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "Löschvorgang nicht erlaubt" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "Anzeigevorgang nicht erlaubt" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "Dieses Formular offen lassen" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "Eingabe leeren" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "Dateispalte" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "Feldname" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "Spalten auswählen" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "JA" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "NEIN" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "Notiz aktualisiert" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "Label an den Drucker gesendet" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "Lagerartikel auswählen" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "Lagerartikel müssen ausgewählt sein bevor Labels gedruckt werden können" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "Keine Labels gefunden" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "Keine Labels die zu Lagerartikel passen gefunden" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "Bestands-Lagerort auswählen" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "Bestands-Lagerort(e) müssen ausgewählt sein um Labels zu drucken" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "Keine Labels für die ausgewählten Bestands-Lagerort(e) gefunden" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "Teile(e) müssen ausgewählt sein bevor Labels gedruckt werden können" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "Keine Labels zu den ausgewählten Teilen gefunden" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "Drucker auswählen" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "Als PDF exportieren" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "Lagerartikel ausgewählt" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "Label-Vorlage auswählen" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "Keine Labels gefunden" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "Label an den Drucker gesendet" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Abbrechen" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Abschicken" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "Formulartitel" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "Warte auf Server..." -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "Fehler-Informationen anzeigen" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "Akzeptieren" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "Lade Daten" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "ungültige Antwort vom Server" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "Formulardaten fehlen bei Serverantwort" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "Formulardaten fehlerhaft" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "JSON Antwort enthält keine Formulardaten" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "Fehler 400: Ungültige Anfrage" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "Fehler 400 von Server erhalten" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "Fehler bei Formulardaten-Anfrage" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "Firmen-ID" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "Bestands-ID" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "Bestell-ID" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "Sendungs-ID" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "Herstellerteil-ID" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "Keine Nachrichten gefunden" @@ -9665,442 +10313,62 @@ msgstr "Keine Nachrichten gefunden" msgid "Age" msgstr "Alter" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "Benachrichtigung" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "Als ungelesen markieren" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "Als gelesen markieren" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "Keine ungelesenen Benachrichtigungen" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "Benachrichtigungen erscheinen hier" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" -msgstr "Dieser Sendung wurden keine Artikel zugewiesen" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" +msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "Die folgenden Artikel werden verschickt" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "Sendung fertigstellen" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "Sendung bestätigen" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "Keine ausstehenden Sendungen gefunden" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "Keine Lagerartikel für offene Sendungen zugewiesen" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "Überspringen" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "Bestellung vervollständigen" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "Diese Bestellung als vollständig markieren?" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "Alle Einträge wurden erhalten" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "Diese Bestellung enthält Positionen, die nicht als empfangen markiert wurden." - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "Fertigstellen dieser Bestellung bedeutet, dass sie und ihre Positionen nicht länger bearbeitbar sind." - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "Bestellung abbrechen" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "Sind Sie sicher, dass Sie diese Bestellung abbrechen möchten?" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "Diese Bestellung kann nicht storniert werden" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "Bestellung aufgeben" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "Nachdem diese Bestellung plaziert ist können die Positionen nicht länger bearbeitbar ist." - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "Dieser Auftrag enthält Positionen, die noch nicht abgeschlossen sind." - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "Auftrag stornieren" - -#: templates/js/translated/order.js:456 -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." - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "Sendung anlegen" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "Kunden hinzufügen" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "Auftrag anlegen" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "Bestellung zum Duplizieren auswählen" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "Positionen duplizieren" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "Alle Positionen der ausgewählten Bestellung duplizieren" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "Zusätzliche Zeilen duplizieren" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "Zusätzliche Positionen der ausgewählten Bestellung duplizieren" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Bestellung bearbeiten" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "Duplizierungsoptionen" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "Bestellung exportieren" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "Mindestens ein kaufbares Teil muss ausgewählt werden" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "Zu bestellende Menge" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "Neues Zuliefererteil" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "Neue Bestellung" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "Zur Bestellung hinzufügen" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "Keine passenden Lieferantenteile" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "Keine passenden Bestellungen" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "Positionen auswählen" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "Mindestens eine Position muss ausgewählt werden" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "Losnummer hinzufügen" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "Seriennummern hinzufügen" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "Gelieferte Menge" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "Zu erhaltende Menge" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "Status" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Bestellnummer" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Bestellt" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "Zu erhaltende Menge" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "Empfang der Teile bestätigen" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "Bestellpositionen erhalten" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "Keine Bestellungen gefunden" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "Bestellung überfällig" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "Positionen" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "Position duplizieren" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "Position bearbeiten" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "Position löschen" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "Keine Positionen gefunden" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "Summe" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "Gesamtstückzahl" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "Stück-Preis" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Gesamtpreis" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "Diese Position ist überfällig" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "Position empfangen" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "Position duplizieren" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "Position bearbeiten" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "Position löschen" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "Position duplizieren" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "Zeile bearbeiten" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "Zeile löschen" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "Position duplizieren" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "Zeile bearbeiten" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "Zeile löschen" -#: templates/js/translated/order.js:2687 -msgid "No matching line" -msgstr "Keine passenden Positionen gefunden" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" +msgstr "Keine Positionen gefunden" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "Keine Aufträge gefunden" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" +msgstr "Position duplizieren" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" -msgstr "Ungültiger Kunde" +#: templates/js/translated/order.js:345 +msgid "Edit line" +msgstr "Zeile bearbeiten" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "Sendung bearbeiten" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "Sendung fertigstellen" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "Sendung löschen" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "Sendung bearbeiten" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "Sendung löschen" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "Keine passenden Sendungen gefunden" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "Sendungsreferenz" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "Nicht versandt" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "Nachverfolgen" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "Rechnung" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "Sendung hinzufügen" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Bestandszuordnung bestätigen" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "Artikel zu Kundenauftrag zuweisen" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "Keine Allokationen für Verkaufsaufträge gefunden" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "Bestandszuordnung bearbeiten" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "Löschvorgang bestätigen" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "Bestands-Zuordnung löschen" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "an Kunde versand" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "Lagerstandort nicht angegeben" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "Seriennummern zuweisen" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Bestand kaufen" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Preis berechnen" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "Kann nicht gelöscht werden, da Artikel versandt wurden" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "Kann nicht gelöscht werden, da Artikel zugewiesen sind" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "Seriennummern zuweisen" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "Stückpreis aktualisieren" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "Keine passenden Positionen gefunden" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" -msgstr "Keine passenden Positionen gefunden" +#: templates/js/translated/order.js:349 +msgid "Delete line" +msgstr "Zeile löschen" #: templates/js/translated/part.js:56 msgid "Part Attributes" @@ -10118,302 +10386,311 @@ msgstr "Einstellungen für Teilkopien" msgid "Add Part Category" msgstr "Teil-Kategorie hinzufügen" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "Kategorieparameter kopieren" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "Übergeordnete Teilkategorie" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "Icon (optional) - alle verfügbaren Icons einsehbar auf" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "Teil-Kategorie bearbeiten" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "Möchten Sie diese Kategorie wirklich löschen?" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "In übergeordnete Kategorie verschieben" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "Teil-Kategorie löschen" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "Aktion für Teile in dieser Kategorie" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "Aktion für Unterkategorien" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "Teil hinzufügen" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "Ein weiteres Teil anlegen" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "Teil erfolgreich angelegt" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "Teil bearbeiten" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "Teil bearbeitet" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "Teil-Variante anlegen" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "Aktives Teil" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "Teil kann nicht gelöscht werden, da es derzeit aktiv ist" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "Das Löschen dieses Teils kann nicht rückgängig gemacht werden" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "Alle Lagerartikel für dieses Teil werden gelöscht" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "Dieses Teil wird von allen Stücklisten entfernt" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "Alle Hersteller- und Zuliefererinformationen für dieses Teil werden gelöscht" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "Teil löschen" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "Sie haben Benachrichtigungen für dieses Teil abonniert" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "Sie haben Benachrichtigungen für dieses Teil abonniert" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "Benachrichtigungen für dieses Teil abonnieren" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "Sie haben Benachrichtigungen für dieses Teil abgemeldet" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "Die Stückliste zu validieren markiert jede Zeile als gültig" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "Stückliste prüfen" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "überprüfte Stückliste" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "Stückliste kopieren" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "Bestand niedrig" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "Bedarf" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "Einheit" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "Nachverfolgbares Teil" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "virtuelles Teil" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "Abonnierter Teil" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "Verkäufliches Teil" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" -msgstr "Lagerartikel wurde in letzter Zeit nicht geprüft" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." +msgstr "Die Erstellung eines neuen Inventurberichtes planen." -#: templates/js/translated/part.js:744 -msgid "Update item" -msgstr "Element aktualisieren" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." +msgstr "Nach Fertigstellung steht der Inventurbericht zum Download zur Verfügung." -#: templates/js/translated/part.js:745 -msgid "Delete item" -msgstr "Element löschen" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" +msgstr "Inventurbericht generieren" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "Inventurbericht geplant" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "Keine Inventurinformationen verfügbar" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "Inventureintrag bearbeiten" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "Inventureintrag löschen" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Keine Varianten gefunden" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "Keine Bestellungen gefunden" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "Diese Position ist überfällig" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "Position empfangen" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "Teile-Beziehung löschen" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "Teile-Beziehung löschen" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "Keine Teile gefunden" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Keine Kategorie" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "Kein Bestand" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "Zu Bauaufträgen zugeordnet" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "Zu Bestellungen zugeordnet" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Listenansicht" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Rasteransicht" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "Legen Sie die Teilkategorie für die ausgewählten Teile fest" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "Teil-Kategorie auswählen" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "Teil-Kategorie wählen" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "Kategorie erforderlich" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Baumansicht" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "Unterkategorien laden" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "Abonnierte Kategorie" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "Keine zur Anfrage passenden Testvorlagen" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "Testergebnis bearbeiten" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "Testergebnis löschen" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "Dieses Testergebnis ist für ein Hauptteil" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "Testergebnis-Vorlage bearbeiten" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "Testergebnis-Vorlage löschen" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "Kein Datum angegeben" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "Das angegebene Datum liegt in der Vergangenheit" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "Spekulativ" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "Keine Zeitplanung für dieses Teil vorhanden" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "Fehler beim Abrufen der Zeitplanungsinformationen für dieses Teil" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "Geplante Lagermengen" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "Maximale Anzahl" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "Minimaler Lagerbestand" @@ -10421,835 +10698,1272 @@ msgstr "Minimaler Lagerbestand" msgid "The Plugin was installed" msgstr "Das Plugin wurde installiert" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "Fehler beim Abrufen der Währungsdaten" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "Keine Stücklisten-Daten verfügbar" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "Keine Zulieferer-Preise verfügbar" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "Keine Staffelpreisdaten verfügbar" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "${human_name} bearbeiten" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "${human_name} löschen" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "Keine Einkaufshistorie verfügbar" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "Kaufpreisverlauf" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "Keine Verkaufshistorie verfügbar" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "Verkaufspreisverlauf" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "Keine Variantendaten verfügbar" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "Variantenteil" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "Bestellung zum Duplizieren auswählen" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "Positionen duplizieren" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "Alle Positionen der ausgewählten Bestellung duplizieren" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "Zusätzliche Zeilen duplizieren" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "Zusätzliche Positionen der ausgewählten Bestellung duplizieren" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "Bestellung bearbeiten" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "Duplizierungsoptionen" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "Bestellung vervollständigen" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "Diese Bestellung als vollständig markieren?" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "Alle Einträge wurden erhalten" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "Diese Bestellung enthält Positionen, die nicht als empfangen markiert wurden." + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "Fertigstellen dieser Bestellung bedeutet, dass sie und ihre Positionen nicht länger bearbeitbar sind." + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "Bestellung abbrechen" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "Sind Sie sicher, dass Sie diese Bestellung abbrechen möchten?" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "Diese Bestellung kann nicht storniert werden" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "Bestellung aufgeben" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "Mindestens ein kaufbares Teil muss ausgewählt werden" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "Zu bestellende Menge" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "Neues Zuliefererteil" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "Neue Bestellung" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "Zur Bestellung hinzufügen" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "Keine passenden Lieferantenteile" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "Keine passenden Bestellungen" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "Positionen auswählen" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "Mindestens eine Position muss ausgewählt werden" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "Gelieferte Menge" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "Zu erhaltende Menge" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "Status" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "Losnummer hinzufügen" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "Seriennummern hinzufügen" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "Bestellnummer" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "Zu erhaltende Menge" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "Empfang der Teile bestätigen" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "Bestellpositionen erhalten" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "Bestellung überfällig" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Positionen" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "Alle ausgewählten Positionen werden gelöscht" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "Ausgewählte Positionen löschen?" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "Position duplizieren" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "Position bearbeiten" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "Position löschen" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "Position duplizieren" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "Position bearbeiten" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "Position löschen" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "Lagerartikel ausgewählt" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "Bericht-Vorlage auswählen" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "Test-Bericht-Vorlage auswählen" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "Lagerartikel müssen vor dem Berichtsdruck ausgewählt werden" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "Keine Berichte gefunden" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" -msgstr "Keine Berichtsvorlagen für ausgewählte Lagerartikel gefunden" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" +msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" -msgstr "Bauauftrag auswählen" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" +msgstr "Kunden hinzufügen" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" -msgstr "Bauauftrag muss vor dem Berichtsdruck ausgewählt werden" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" +msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" -msgstr "Keine Berichtvorlagen für ausgewählten Bauauftrag gefunden" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" +msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" -msgstr "Teil muss vor dem Berichtsdruck ausgewählt werden" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" +msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" -msgstr "Keine Berichtvorlagen für ausgewählte Teile gefunden" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" +msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" -msgstr "Bestellungen auswählen" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" +msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" -msgstr "Bestellung muss vor dem Berichtsdruck ausgewählt werden" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" +msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" -msgstr "Keine Berichtvorlagen für ausgewählte Bestellungen gefunden" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" +msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" -msgstr "Aufträge auswählen" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "Ungültiger Kunde" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" -msgstr "Auftrag muss vor dem Berichtsdruck ausgewählt werden" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "Keine passenden Positionen gefunden" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "Auftrag anlegen" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "Auftrag bearbeiten" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "Dieser Sendung wurden keine Artikel zugewiesen" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "Die folgenden Artikel werden verschickt" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "Sendung fertigstellen" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "Sendung bestätigen" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "Keine ausstehenden Sendungen gefunden" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "Keine Lagerartikel für offene Sendungen zugewiesen" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "Abgeschlossene Sendungen" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "Überspringen" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "Dieser Auftrag enthält Positionen, die noch nicht abgeschlossen sind." + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "Auftrag stornieren" + +#: templates/js/translated/sales_order.js:499 +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." + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "Sendung anlegen" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "Keine Aufträge gefunden" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "Sendung bearbeiten" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "Sendung fertigstellen" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "Sendung löschen" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "Sendung bearbeiten" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "Sendung löschen" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "Keine passenden Sendungen gefunden" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "Sendungsreferenz" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "Nicht versandt" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "Nachverfolgen" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "Rechnung" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "Sendung hinzufügen" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Bestandszuordnung bestätigen" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "Artikel zu Kundenauftrag zuweisen" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "Keine Allokationen für Verkaufsaufträge gefunden" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "Bestandszuordnung bearbeiten" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "Löschvorgang bestätigen" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "Bestands-Zuordnung löschen" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "an Kunde versand" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "Lagerstandort nicht angegeben" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "Seriennummern zuweisen" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "Bestand kaufen" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "Preis berechnen" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "Kann nicht gelöscht werden, da Artikel versandt wurden" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "Kann nicht gelöscht werden, da Artikel zugewiesen sind" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "Seriennummern zuweisen" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "Stückpreis aktualisieren" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "Keine Ergebnisse" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "Suchbegriff eingeben" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "Ergebnisse minimieren" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "Ergebnisse entfernen" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "Lagerartikel serialisieren" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "Lager-Serialisierung bestätigen" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "Lagerartikel-Ort bearbeiten" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "Neuer Lagerstandort" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "Sind Sie sicher, dass Sie diesen Lagerort löschen wollen?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "Zum übergeordneten Lagerbestand verschieben" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "Bestand-Lagerort löschen" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "Aktion für Lagerartikel in diesem Lagerort" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "Aktion für Unter-Lagerorte" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "Dieser Teil kann nicht serialisiert werden" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "Ausgangsmenge für diesen Lagerartikel eingeben" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "Lagerartikel dupliziert" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "Bestand duplizieren" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "Sind Sie sicher, dass Sie diesen Lagerartikel löschen wollen?" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "Lagerartikel löschen" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "Lagerartikel bearbeiten" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "Neuer Lagerartikel erstellt" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "Mehrere Lagerartikel erstellt" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "Seriennummer finden" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "Seriennummer eingeben" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "Eine Seriennummer eingeben" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "Keine passende Seriennummer" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "Mehrere Ergebnisse gefunden" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "Bestand Zuweisung bestätigen" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "Einem Kunden zuordnen" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "Achtung: Das Zusammenführen kann nicht rückgängig gemacht werden" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "Einige Informationen gehen verloren, wenn Artikel zusammengeführt werden" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "Lagerartikelverlauf wird für zusammengeführte Lagerartikel gelöscht" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "Lieferantenteil-Informationen werden für zusammengeführte Artikel gelöscht" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "Zusammenführung der Artikel bestätigen" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "Artikel zusammenführen" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "Bestand verschieben" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "Verschieben" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "Bestand zählen" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "Anzahl" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "Bestand entfernen" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "Entfernen" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "Bestand hinzufügen" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "Hinzufügen" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "Bestand löschen" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Menge von serialisiertem Bestand kann nicht bearbeitet werden" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "Bestandsanzahl angeben" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "Lagerartikel auswählen" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "Sie müssen mindestens einen Lagerartikel auswählen" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "Bestands-Anpassung bestätigen" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "ERFOLGREICH" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "FEHLGESCHLAGEN" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "KEIN ERGEBNIS" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "Test bestanden" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "Testergebnis hinzufügen" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "Keine Testergebnisse gefunden" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "Testdatum" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "Testergebnis bearbeiten" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "Testergebnis löschen" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "In Arbeit" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "In Lagerartikel installiert" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "Auftrag zugewiesen" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "Kein Lagerort gesetzt" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "Lagerartikel wird produziert" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "Lagerartikel wurde Auftrag zugewiesen" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "Lagerartikel wurde Kunden zugewiesen" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "Serialisierter Lagerartikel wurde zugewiesen" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "Lagerartikel wurde vollständig zugewiesen" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "Lagerartikel wurde teilweise zugewiesen" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "Lagerartikel in anderem Element verbaut" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "Lagerartikel ist abgelaufen" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "Lagerartikel läuft demnächst ab" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "Lagerartikel abgewiesen" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "Lagerartikel verloren" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "Lagerartikel zerstört" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "gelöscht" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "Zuliefererteil nicht angegeben" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "Bestandswert" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "Keine zur Anfrage passenden Lagerartikel" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "Status setzen" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "Status Code setzen" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "Status Code muss ausgewählt werden" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "Untergeordnete Lagerorte laden" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "Details" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "Artikelinformationen nicht verfügbar" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "Standort nicht mehr vorhanden" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "Bestellung existiert nicht mehr" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "Kunde existiert nicht mehr" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "Lagerartikel existiert nicht mehr" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "Hinzugefügt" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "Entfernt" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "Keine installierten Elemente" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "Lagerartikel entfernen" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "Zu deinstallierende Lagerartikel auswählen" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "Einen weiteren Lagerartikel in dieses Teil installiert" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Lagerartikel können nur installiert werden wenn folgende Kriterien erfüllt werden" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "Der Lagerartikel ist auf ein Teil verknüpft das in der Stückliste für diesen Lagerartikel ist" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "Dieser Lagerartikel ist aktuell vorhanden" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "Der Lagerbestand ist nicht bereits in einem anderen Bestand installiert" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "Der Lagerbestand wird entweder mit einem Batch-Code oder mit Seriennummer verfolgt" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "Teil zur Installation auswählen" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "Nachverfolgbares Teil" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "Baugruppe" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "Hat verfügbaren Bestand" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "überprüft" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "Bestand an Varianten zulassen" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "Hat Preis" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "Unter-Lagerorte einschließen" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "Lagerorte einschließen" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "Unterkategorien einschließen" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "Abonniert" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "Hat Seriennummer" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "Seriennummer >=" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "Seriennummer größer oder gleich" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "Seriennummer <=" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "Seriennummern kleiner oder gleich" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "Seriennummer" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Losnummer" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "Aktive Teile" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "Bestand aktiver Teile anzeigen" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "Teil ist eine Baugruppe" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "Ist zugeordnet" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "Teil wurde zugeordnet" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "Lagerartikel ist zur Verwendung verfügbar" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "Bestand in Unter-Lagerorten einschließen" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "Zeige aufgebrauchte Lagerartikel" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "Zeige Objekte welche im Lager sind" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "In Arbeit" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "Elemente, die in Produktion sind, anzeigen" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "Varianten einschließen" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "Lagerartikel für Teil-Varianten einschließen" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "Installiert" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "Lagerartikel, die in anderen Elementen verbaut sind, anzeigen" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "zeige zu Kunden zugeordnete Einträge" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "Status" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "Hat Batch-Code" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "Nachverfolgt" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "Lagerbestand wird entweder per Batch-Code oder Seriennummer verfolgt" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "Hat Einkaufspreis" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "Bestand mit Einkaufspreis anzeigen" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "Ablaufdatum vor" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "Ablaufdatum nach" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "Zeige abgelaufene Lagerartikel" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "Bestand, der bald ablaufen, anzeigen" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "Test bestanden" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "Installierte Elemente einschließen" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "Bauauftrags-Status" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "Mir zugewiesen" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "Bestellstatus" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "ausstehend" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "Mir zugewiesen" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "Nachverfolgbares Teil" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "Baugruppe" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "Hat verfügbaren Bestand" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "Bestand an Varianten zulassen" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "Hat Preis" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "Unter-Lagerorte einschließen" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "Lagerorte einschließen" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "Unterkategorien einschließen" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "Abonniert" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "Hat Seriennummer" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "Seriennummer >=" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "Seriennummer größer oder gleich" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "Seriennummer <=" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "Seriennummern kleiner oder gleich" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "Seriennummer" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "Losnummer" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "Aktive Teile" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "Bestand aktiver Teile anzeigen" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "Teil ist eine Baugruppe" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "Ist zugeordnet" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "Teil wurde zugeordnet" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "Lagerartikel ist zur Verwendung verfügbar" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "Bestand in Unter-Lagerorten einschließen" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "Zeige aufgebrauchte Lagerartikel" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "Zeige Objekte welche im Lager sind" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "In Arbeit" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "Elemente, die in Produktion sind, anzeigen" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "Varianten einschließen" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "Lagerartikel für Teil-Varianten einschließen" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "Installiert" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "Lagerartikel, die in anderen Elementen verbaut sind, anzeigen" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "zeige zu Kunden zugeordnete Einträge" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "Status" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "Hat Batch-Code" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "Nachverfolgt" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "Lagerbestand wird entweder per Batch-Code oder Seriennummer verfolgt" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "Hat Einkaufspreis" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "Bestand mit Einkaufspreis anzeigen" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "Ablaufdatum vor" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "Ablaufdatum nach" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "Zeige abgelaufene Lagerartikel" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "Bestand, der bald ablaufen, anzeigen" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "Test bestanden" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "Installierte Elemente einschließen" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "Bauauftrags-Status" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "Teile in Unterkategorien einschließen" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "Aktive Teile anzeigen" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "Verfügbarer Lagerbestand" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "Hat IPN" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "Teil hat Interne Teilenummer" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "Auf Lager" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "Käuflich" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "Hat Inventureinträge" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Kalender-Ansicht" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Listen-Ansicht" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "Baumansicht zeigen" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "Alle Zeilen erweitern" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "Alle Zeilen einklappen" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "Tabellendaten exportieren" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "Dateiformat wählen" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "Lade Daten" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "Zeilen pro Seite" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "Alle Zeilen anzeigen" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "zeige" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "bis" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "von" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "Zeilen" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Suche" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Keine passenden Ergebnisse gefunden" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "Zeige/Verstecke Pagination" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "umschalten" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Spalten" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "Alle" @@ -11261,19 +11975,19 @@ msgstr "Kaufen" msgid "Sell" msgstr "Verkaufen" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "Benachrichtigungen anzeigen" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "Neue Benachrichtigungen" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "Admin" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Ausloggen" @@ -11285,10 +11999,6 @@ msgstr "Speichern" msgid "Show all notifications and history" msgstr "Zeige alle Benachrichtigungen und Verlauf" -#: templates/price_data.html:7 -msgid "No data" -msgstr "Keine Daten" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR Daten nicht angegeben" @@ -11309,18 +12019,10 @@ msgstr "Suchergebnis anzeigen" msgid "Clear search" msgstr "Suche zurücksetzen" -#: templates/search.html:16 -msgid "Filter results" -msgstr "Ergebnisse filtern" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "Suche abbrechen" -#: templates/search.html:35 -msgid "No search results" -msgstr "Keine Treffer gefunden" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "Fehler bei der Anmeldung" @@ -11368,10 +12070,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" msgstr "Sie sind dabei, Ihr %(provider_name)s Konto zu verwenden, um sich bei\n" "%(site_name)s anzumelden.
Als letzten Schritt füllen Sie bitte folgendes Formular aus:" -#: templates/stats.html:9 -msgid "Server" -msgstr "Server" - #: templates/stats.html:13 msgid "Instance Name" msgstr "Instanzname" @@ -11436,55 +12134,51 @@ msgstr "E-Mail-Einstellungen nicht konfiguriert" msgid "Barcode Actions" msgstr "Barcode Aktionen" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Test-Berichte drucken" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "Bestands-Einstellungen " -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "Zu ausgewählten Lagerartikeln hinzufügen" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "Von ausgewählten Lagerartikeln entfernen" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "Inventur für gewählte Lagerartikel" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "Ausgewählte Lagerartikel verschieben" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "Ausgewählte Artikel zusammenführen" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "Bestand zusammenführen" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Ausgewählte Positionen bestellen" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "Status ändern" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "Status ändern" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "Ausgewählte Positionen löschen" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "Bestand löschen" @@ -11504,51 +12198,51 @@ msgstr "Benutzer" msgid "Select which users are assigned to this group" msgstr "Welche Benutzer gehören zu dieser Gruppe" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "Folgende Benutzer gehören zu mehreren Gruppen:" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "Persöhnliche Informationen" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Berechtigungen" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "wichtige Daten" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Gruppe" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Ansicht" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Ändern" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" diff --git a/InvenTree/locale/el/LC_MESSAGES/django.po b/InvenTree/locale/el/LC_MESSAGES/django.po index a9d66832b2..aa5a0d69e6 100644 --- a/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλματος στον πίνακα διαχείρισης" @@ -29,23 +33,26 @@ msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλμα msgid "Enter date" msgstr "Εισάγετε ημερομηνία" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Σημειώσεις" @@ -58,23 +65,23 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο msgid "Provided value does not match required pattern: " msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Εισάγετε κωδικό" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Εισάγετε νέο κωδικό πρόσβασης" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Επιβεβαιώστε τον κωδικό πρόσβασης" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Επιβεβαιώστε τον νέο κωδικό πρόσβασης" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Παλιός κωδικός πρόσβασης" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Μη έγκυρο εύρος ομάδας: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Μη έγκυρη ακολουθία ομάδας: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({s}) πρέπει να αντιστοιχεί στην ποσότητα ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Λανθασμένο μοτίβο" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Δώσατε λάθος μορφή κλειδιού" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Λείπει το απαραίτητο κλειδί" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Το πεδίο δεν μπορεί να είναι άδειο" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Η αναφορά πρέπει να ταιριάζει με το απαιτούμενο μοτίβο" @@ -194,566 +201,615 @@ msgstr "Η αναφορά πρέπει να ταιριάζει με το απα msgid "Reference number is too large" msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Το αρχείο λείπει" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Συνημμένο" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Επιλέξτε αρχείο για επισύναψη" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Σύνδεσμος" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Σχόλιο" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Σχόλιο αρχείου" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Χρήστης" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "ημερομηνία φόρτωσης" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Το όνομα αρχείου δεν μπορεί να είναι κενό" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Μη διαθέσιμη τοποθεσία συνημμένου" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Το όνομα αρχείου περιέχει μη έγκυρους χαρακτήρες '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Λείπει επέκταση ονόματος αρχείου" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Αρχείο με αυτό το όνομα υπάρχει ήδη" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Σφάλμα κατά τη μετονομασία" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Περιγραφή" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "γονέας" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Μονοπάτι" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Όνομα αρχείου" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Αρχείο Δεδομένων" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Επιλέξτε ένα αρχείο για ανέβασμα" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Μη υποστηριζόμενος τύπος αρχείου" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Το αρχείο είναι πολύ μεγάλο" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Δεν βρέθηκαν στήλες στο αρχείο" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Δεν βρέθηκαν γραμμές δεδομένων στο αρχείο" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Δεν παρασχέθηκαν σειρές δεδομένων" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Δεν δόθηκαν στήλες δεδομένων" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Λείπει απαιτούμενη στήλη: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Διπλή στήλη: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Τσέχικα" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Γερμανικά" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Ελληνικά" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Αγγλικά" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Ισπανικά" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Ισπανικά (Μεξικό)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Φαρσί / Περσικά" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Γαλλικά" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Εβραϊκά" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Ούγγρικα" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Ιταλικά" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Ιαπωνικά" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Κορεάτικα" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Dutch" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Νορβηγικά" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Πολωνικά" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Πορτογαλικά" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Πορτογαλικά (Βραζιλίας)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Ρωσικά" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Σουηδικά" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Ταϊλανδέζικα" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Τούρκικα" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Βιετναμέζικα" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Κινέζικα" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Ο έλεγχος εργασίας στο παρασκήνιο απέτυχε" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Δεν έχει ρυθμιστεί διεύθυνση ηλεκτρονικού ταχυδρομείου" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Ο έλεγχος συστήματος για το Inventree απέτυχε" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Σε εκκρεμότητα" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Τοποθετήθηκε" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Ολοκληρώθηκε" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Ακυρώθηκε" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Χάθηκε" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Επιστράφηκε" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Αποστάλθηκε" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "ΟΚ" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Απαιτείται προσοχή" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Κατεστραμμένο" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Καταστράφηκε" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Απορρίφθηκε" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "Σε Καραντίνα" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Καταχώρηση παλαιού αποθέματος" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Το αντικείμενο αποθεμάτων δημιουργήθηκε" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Έγινε συγχώνευση αποθεμάτων" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Εκχωρημένος σειριακός κωδικός" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Απόθεμα που μετρήθηκε" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Προστέθηκε απόθεμα χειροκίνητα" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Αφαιρέθηκε απόθεμα χειροκίνητα" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Η τοποθεσία τροποποιήθηκε" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Εγκαταστάθηκε στη συναρμολόγηση" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Αφαιρέθηκε από τη συναρμολόγηση" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Εγκαταστάθηκε αντικείμενο" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Αφαιρέθηκε αντικείμενο" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Έγινε διαχωρισμός από το γονεϊκό αρχείο" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Διαχωρίστηκε θυγατρικό στοιχείο" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Έγινε συγχώνευση αποθεμάτων" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Μετατράπηκε σε παραλλαγή" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Απεστάλη στον πελάτη" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Επιστράφηκε από πελάτη" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Δημιουργήθηκε η έξοδος παραγγελίας" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Η έξοδος της σειράς κατασκευής ολοκληρώθηκε" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Κατανάλωση με εντολή κατασκευής" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Λήφθηκε έναντι εντολής αγοράς" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Παραγωγή" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "Το IPN πρέπει να ταιριάζει με το μοτίβο regex {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Η μέση τιμή δεν πρέπει να είναι αρνητική" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Η μέση τιμή δεν πρέπει να υπερβαίνει το 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Μη έγκυρη τιμή για υπέρβαση" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Τροποποίηση πληροφοριών χρήστη" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Ορισμός Κωδικού Πρόσβασης" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Τα πεδία κωδικού πρόσβασης πρέπει να ταιριάζουν" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Δόθηκε λάθος κωδικός πρόσβασης" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Πληροφορίες συστήματος" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Σχετικά με το InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Αναφορά" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Σύντομη περιγραφή της κατασκευής" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατασκευή" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Εξάρτημα" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Υπεύθυνος για αυτή την παραγγελία κατασκευής" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Επιπλέον σημειώσεις" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Το επιλεγμένο αντικείμενο αποθέματος δεν βρέθηκε στο BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Κατασκευή" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Κατασκευή για εκχώρηση τμημάτων" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "Το IPN πρέπει να ταιριάζει με το μοτίβο regex {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 6f1f28d2bf..1c59910bfa 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: 2023-01-09 10:12+0000\n" +"POT-Creation-Date: 2023-04-17 14:52+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -30,52 +34,55 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:204 build/serializers.py:387 -#: build/templates/build/sidebar.html:21 company/models.py:529 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2935 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2061 stock/models.py:2169 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1212 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2435 templates/js/translated/order.js:2569 -#: templates/js/translated/order.js:3067 templates/js/translated/order.js:4004 -#: templates/js/translated/order.js:4385 templates/js/translated/part.js:882 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "" -#: InvenTree/format.py:142 +#: InvenTree/format.py:152 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" msgstr "" -#: InvenTree/format.py:152 +#: InvenTree/format.py:162 msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "" @@ -91,103 +98,103 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:227 InvenTree/forms.py:233 +#: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:239 +#: InvenTree/forms.py:242 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -195,1144 +202,1241 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2163 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:412 common/models.py:2408 company/models.py:129 -#: company/models.py:281 company/models.py:516 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3056 templates/js/translated/part.js:1886 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1852 -#: common/models.py:1853 common/models.py:2076 common/models.py:2077 -#: common/models.py:2338 common/models.py:2339 part/models.py:2943 -#: part/models.py:3029 part/models.py:3049 plugin/models.py:264 -#: plugin/models.py:265 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2062 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3204 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:345 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:982 templates/js/translated/part.js:1151 -#: templates/js/translated/part.js:2291 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "" -#: InvenTree/models.py:564 build/models.py:163 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:522 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3213 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:356 -#: templates/js/translated/bom.js:592 templates/js/translated/bom.js:895 -#: templates/js/translated/build.js:2596 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2030 -#: templates/js/translated/order.js:2267 templates/js/translated/order.js:2845 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1494 -#: templates/js/translated/part.js:1768 templates/js/translated/part.js:2327 -#: templates/js/translated/part.js:2402 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2336 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3549 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:266 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "" -#: InvenTree/serializers.py:301 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:323 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:324 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:345 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:372 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:375 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:498 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:501 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:578 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:587 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:607 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:643 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:644 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:645 +#: InvenTree/settings.py:710 msgid "German" msgstr "" -#: InvenTree/settings.py:646 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "" -#: InvenTree/settings.py:647 +#: InvenTree/settings.py:712 msgid "English" msgstr "" -#: InvenTree/settings.py:648 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:649 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:650 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:651 +#: InvenTree/settings.py:716 msgid "French" msgstr "" -#: InvenTree/settings.py:652 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:653 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:654 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "" -#: InvenTree/settings.py:655 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:656 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "" -#: InvenTree/settings.py:657 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:658 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:659 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "" -#: InvenTree/settings.py:660 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:661 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:662 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3644 templates/js/translated/order.js:3979 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:703 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "" -#: InvenTree/views.py:710 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:226 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:105 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:110 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:790 +#: templates/js/translated/build.js:791 msgid "Build Order" msgstr "" -#: build/models.py:111 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:154 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:155 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3459 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:729 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1853 templates/js/translated/order.js:2298 -#: templates/js/translated/order.js:2516 templates/js/translated/order.js:3841 -#: templates/js/translated/order.js:4332 templates/js/translated/pricing.js:119 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:166 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:174 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:175 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:180 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:684 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2802 part/models.py:2915 -#: part/models.py:2975 part/models.py:2990 part/models.py:3009 -#: part/models.py:3027 part/models.py:3126 part/models.py:3247 -#: part/models.py:3339 part/models.py:3424 part/models.py:3740 -#: part/serializers.py:894 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:591 -#: templates/js/translated/bom.js:728 templates/js/translated/bom.js:849 -#: templates/js/translated/build.js:1224 templates/js/translated/build.js:1721 -#: templates/js/translated/build.js:2204 templates/js/translated/build.js:2601 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:106 -#: templates/js/translated/order.js:1172 templates/js/translated/order.js:1676 -#: templates/js/translated/order.js:2252 templates/js/translated/order.js:3199 -#: templates/js/translated/order.js:3595 templates/js/translated/order.js:3825 -#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1551 -#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:102 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "" -#: build/models.py:188 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:193 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:197 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:823 -#: templates/js/translated/build.js:2192 templates/js/translated/order.js:3187 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:206 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:211 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:215 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:219 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:226 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:228 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:232 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:236 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:224 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1534 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:225 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2858 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:256 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:257 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:260 order/models.py:292 -#: templates/js/translated/build.js:2678 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:266 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2646 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:283 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:115 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2658 templates/js/translated/order.js:2064 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:284 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:289 build/templates/build/detail.html:101 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:532 +#: build/models.py:301 +msgid "Build Priority" +msgstr "" + +#: build/models.py:304 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:538 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:717 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:720 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:723 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1180 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1189 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1199 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1205 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1211 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1268 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1337 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2580 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1338 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1354 build/serializers.py:663 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 -#: templates/js/translated/build.js:800 templates/js/translated/build.js:805 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2763 -#: templates/js/translated/order.js:107 templates/js/translated/order.js:3200 -#: templates/js/translated/order.js:3502 templates/js/translated/order.js:3507 -#: templates/js/translated/order.js:3602 templates/js/translated/order.js:3694 -#: templates/js/translated/part.js:803 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: stock/templates/stock/item_base.html:195 +#: templates/js/translated/build.js:801 templates/js/translated/build.js:806 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1355 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1367 build/serializers.py:192 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1884 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2922 part/models.py:3440 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:730 -#: templates/js/translated/bom.js:913 templates/js/translated/build.js:480 -#: templates/js/translated/build.js:636 templates/js/translated/build.js:827 -#: templates/js/translated/build.js:1246 templates/js/translated/build.js:1747 -#: templates/js/translated/build.js:2207 -#: templates/js/translated/company.js:1159 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:123 templates/js/translated/order.js:1175 -#: templates/js/translated/order.js:2304 templates/js/translated/order.js:2522 -#: templates/js/translated/order.js:3201 templates/js/translated/order.js:3521 -#: templates/js/translated/order.js:3608 templates/js/translated/order.js:3700 -#: templates/js/translated/order.js:3847 templates/js/translated/order.js:4338 -#: templates/js/translated/part.js:805 templates/js/translated/part.js:876 -#: templates/js/translated/part.js:1349 templates/js/translated/part.js:2849 -#: templates/js/translated/pricing.js:114 -#: templates/js/translated/pricing.js:207 -#: templates/js/translated/pricing.js:255 -#: templates/js/translated/pricing.js:349 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1368 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1376 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1377 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:137 build/serializers.py:692 -#: templates/js/translated/build.js:1234 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:149 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:153 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:157 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:168 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:193 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:207 build/serializers.py:683 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:686 -#: part/serializers.py:1057 stock/models.py:574 stock/models.py:1312 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:214 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:217 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:231 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1545 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:232 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:245 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:281 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:330 build/serializers.py:399 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:369 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:812 -#: templates/js/translated/build.js:1759 templates/js/translated/order.js:1572 -#: templates/js/translated/order.js:3514 templates/js/translated/order.js:3619 -#: templates/js/translated/order.js:3627 templates/js/translated/order.js:3708 -#: templates/js/translated/part.js:186 templates/js/translated/part.js:804 -#: templates/js/translated/stock.js:619 templates/js/translated/stock.js:784 -#: templates/js/translated/stock.js:994 templates/js/translated/stock.js:1898 -#: templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:370 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:376 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2630 -#: templates/js/translated/order.js:1681 templates/js/translated/order.js:2034 -#: templates/js/translated/order.js:2850 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:382 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:452 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:459 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:524 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:540 templates/js/translated/build.js:264 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:545 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:556 templates/js/translated/build.js:268 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:565 templates/js/translated/build.js:252 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:595 build/serializers.py:640 part/models.py:3576 -#: part/models.py:3732 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:605 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:654 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:669 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:727 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:740 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:768 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:832 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:844 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:850 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1350,130 +1454,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:131 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2670 templates/js/translated/order.js:2051 -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2866 -#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1364 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:204 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 -#: build/templates/build/detail.html:67 build/templates/build/detail.html:142 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:67 build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:94 order/api.py:1256 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2812 templates/js/translated/pricing.js:637 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 -#: build/templates/build/detail.html:108 +#: build/templates/build/build_base.html:203 +#: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:252 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1486,8 +1653,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1682 templates/js/translated/order.js:2424 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1499,169 +1666,162 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1250 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" -#: build/templates/build/detail.html:126 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2638 +#: build/templates/build/detail.html:133 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" -#: build/templates/build/detail.html:137 +#: build/templates/build/detail.html:144 msgid "No target date set" msgstr "" -#: build/templates/build/detail.html:146 +#: build/templates/build/detail.html:153 msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:157 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" -#: build/templates/build/detail.html:172 +#: build/templates/build/detail.html:179 msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:2015 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" -#: build/templates/build/detail.html:177 +#: build/templates/build/detail.html:184 msgid "Unallocate Stock" msgstr "" -#: build/templates/build/detail.html:179 +#: build/templates/build/detail.html:186 msgid "Automatically allocate stock to build" msgstr "" -#: build/templates/build/detail.html:180 +#: build/templates/build/detail.html:187 msgid "Auto Allocate" msgstr "" -#: build/templates/build/detail.html:182 +#: build/templates/build/detail.html:189 msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:183 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:190 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" -#: build/templates/build/detail.html:186 +#: build/templates/build/detail.html:193 msgid "Order required parts" msgstr "" -#: build/templates/build/detail.html:187 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1215 +#: build/templates/build/detail.html:194 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:199 +#: build/templates/build/detail.html:206 msgid "Untracked stock has been fully allocated for this Build Order" msgstr "" -#: build/templates/build/detail.html:203 +#: build/templates/build/detail.html:210 msgid "Untracked stock has not been fully allocated for this Build Order" msgstr "" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:217 msgid "Allocate selected items" msgstr "" -#: build/templates/build/detail.html:220 +#: build/templates/build/detail.html:227 msgid "This Build Order does not have any associated untracked BOM items" msgstr "" -#: build/templates/build/detail.html:229 +#: build/templates/build/detail.html:236 msgid "Incomplete Build Outputs" msgstr "" -#: build/templates/build/detail.html:233 +#: build/templates/build/detail.html:240 msgid "Create new build output" msgstr "" -#: build/templates/build/detail.html:234 +#: build/templates/build/detail.html:241 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:248 +#: build/templates/build/detail.html:255 msgid "Output Actions" msgstr "" -#: build/templates/build/detail.html:253 +#: build/templates/build/detail.html:260 msgid "Complete selected build outputs" msgstr "" -#: build/templates/build/detail.html:254 +#: build/templates/build/detail.html:261 msgid "Complete outputs" msgstr "" -#: build/templates/build/detail.html:258 +#: build/templates/build/detail.html:265 msgid "Delete selected build outputs" msgstr "" -#: build/templates/build/detail.html:259 +#: build/templates/build/detail.html:266 msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:267 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:271 build/templates/build/detail.html:272 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:294 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:306 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:321 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:504 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:505 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1674,23 +1834,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1711,1222 +1872,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:472 +#: common/models.py:66 +msgid "Updated" +msgstr "" + +#: common/models.py:67 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:474 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:515 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:532 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:543 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:588 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:772 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:797 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:799 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:838 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:839 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:846 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:848 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:853 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:854 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:860 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:861 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:867 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:868 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:873 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:874 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:881 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:882 -msgid "Default currency" +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:888 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:889 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:895 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:896 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:907 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:908 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:913 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:914 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:920 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:921 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:930 -msgid "Automatic Backup" -msgstr "" - -#: common/models.py:931 -msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:937 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:938 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:948 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:949 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:959 -msgid "Delete Noficiations" -msgstr "" - -#: common/models.py:960 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:970 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:971 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:977 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:978 -msgid "Barcode input processing delay time" -msgstr "" - #: common/models.py:988 -msgid "Barcode Webcam Support" +msgid "Update Check Inverval" msgstr "" #: common/models.py:989 -msgid "Allow barcode scanning via webcam in browser" +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:995 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:996 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1000 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1001 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1007 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1008 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1014 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1015 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1021 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1022 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1028 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1029 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1035 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1036 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1042 part/admin.py:41 part/models.py:3249 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1043 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1049 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1595 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1050 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1056 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1057 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1063 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1064 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1070 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1071 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1077 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1078 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1084 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1085 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1091 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1092 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1098 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1099 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1105 -msgid "Create initial stock" -msgstr "" - -#: common/models.py:1106 -msgid "Create initial stock on part creation" -msgstr "" - -#: common/models.py:1112 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1113 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1120 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1121 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1126 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1127 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1137 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1138 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1144 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1145 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1151 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1152 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1158 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1159 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1165 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1166 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1167 common/models.py:1290 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1176 -msgid "Internal Prices" +#: common/models.py:999 +msgid "Automatic Backup" msgstr "" -#: common/models.py:1177 -msgid "Enable internal prices for parts" +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1183 -msgid "Internal Price Override" +#: common/models.py:1006 +msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1184 -msgid "If available, internal prices override price range calculations" +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1190 -msgid "Enable label printing" +#: common/models.py:1017 +msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1191 -msgid "Enable label printing from the web interface" +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1197 -msgid "Label Image DPI" +#: common/models.py:1028 +msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1198 -msgid "DPI resolution when generating image files to supply to label printing plugins" +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" msgstr "" #: common/models.py:1207 -msgid "Enable Reports" +msgid "Format to display the part name" msgstr "" -#: common/models.py:1208 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1214 templates/stats.html:25 -msgid "Debug Mode" +#: common/models.py:1214 +msgid "Part Category Default Icon" msgstr "" #: common/models.py:1215 -msgid "Generate reports in debug mode (HTML output)" +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" msgstr "" #: common/models.py:1221 -msgid "Page Size" +msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1222 -msgid "Default page size for PDF reports" +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" msgstr "" #: common/models.py:1232 -msgid "Enable Test Reports" +msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1233 -msgid "Enable generation of test reports" +#: common/models.py:1242 +msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1239 -msgid "Attach Test Reports" +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1240 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +#: common/models.py:1249 +msgid "Purchase History Override" msgstr "" -#: common/models.py:1246 -msgid "Globally Unique Serials" +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1247 -msgid "Serial numbers for stock items must be globally unique" +#: common/models.py:1256 +msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1253 -msgid "Autofill Serial Numbers" +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1254 -msgid "Autofill serial numbers in forms" +#: common/models.py:1263 +msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1260 -msgid "Delete Depleted Stock" -msgstr "" - -#: common/models.py:1261 -msgid "Determines default behaviour when a stock item is depleted" -msgstr "" - -#: common/models.py:1267 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1268 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1273 -msgid "Stock Expiry" +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" #: common/models.py:1274 -msgid "Enable stock expiry functionality" +msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1280 -msgid "Sell Expired Stock" +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" msgstr "" #: common/models.py:1281 -msgid "Allow sale of expired stock" +msgid "Active Variants Only" msgstr "" -#: common/models.py:1287 -msgid "Stock Stale Time" +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" msgstr "" #: common/models.py:1288 -msgid "Number of days stock items are considered stale before expiring" +msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1295 -msgid "Build Expired Stock" +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1296 -msgid "Allow building with expired stock" +#: common/models.py:1299 +msgid "Internal Prices" msgstr "" -#: common/models.py:1302 -msgid "Stock Ownership Control" +#: common/models.py:1300 +msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1303 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1306 +msgid "Internal Price Override" msgstr "" -#: common/models.py:1309 -msgid "Stock Location Default Icon" +#: common/models.py:1307 +msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1310 -msgid "Stock location default icon (empty means no icon)" +#: common/models.py:1313 +msgid "Enable label printing" msgstr "" -#: common/models.py:1315 -msgid "Build Order Reference Pattern" +#: common/models.py:1314 +msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1316 -msgid "Required pattern for generating Build Order reference field" +#: common/models.py:1320 +msgid "Label Image DPI" msgstr "" -#: common/models.py:1322 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1323 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1329 -msgid "Sales Order Default Shipment" +#: common/models.py:1321 +msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" #: common/models.py:1330 -msgid "Enable creation of default shipment with sales orders" +msgid "Enable Reports" msgstr "" -#: common/models.py:1336 -msgid "Edit Completed Sales Orders" +#: common/models.py:1331 +msgid "Enable generation of reports" msgstr "" -#: common/models.py:1337 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1337 templates/stats.html:25 +msgid "Debug Mode" msgstr "" -#: common/models.py:1343 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1338 +msgid "Generate reports in debug mode (HTML output)" msgstr "" #: common/models.py:1344 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Page Size" msgstr "" -#: common/models.py:1350 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1345 +msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1351 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1355 +msgid "Enable Test Reports" msgstr "" -#: common/models.py:1358 -msgid "Enable password forgot" +#: common/models.py:1356 +msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1359 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1362 +msgid "Attach Test Reports" msgstr "" -#: common/models.py:1365 -msgid "Enable registration" +#: common/models.py:1363 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1366 -msgid "Enable self-registration for users on the login pages" +#: common/models.py:1369 +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1372 -msgid "Enable SSO" +#: common/models.py:1370 +msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1373 -msgid "Enable SSO on the login pages" +#: common/models.py:1376 +msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1379 -msgid "Email required" +#: common/models.py:1377 +msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1380 -msgid "Require user to supply mail on signup" +#: common/models.py:1383 +msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1386 -msgid "Auto-fill SSO users" +#: common/models.py:1384 +msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1387 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1390 +msgid "Batch Code Template" msgstr "" -#: common/models.py:1393 -msgid "Mail twice" +#: common/models.py:1391 +msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1394 -msgid "On signup ask users twice for their mail" +#: common/models.py:1396 +msgid "Stock Expiry" msgstr "" -#: common/models.py:1400 -msgid "Password twice" +#: common/models.py:1397 +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1401 -msgid "On signup ask users twice for their password" +#: common/models.py:1403 +msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1407 -msgid "Allowed domains" +#: common/models.py:1404 +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1408 -msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +#: common/models.py:1410 +msgid "Stock Stale Time" msgstr "" -#: common/models.py:1414 -msgid "Group on signup" +#: common/models.py:1411 +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1415 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1418 +msgid "Build Expired Stock" msgstr "" -#: common/models.py:1421 -msgid "Enforce MFA" +#: common/models.py:1419 +msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1422 -msgid "Users must use multifactor security." +#: common/models.py:1425 +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1428 -msgid "Check plugins on startup" +#: common/models.py:1426 +msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1429 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1432 +msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1436 -msgid "Check plugin signatures" +#: common/models.py:1433 +msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1437 -msgid "Check and show signatures for plugins" +#: common/models.py:1438 +msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1444 -msgid "Enable URL integration" +#: common/models.py:1439 +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1445 -msgid "Enable plugins to add URL routes" +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" msgstr "" #: common/models.py:1452 -msgid "Enable navigation integration" +msgid "Return Order Reference Pattern" msgstr "" #: common/models.py:1453 -msgid "Enable plugins to integrate into navigation" +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" msgstr "" #: common/models.py:1460 -msgid "Enable app integration" +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1461 -msgid "Enable plugins to add apps" +#: common/models.py:1466 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1468 -msgid "Enable schedule integration" +#: common/models.py:1467 +msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1469 -msgid "Enable plugins to run scheduled tasks" +#: common/models.py:1473 +msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1476 -msgid "Enable event integration" +#: common/models.py:1474 +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1477 -msgid "Enable plugins to respond to internal events" +#: common/models.py:1480 +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1496 common/models.py:1845 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1481 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1518 -msgid "Show subscribed parts" +#: common/models.py:1487 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1519 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1488 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1525 -msgid "Show subscribed categories" +#: common/models.py:1494 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1526 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:1495 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1532 -msgid "Show latest parts" +#: common/models.py:1502 +msgid "Enable password forgot" msgstr "" -#: common/models.py:1533 -msgid "Show latest parts on the homepage" +#: common/models.py:1503 +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1539 -msgid "Recent Part Count" +#: common/models.py:1509 +msgid "Enable registration" msgstr "" -#: common/models.py:1540 -msgid "Number of recent parts to display on index page" +#: common/models.py:1510 +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1546 -msgid "Show unvalidated BOMs" +#: common/models.py:1516 +msgid "Enable SSO" msgstr "" -#: common/models.py:1547 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:1517 +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1553 -msgid "Show recent stock changes" +#: common/models.py:1523 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1554 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:1524 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1560 -msgid "Recent Stock Count" +#: common/models.py:1530 +msgid "Email required" msgstr "" -#: common/models.py:1561 -msgid "Number of recent stock items to display on index page" +#: common/models.py:1531 +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1567 -msgid "Show low stock" +#: common/models.py:1537 +msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1568 -msgid "Show low stock items on the homepage" +#: common/models.py:1538 +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1574 -msgid "Show depleted stock" +#: common/models.py:1544 +msgid "Mail twice" msgstr "" -#: common/models.py:1575 -msgid "Show depleted stock items on the homepage" +#: common/models.py:1545 +msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1581 -msgid "Show needed stock" +#: common/models.py:1551 +msgid "Password twice" msgstr "" -#: common/models.py:1582 -msgid "Show stock items needed for builds on the homepage" +#: common/models.py:1552 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:1558 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:1559 +msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +msgstr "" + +#: common/models.py:1565 +msgid "Group on signup" +msgstr "" + +#: common/models.py:1566 +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1572 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:1573 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1579 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1580 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:1587 +msgid "Check plugin signatures" msgstr "" #: common/models.py:1588 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:1589 -msgid "Show expired stock items on the homepage" +msgid "Check and show signatures for plugins" msgstr "" #: common/models.py:1595 -msgid "Show stale stock" +msgid "Enable URL integration" msgstr "" #: common/models.py:1596 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:1602 -msgid "Show pending builds" +msgid "Enable plugins to add URL routes" msgstr "" #: common/models.py:1603 -msgid "Show pending builds on the homepage" +msgid "Enable navigation integration" msgstr "" -#: common/models.py:1609 -msgid "Show overdue builds" +#: common/models.py:1604 +msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1610 -msgid "Show overdue builds on the homepage" +#: common/models.py:1611 +msgid "Enable app integration" msgstr "" -#: common/models.py:1616 -msgid "Show outstanding POs" +#: common/models.py:1612 +msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1617 -msgid "Show outstanding POs on the homepage" +#: common/models.py:1619 +msgid "Enable schedule integration" msgstr "" -#: common/models.py:1623 -msgid "Show overdue POs" +#: common/models.py:1620 +msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1624 -msgid "Show overdue POs on the homepage" +#: common/models.py:1627 +msgid "Enable event integration" msgstr "" -#: common/models.py:1630 -msgid "Show outstanding SOs" +#: common/models.py:1628 +msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1631 -msgid "Show outstanding SOs on the homepage" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1637 -msgid "Show overdue SOs" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1638 -msgid "Show overdue SOs on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1644 -msgid "Show News" -msgstr "" - -#: common/models.py:1645 -msgid "Show news on the homepage" -msgstr "" - -#: common/models.py:1651 -msgid "Inline label display" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:1773 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:1774 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:1780 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:1781 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:1787 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:1788 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:1794 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:1795 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:1801 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:1802 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:1808 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:1809 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:1815 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:1816 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:1822 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:1823 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:1829 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:1830 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:1836 +msgid "Show News" +msgstr "" + +#: common/models.py:1837 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:1843 +msgid "Inline label display" +msgstr "" + +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1658 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1659 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1665 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1666 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1672 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1673 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1679 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1680 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1686 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1687 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1693 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1694 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1700 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1701 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1707 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1708 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1714 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1715 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1721 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1722 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1728 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1729 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1735 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1736 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1742 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1743 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1749 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1750 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1756 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1757 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1763 +#: common/models.py:1962 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 msgid "Search Preview Results" msgstr "" -#: common/models.py:1764 +#: common/models.py:1977 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1770 +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1771 +#: common/models.py:1998 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1777 +#: common/models.py:2004 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1778 +#: common/models.py:2005 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1784 +#: common/models.py:2011 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1785 +#: common/models.py:2012 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1791 +#: common/models.py:2018 msgid "Date Format" msgstr "" -#: common/models.py:1792 +#: common/models.py:2019 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1806 part/templates/part/detail.html:41 +#: common/models.py:2033 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1807 +#: common/models.py:2034 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1813 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:822 +#: common/models.py:2040 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:1814 -msgid "Display part stocktake information" +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:1820 +#: common/models.py:2047 msgid "Table String Length" msgstr "" -#: common/models.py:1821 +#: common/models.py:2048 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1885 +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1892 company/serializers.py:393 order/models.py:975 -#: templates/js/translated/company.js:1164 templates/js/translated/part.js:1416 -#: templates/js/translated/pricing.js:354 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1893 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2053 common/models.py:2231 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2054 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2063 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2068 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2069 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2083 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2084 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2091 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2092 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2198 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2199 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2207 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2208 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2215 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2216 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2222 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2223 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2232 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2237 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2238 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2397 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2403 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2413 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2418 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2423 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2428 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2429 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -2939,7 +3266,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -2947,21 +3274,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -2999,7 +3330,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3025,6 +3356,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3033,6 +3365,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3044,11 +3379,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3076,234 +3411,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:399 -#: company/templates/company/company_base.html:107 part/models.py:2783 -#: part/serializers.py:156 part/serializers.py:184 stock/serializers.py:182 -#: templates/InvenTree/settings/pricing.html:64 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:487 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:581 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:491 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 templates/js/translated/part.js:241 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 templates/js/translated/part.js:242 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2286 -#: templates/js/translated/part.js:252 templates/js/translated/part.js:1338 -msgid "MPN" -msgstr "" - -#: company/models.py:276 templates/js/translated/part.js:253 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:510 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2156 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1160 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3209 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:350 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1166 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:455 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:497 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:252 part/bom.py:280 -#: stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2017 -#: templates/js/translated/part.js:222 templates/js/translated/part.js:1306 -#: templates/js/translated/pricing.js:231 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:498 templates/js/translated/part.js:223 -msgid "Select supplier" -msgstr "" - -#: company/models.py:503 company/templates/company/supplier_part.html:146 -#: part/bom.py:253 part/bom.py:281 templates/js/translated/company.js:303 -#: templates/js/translated/order.js:2273 templates/js/translated/part.js:233 -#: templates/js/translated/part.js:1324 templates/js/translated/pricing.js:243 -msgid "SKU" -msgstr "" - -#: company/models.py:504 templates/js/translated/part.js:234 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:511 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:517 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:523 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:528 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3462 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:532 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:532 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:534 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:534 -msgid "Part packaging" -msgstr "" - -#: company/models.py:537 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:826 -#: templates/js/translated/order.js:1253 templates/js/translated/order.js:1508 -#: templates/js/translated/order.js:2317 templates/js/translated/order.js:2334 -#: templates/js/translated/part.js:1356 templates/js/translated/part.js:1408 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:538 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:544 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:544 -msgid "Order multiple" -msgstr "" - -#: company/models.py:552 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1118 templates/js/translated/build.js:1883 -#: templates/js/translated/build.js:2770 templates/js/translated/part.js:626 -#: templates/js/translated/part.js:629 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:553 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:557 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:558 -msgid "Date of last update of availability data" -msgstr "" - -#: company/models.py:686 -msgid "last updated" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:689 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3316,7 +3647,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3344,14 +3675,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2827 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3364,7 +3698,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3373,123 +3707,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1732 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3500,18 +3864,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3526,36 +3890,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:38 -#: templates/js/translated/part.js:354 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:62 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3563,8 +3927,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:865 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3580,55 +3944,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1173 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3639,13 +3979,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3657,95 +3997,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:413 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1048 templates/js/translated/part.js:1649 -#: templates/js/translated/part.js:1805 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3763,7 +4076,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3771,519 +4084,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1254 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:619 templates/js/translated/order.js:1174 -#: templates/js/translated/order.js:2001 templates/js/translated/part.js:1283 -#: templates/js/translated/pricing.js:515 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1258 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2026 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2874 templates/js/translated/order.js:3036 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:419 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 -msgid "Target shipping date for this line item" +#: order/models.py:1069 +msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3492 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1679 templates/js/translated/order.js:2404 -#: templates/js/translated/part.js:1400 templates/js/translated/part.js:1432 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:800 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:665 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1535 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1546 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4302,102 +4700,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4448,10 +4867,12 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 -#: templates/js/translated/build.js:641 templates/js/translated/build.js:2088 -#: templates/js/translated/order.js:1122 templates/js/translated/order.js:1624 -#: templates/js/translated/order.js:3111 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4493,9 +4914,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4508,1029 +4931,1269 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:260 -#: templates/js/translated/order.js:728 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:291 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:232 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:397 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2840 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1224 -#: templates/js/translated/build.js:1989 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3343 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3347 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1034 templates/js/translated/part.js:1762 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1039 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:145 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1156 templates/js/translated/build.js:1935 -#: templates/js/translated/part.js:616 templates/js/translated/part.js:636 -#: templates/js/translated/part.js:1652 templates/js/translated/part.js:1830 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1947 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2777 -#: templates/js/translated/order.js:3951 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:619 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:1656 templates/js/translated/part.js:1837 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2867 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2873 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2346 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3351 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:91 -#: templates/js/translated/pricing.js:732 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:86 -#: templates/js/translated/pricing.js:740 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:539 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:559 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:577 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:663 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:821 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:822 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:828 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/api.py:1282 -msgid "Must be greater than zero" -msgstr "" - -#: part/api.py:1286 -msgid "Must be a valid quantity" -msgstr "" - -#: part/api.py:1301 -msgid "Specify location for initial part stock" -msgstr "" - -#: part/api.py:1332 part/api.py:1336 part/api.py:1351 part/api.py:1355 -msgid "This field is required" -msgstr "" - -#: part/bom.py:142 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" -#: part/bom.py:143 templates/email/low_stock_notification.html:17 +#: part/bom.py:176 templates/email/low_stock_notification.html:17 msgid "Total Stock" msgstr "" -#: part/bom.py:144 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3918 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3292 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3348 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3047 part/models.py:3291 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:230 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1784 templates/js/translated/part.js:2051 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 -msgid "Stock keeping units for this part" +#: part/models.py:979 +msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1901 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2784 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2789 templates/js/translated/part.js:806 -msgid "Updated" -msgstr "" - -#: part/models.py:2790 -msgid "Timestamp of last pricing update" -msgstr "" - -#: part/models.py:2807 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2808 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2813 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2814 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2819 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2820 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2825 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2826 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2831 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2832 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2837 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2838 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2843 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2844 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2849 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2850 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2855 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2856 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2861 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2862 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2868 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2874 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2879 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2880 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2885 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2886 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2891 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2892 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2897 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2898 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2916 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2923 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2927 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2043 templates/js/translated/part.js:887 -#: templates/js/translated/pricing.js:537 -#: templates/js/translated/pricing.js:658 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2928 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2936 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2944 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3094 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3111 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3131 templates/js/translated/part.js:2397 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3132 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3137 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3138 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3143 templates/js/translated/part.js:2406 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3144 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3149 templates/js/translated/part.js:2414 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3150 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3155 templates/js/translated/part.js:2421 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3156 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3197 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3205 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3209 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3214 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3247 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3249 part/models.py:3297 part/models.py:3298 -#: templates/InvenTree/settings/settings.html:225 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3251 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3251 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3302 templates/InvenTree/settings/settings.html:234 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3303 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3344 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3352 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3355 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3356 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3425 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3433 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3434 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3440 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3444 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:933 templates/js/translated/bom.js:986 -#: templates/js/translated/build.js:1868 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3445 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3450 templates/js/translated/bom.js:929 -#: templates/js/translated/bom.js:995 templates/js/translated/build.js:1859 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3451 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3455 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3456 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3459 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3462 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3464 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3464 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3468 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1012 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3469 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3474 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1004 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3475 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3561 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3570 part/models.py:3572 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3699 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3720 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3733 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3741 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3756 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3760 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3760 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3778 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3782 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:157 part/serializers.py:185 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:584 +#: part/serializers.py:307 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:307 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:317 part/templates/part/detail.html:296 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:317 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:332 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:332 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:338 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:338 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:348 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:359 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:365 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:372 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:380 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:392 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:400 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:621 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:626 templates/js/translated/part.js:68 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:626 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:631 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:631 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:585 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:895 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:904 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:909 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:910 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:915 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:921 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:922 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:962 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:963 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1051 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1080 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5543,7 +6206,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5551,108 +6214,92 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:405 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" -#: part/templates/part/category.html:352 -msgid "Create Part" -msgstr "" - -#: part/templates/part/category.html:355 -msgid "Create another part after this one" -msgstr "" - -#: part/templates/part/category.html:356 -msgid "Part created successfully" -msgstr "" - #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:407 -msgid "Duplicate Part" -msgstr "" - #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." @@ -5682,126 +6329,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:295 templates/js/translated/part.js:279 -msgid "Copy BOM" -msgstr "" - -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 -#: templates/js/translated/bom.js:1268 templates/js/translated/bom.js:1269 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 +#: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:796 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5836,13 +6481,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:998 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:999 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5864,7 +6509,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5874,7 +6519,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -5927,39 +6572,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:680 templates/js/translated/part.js:1026 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1166 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -5967,44 +6610,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1032 -#: templates/js/translated/part.js:1069 templates/js/translated/part.js:1875 -#: templates/js/translated/pricing.js:124 -#: templates/js/translated/pricing.js:762 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" -#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:78 -#: part/templates/part/prices.html:238 templates/js/translated/pricing.js:218 +#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6015,19 +6662,12 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" -#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:94 -#: part/templates/part/prices.html:262 +#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:87 +#: part/templates/part/prices.html:240 msgid "BOM Pricing" msgstr "" @@ -6059,11 +6699,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6079,74 +6735,75 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" -#: part/templates/part/prices.html:34 part/templates/part/prices.html:126 +#: part/templates/part/prices.html:34 part/templates/part/prices.html:116 msgid "Price Category" msgstr "" -#: part/templates/part/prices.html:35 part/templates/part/prices.html:127 +#: part/templates/part/prices.html:35 part/templates/part/prices.html:117 msgid "Minimum" msgstr "" -#: part/templates/part/prices.html:36 part/templates/part/prices.html:128 +#: part/templates/part/prices.html:36 part/templates/part/prices.html:118 msgid "Maximum" msgstr "" -#: part/templates/part/prices.html:49 part/templates/part/prices.html:185 +#: part/templates/part/prices.html:48 part/templates/part/prices.html:163 msgid "Internal Pricing" msgstr "" -#: part/templates/part/prices.html:64 part/templates/part/prices.html:217 +#: part/templates/part/prices.html:61 part/templates/part/prices.html:195 msgid "Purchase History" msgstr "" -#: part/templates/part/prices.html:103 part/templates/part/prices.html:286 +#: part/templates/part/prices.html:95 part/templates/part/prices.html:264 msgid "Variant Pricing" msgstr "" -#: part/templates/part/prices.html:111 +#: part/templates/part/prices.html:102 msgid "Overall Pricing" msgstr "" -#: part/templates/part/prices.html:155 part/templates/part/prices.html:338 +#: part/templates/part/prices.html:138 part/templates/part/prices.html:316 msgid "Sale History" msgstr "" -#: part/templates/part/prices.html:168 +#: part/templates/part/prices.html:146 msgid "Sale price data is not available for this part" msgstr "" -#: part/templates/part/prices.html:175 +#: part/templates/part/prices.html:153 msgid "Price range data is not available for this part." msgstr "" -#: part/templates/part/prices.html:186 part/templates/part/prices.html:218 -#: part/templates/part/prices.html:239 part/templates/part/prices.html:263 -#: part/templates/part/prices.html:287 part/templates/part/prices.html:310 -#: part/templates/part/prices.html:339 +#: part/templates/part/prices.html:164 part/templates/part/prices.html:196 +#: part/templates/part/prices.html:217 part/templates/part/prices.html:241 +#: part/templates/part/prices.html:265 part/templates/part/prices.html:288 +#: part/templates/part/prices.html:317 msgid "Jump to overview" msgstr "" -#: part/templates/part/prices.html:191 +#: part/templates/part/prices.html:169 msgid "Add Internal Price Break" msgstr "" -#: part/templates/part/prices.html:309 +#: part/templates/part/prices.html:287 msgid "Sale Pricing" msgstr "" -#: part/templates/part/prices.html:315 +#: part/templates/part/prices.html:293 msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:642 -#: templates/js/translated/part.js:1644 templates/js/translated/part.js:1646 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6196,45 +6853,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:210 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:262 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:517 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6263,6 +6915,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6274,15 +6927,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 -msgid "Inventree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "Provides native support for barcodes" +#: plugin/builtin/barcodes/inventree_barcode.py:28 +msgid "InvenTree Barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:29 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6357,19 +7010,23 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:158 +#: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 +msgid "Unvailable" +msgstr "" + +#: plugin/models.py:164 msgid "Sample plugin" msgstr "" -#: plugin/models.py:167 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:192 templates/InvenTree/settings/plugin_settings.html:10 +#: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" -#: plugin/models.py:257 +#: plugin/models.py:263 msgid "Method" msgstr "" @@ -6381,18 +7038,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:439 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:441 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:443 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6427,132 +7085,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6564,361 +7226,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:478 templates/js/translated/build.js:634 -#: templates/js/translated/build.js:1244 templates/js/translated/build.js:1745 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:121 templates/js/translated/order.js:3611 -#: templates/js/translated/order.js:3698 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2144 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2150 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:749 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:764 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:805 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:806 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:736 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:738 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:749 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:752 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:758 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:765 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:780 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:780 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:793 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:801 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:829 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1303 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1315 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1318 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1321 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1328 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1398 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1401 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1404 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1407 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1410 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1413 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1420 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1428 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1432 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1601 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2062 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2120 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2126 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2145 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2151 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2157 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2164 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2170 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -6926,128 +7653,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7072,7 +7795,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7084,15 +7807,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7105,7 +7828,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7114,15 +7837,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7131,11 +7854,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7175,125 +7898,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1768 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7305,47 +8036,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7355,11 +8090,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7368,11 +8098,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7392,10 +8126,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7412,7 +8142,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7539,7 +8270,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7555,8 +8286,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7594,7 +8325,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7612,7 +8342,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7630,7 +8360,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7641,20 +8372,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:40 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:58 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7663,7 +8402,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7698,7 +8437,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7711,10 +8450,6 @@ msgstr "" msgid "Sample" msgstr "" -#: templates/InvenTree/settings/plugin_details.html:47 -msgid "Unvailable" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7789,41 +8524,33 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:29 -msgid "Currency Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:35 -msgid "Update Now" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:44 -#: templates/InvenTree/settings/pricing.html:48 -msgid "Last Update" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:48 -msgid "Never" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:58 -msgid "Base Currency" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:63 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:65 -msgid "Rate" +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" -#: templates/InvenTree/settings/setting.html:37 +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7831,67 +8558,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:215 +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:237 -#: templates/InvenTree/settings/settings.html:362 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:238 -#: templates/InvenTree/settings/settings.html:363 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:278 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:323 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:335 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:339 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:400 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:414 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:422 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -7901,13 +8632,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -7915,29 +8644,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -7949,6 +8679,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -7956,8 +8690,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:33 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8107,6 +8841,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8172,8 +8910,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8242,7 +8980,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:649 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8301,7 +9039,7 @@ msgstr "" msgid "Reset My Password" msgstr "" -#: templates/account/password_reset.html:27 templates/account/signup.html:36 +#: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." msgstr "" @@ -8327,8 +9065,8 @@ msgstr "" msgid "Already have an account? Then please sign in." msgstr "" -#: templates/account/signup.html:27 -msgid "Or use a SSO-provider for signup" +#: templates/account/signup.html:28 +msgid "Use a SSO-provider for signup" msgstr "" #: templates/account/signup_closed.html:5 @@ -8410,11 +9148,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8422,32 +9160,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8469,7 +9208,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1630 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8483,214 +9222,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2726 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8706,10 +9437,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:659 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1217 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8735,243 +9466,251 @@ msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" #: templates/js/translated/bom.js:334 -msgid "Include Parameter Data" +msgid "Include Alternative Parts" msgstr "" #: templates/js/translated/bom.js:335 -msgid "Include part parameter data in exported BOM" +msgid "Include alternative parts in exported BOM" msgstr "" #: templates/js/translated/bom.js:340 -msgid "Include Stock Data" +msgid "Include Parameter Data" msgstr "" #: templates/js/translated/bom.js:341 -msgid "Include part stock data in exported BOM" +msgid "Include part parameter data in exported BOM" msgstr "" #: templates/js/translated/bom.js:346 -msgid "Include Manufacturer Data" +msgid "Include Stock Data" msgstr "" #: templates/js/translated/bom.js:347 -msgid "Include part manufacturer data in exported BOM" +msgid "Include part stock data in exported BOM" msgstr "" #: templates/js/translated/bom.js:352 -msgid "Include Supplier Data" +msgid "Include Manufacturer Data" msgstr "" #: templates/js/translated/bom.js:353 -msgid "Include part supplier data in exported BOM" +msgid "Include part manufacturer data in exported BOM" msgstr "" #: templates/js/translated/bom.js:358 -msgid "Include Pricing Data" +msgid "Include Supplier Data" msgstr "" #: templates/js/translated/bom.js:359 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:364 +msgid "Include Pricing Data" +msgstr "" + +#: templates/js/translated/bom.js:365 msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:550 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:604 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:615 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:660 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:661 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:723 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:739 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:868 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:878 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:882 templates/js/translated/build.js:1845 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:972 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1023 templates/js/translated/bom.js:1261 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1095 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1100 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1138 templates/js/translated/build.js:1917 -#: templates/js/translated/order.js:3932 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1921 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1923 -#: templates/js/translated/part.js:1061 templates/js/translated/part.js:1843 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/build.js:1925 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1172 templates/js/translated/build.js:1908 -#: templates/js/translated/build.js:1995 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1232 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1234 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1236 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1238 templates/js/translated/bom.js:1434 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1240 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1345 templates/js/translated/build.js:1689 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1613 templates/js/translated/build.js:1828 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1639 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:95 +#: templates/js/translated/build.js:96 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:138 +#: templates/js/translated/build.js:139 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:171 +#: templates/js/translated/build.js:172 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:180 +#: templates/js/translated/build.js:181 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:186 +#: templates/js/translated/build.js:187 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:193 +#: templates/js/translated/build.js:194 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:246 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:253 +#: templates/js/translated/build.js:254 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:258 +#: templates/js/translated/build.js:259 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:276 +#: templates/js/translated/build.js:277 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:317 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:319 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:329 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:329 +#: templates/js/translated/build.js:330 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:337 +#: templates/js/translated/build.js:338 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:338 +#: templates/js/translated/build.js:339 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:345 +#: templates/js/translated/build.js:346 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:376 +#: templates/js/translated/build.js:377 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:387 +#: templates/js/translated/build.js:388 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Complete build output" msgstr "" @@ -8979,577 +9718,594 @@ msgstr "" msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:465 templates/js/translated/build.js:621 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:520 templates/js/translated/build.js:676 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:542 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:689 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:779 +#: templates/js/translated/build.js:780 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:816 +#: templates/js/translated/build.js:817 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1204 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1275 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1282 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1304 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1309 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1785 templates/js/translated/build.js:2781 -#: templates/js/translated/order.js:3646 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1787 templates/js/translated/build.js:2782 -#: templates/js/translated/order.js:3647 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1805 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1815 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1877 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1913 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2003 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2007 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2010 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2049 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1045 templates/js/translated/order.js:3173 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2099 templates/js/translated/order.js:3122 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2178 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3188 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2221 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2232 templates/js/translated/order.js:3285 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2304 templates/js/translated/order.js:3362 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2401 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2404 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2433 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2574 templates/js/translated/part.js:1737 -#: templates/js/translated/part.js:2284 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2588 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2616 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2652 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2758 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:576 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:862 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:664 -#: templates/js/translated/part.js:1018 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:668 -#: templates/js/translated/part.js:1022 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1141 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1183 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1184 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1201 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1213 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1056 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1057 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1112 -#: templates/js/translated/pricing.js:423 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1128 -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1145 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1174 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1180 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1181 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:675 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:776 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1269 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1706 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1922 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2175 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2631 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2631 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2643 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:28 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:434 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:324 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9558,795 +10314,384 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:97 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:102 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:142 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:162 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:218 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:222 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:254 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:284 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:301 templates/js/translated/order.js:413 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:307 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:312 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:313 templates/js/translated/order.js:427 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:336 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:341 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:347 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:370 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:375 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:426 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:450 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:455 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:509 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:534 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:559 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:620 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:627 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:628 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:635 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:636 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:653 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:670 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:995 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1046 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1071 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1080 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1098 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1131 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1271 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1290 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1467 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1468 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1488 templates/js/translated/order.js:1601 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1494 templates/js/translated/order.js:1612 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1509 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1520 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1584 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1677 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1678 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1680 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1703 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1704 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:1982 templates/js/translated/part.js:1254 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2009 templates/js/translated/order.js:2817 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2059 templates/js/translated/order.js:2882 -#: templates/js/translated/order.js:3023 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2162 templates/js/translated/order.js:4083 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2179 templates/js/translated/order.js:4105 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2192 templates/js/translated/order.js:4116 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2235 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2262 templates/js/translated/order.js:3835 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2317 templates/js/translated/part.js:1356 -#: templates/js/translated/part.js:1408 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2348 templates/js/translated/order.js:2535 -#: templates/js/translated/order.js:3860 templates/js/translated/order.js:4351 -#: templates/js/translated/pricing.js:260 -#: templates/js/translated/pricing.js:329 -#: templates/js/translated/pricing.js:545 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2358 templates/js/translated/order.js:2545 -#: templates/js/translated/order.js:3870 templates/js/translated/order.js:4361 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2388 templates/js/translated/order.js:3900 -#: templates/js/translated/part.js:1392 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2447 templates/js/translated/part.js:1437 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2451 templates/js/translated/order.js:4037 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2452 templates/js/translated/order.js:4038 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2453 templates/js/translated/order.js:4042 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2582 templates/js/translated/order.js:4397 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2583 templates/js/translated/order.js:4398 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2584 templates/js/translated/order.js:4399 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4428 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2635 templates/js/translated/order.js:4449 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2646 templates/js/translated/order.js:4460 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2657 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2768 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2831 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2929 -msgid "Edit shipment" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" -#: templates/js/translated/order.js:2932 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2937 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2957 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:2974 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3008 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3018 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3042 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3052 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3221 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3272 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3273 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3481 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3560 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3577 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3578 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3623 templates/js/translated/order.js:3712 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3631 templates/js/translated/order.js:3721 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4021 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4027 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4034 templates/js/translated/order.js:4232 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4046 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4131 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4240 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4254 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4471 -msgid "No matching lines" -msgstr "" - -#: templates/js/translated/part.js:55 +#: templates/js/translated/part.js:56 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:59 +#: templates/js/translated/part.js:60 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:63 +#: templates/js/translated/part.js:64 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:67 -msgid "Supplier Options" -msgstr "" - -#: templates/js/translated/part.js:81 +#: templates/js/translated/part.js:87 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:171 -msgid "Create Initial Stock" -msgstr "" - -#: templates/js/translated/part.js:172 -msgid "Create an initial stock item for this part" -msgstr "" - -#: templates/js/translated/part.js:179 -msgid "Initial Stock Quantity" -msgstr "" - -#: templates/js/translated/part.js:180 -msgid "Specify initial stock quantity for this part" -msgstr "" - -#: templates/js/translated/part.js:187 -msgid "Select destination stock location" -msgstr "" - -#: templates/js/translated/part.js:205 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:206 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:214 -msgid "Add Supplier Data" -msgstr "" - -#: templates/js/translated/part.js:215 -msgid "Create initial supplier data for this part" -msgstr "" - -#: templates/js/translated/part.js:271 -msgid "Copy Image" -msgstr "" - -#: templates/js/translated/part.js:272 -msgid "Copy image from original part" -msgstr "" - -#: templates/js/translated/part.js:280 -msgid "Copy bill of materials from original part" -msgstr "" - -#: templates/js/translated/part.js:287 -msgid "Copy Parameters" -msgstr "" - -#: templates/js/translated/part.js:288 -msgid "Copy parameter data from original part" -msgstr "" - -#: templates/js/translated/part.js:301 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:316 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:332 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:345 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:350 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:363 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:368 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:397 +#: templates/js/translated/part.js:351 +msgid "Create Part" +msgstr "" + +#: templates/js/translated/part.js:353 +msgid "Create another part after this one" +msgstr "" + +#: templates/js/translated/part.js:354 +msgid "Part created successfully" +msgstr "" + +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:399 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:410 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:479 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:480 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:481 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:488 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:524 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:526 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:531 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:588 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1825 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:656 templates/js/translated/part.js:1010 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:660 templates/js/translated/part.js:1014 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:672 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:676 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:761 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:769 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:770 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:871 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:910 templates/js/translated/part.js:933 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:914 templates/js/translated/part.js:945 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1086 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1507 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1531 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1598 templates/js/translated/part.js:1936 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1792 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1823 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1847 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1851 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1960 templates/js/translated/part.js:2203 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2042 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2047 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2052 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2065 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2223 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2303 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2319 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2434 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2435 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2441 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2463 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2477 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2558 templates/js/translated/part.js:2559 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2561 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2567 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2617 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2623 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2719 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2735 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10354,831 +10699,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:54 +#: templates/js/translated/pricing.js:141 +msgid "Error fetching currency data" +msgstr "" + +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:196 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:305 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:361 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:362 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:480 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:502 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:602 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:624 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:713 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:753 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11190,19 +11976,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11214,10 +12000,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11238,18 +12020,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11297,10 +12071,6 @@ msgid "" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11365,55 +12135,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11433,50 +12199,50 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 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 a93542e3c4..9d60c55e24 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,50 +2,57 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-07 09:21\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" -"Language-Team: Spanish, Mexico\n" -"Language: es_MX\n" +"Language-Team: Spanish\n" +"Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" -"X-Crowdin-Language: es-MX\n" +"X-Crowdin-Language: es-ES\n" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" -msgstr "endpoint API no encontrado" +msgstr "\"API Endpoint\" no encontrado" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" -msgstr "Detalles del error pueden encontrarse en el panel de administración" +msgstr "Los detalles del error pueden encontrarse en el panel de administración" #: InvenTree/fields.py:129 msgid "Enter date" -msgstr "Ingrese la fecha" +msgstr "Seleccionar una fecha" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Notas" @@ -58,33 +65,33 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/forms.py:135 -msgid "Enter password" -msgstr "Introduzca contraseña" - -#: InvenTree/forms.py:136 -msgid "Enter new password" -msgstr "Ingrese su nueva contraseña" - #: InvenTree/forms.py:145 -msgid "Confirm password" -msgstr "Confirmar la contraseña" +msgid "Enter password" +msgstr "Introduce la contraseña" #: InvenTree/forms.py:146 -msgid "Confirm new password" -msgstr "Confirmar contraseña nueva" +msgid "Enter new password" +msgstr "Introduce una nueva contraseña" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:155 +msgid "Confirm password" +msgstr "Confirma la contraseña" + +#: InvenTree/forms.py:156 +msgid "Confirm new password" +msgstr "Confirma la nueva contraseña" + +#: InvenTree/forms.py:160 msgid "Old password" -msgstr "Contraseña vieja" +msgstr "Contraseña anterior" #: InvenTree/forms.py:179 msgid "Email (again)" -msgstr "Email (de nuevo)" +msgstr "Correo electrónico (de nuevo)" #: InvenTree/forms.py:183 msgid "Email address confirmation" -msgstr "Confirmación de dirección de email" +msgstr "Confirmación de correo electrónico" #: InvenTree/forms.py:204 msgid "You must type the same email each time." @@ -92,1259 +99,1349 @@ msgstr "Debe escribir el mismo correo electrónico cada vez." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "La dirección de correo electrónico principal proporcionada no es válida." +msgstr "" #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "El dominio de correo electrónico proporcionado no está aprobado." +msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "El servidor respondió con un valor de longitud de contenido inválido" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" -msgstr "Serie duplicada" +msgstr "Número de serie duplicado" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Rango de grupo no válido: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "El rango del grupo {g} supera la cantidad permitida ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Secuencia de grupo no válida: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" -msgstr "Numeros de serie no encontrados" +msgstr "No se ha encontrado ningún número de serie" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" -msgstr "Número único de número de serie ({s}) debe coincidir con la cantidad ({q})" +msgstr "El número de números de serie únicos ({s}) debe coincidir con la cantidad ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Patrón con formato incorrecto" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Clave de formato especificado desconocida" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" -msgstr "Falta la clave de formato necesaria" +msgstr "Falta la clave de formato requerida" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" -msgstr "El campo de servidor no puede estar vacío" +msgstr "El campo de referencia no puede estar vacío" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" -msgstr "La referencia debe coincidir con la expresión regular {pattern}" +msgstr "La referencia debe coincidir con el patrón requerido" #: InvenTree/models.py:306 msgid "Reference number is too large" msgstr "El número de referencia es demasiado grande" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Archivo no encontrado" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Falta enlace externo" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Archivo adjunto" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Enlace" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Comentario" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Comentario del archivo" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Usuario" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "fecha de subida" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "El nombre del archivo no debe estar vacío" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Directorio de archivos adjuntos no válido" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" -msgstr "El nombre del archivo contiene el carácter ilegal '{c}'" +msgstr "El nombre del archivo contiene el carácter no válido '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Falta el nombre de extensión del archivo" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Ya existe un archivo adjunto con este nombre" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Error al cambiar el nombre del archivo" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Descripción" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" -msgstr "padre" +msgstr "superior" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Ruta" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" -msgstr "Datos de código de barras" +msgstr "Hash del Código de barras" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" -msgstr "Datos de código de barras de terceros" +msgstr "Datos del código de barras de terceros" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Hash del Código de barras" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" -msgstr "Hash único de datos de código de barras" +msgstr "Hash único de los datos de código de barras" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" -msgstr "Error de Servidor" +msgstr "Error del servidor" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." -msgstr "Se ha registrado un error por el servidor." +msgstr "Un error ha sido registrado por el servidor." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Debe ser un numero valido" -#: InvenTree/serializers.py:294 -msgid "Filename" -msgstr "Nombre de Archivo" +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Moneda" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 +msgid "Filename" +msgstr "Nombre de archivo" + +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Archivo de datos" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" -msgstr "Seleccione el archivo para subir" +msgstr "Archivo seleccionado para subir" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Tipo de archivo no soportado" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "El archivo es demasiado grande" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" -msgstr "No hay columnas en el archivo" +msgstr "No se encontraron columnas en el archivo" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "No hay filas de datos en el archivo" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "No se proporcionaron filas de datos" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" -msgstr "No hay columnas de datos proporcionadas" +msgstr "No se proporcionaron columnas de datos" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Falta la columna requerida: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Columna duplicada: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" -msgstr "URL de imagen remota" +msgstr "URL del archivo de imagen remoto" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Checo" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Danés" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Alemán" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Griego" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Inglés" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Español" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Español (México)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" -msgstr "Farsi / Persa" +msgstr "Farsi / persa" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francés" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebreo" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Húngaro" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japonés" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Holandés" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Noruego" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polaco" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugués" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" -msgstr "Portugués (Brasileño)" +msgstr "Português (Brasil)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" -msgstr "Ruso" +msgstr "Ruso (Русский)" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Esloveno" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" -msgstr "Sueco" +msgstr "Svenska" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Tailandés" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" -msgstr "Turco" +msgstr "Türkçe" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" -msgstr "Chino" +msgstr "Chino (中文)" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" -msgstr "Falló la comprobación en segundo plano del worker" +msgstr "Falló la comprobación en segundo plano" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" -msgstr "No se ha configurado el backend de correo" +msgstr "No se ha configurado un servidor de correo electrónico" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Las comprobaciones de estado del sistema InvenTree fallaron" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Pendiente" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Colocado" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" -msgstr "Terminado" +msgstr "Completado" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Cancelado" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" -msgstr "Perdida" +msgstr "Perdido" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Devuelto" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Enviado" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" -msgstr "Atención necesaria" +msgstr "Atención requerida" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Dañado" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Destruido" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Rechazado" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" -msgstr "En cuarentena" +msgstr "En Cuarentena" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Entrada antigua de rastreo de stock" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Artículo de stock creado" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" -msgstr "Elemento de stock editado" +msgstr "Artículo de stock editado" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Número de serie asignado" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Stock contado" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Stock añadido manualmente" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Stock eliminado manualmente" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Ubicación cambiada" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" -msgstr "Instalado en el ensamblaje" +msgstr "Instalado en el ensamblado" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" -msgstr "Retirado del ensamblaje" +msgstr "Eliminado del ensamblado" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Artículo del componente instalado" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" -msgstr "Elemento de componente eliminado" +msgstr "Artículo de componente eliminado" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Separar del elemento principal" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" -msgstr "Dividir elemento secundario" +msgstr "Separar elemento secundario" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Artículos de stock combinados" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" -msgstr "Convertir a variante" +msgstr "Convertido a variante" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" -msgstr "Enviar al cliente" +msgstr "Enviado al cliente" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" -msgstr "Devolución del cliente" +msgstr "Devuelto por el cliente" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" -msgstr "Trabajo de ensamblaje creado" +msgstr "Orden de ensamblado creada" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" -msgstr "Construir orden de salida completado" +msgstr "Orden de ensamblado completada" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" -msgstr "Consumido por orden de construcción" +msgstr "Consumido por orden de ensamblado" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Recibido contra la orden de compra" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Producción" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "El IPN debe coincidir con la expresión regular {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "El valor excedente no debe ser negativo" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "El excedente no debe superar el 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Valor no válido para sobrecarga" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Editar datos del usuario" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Configurar Contraseña" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Los campos de contraseña deben coincidir" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Contraseña incorrecta proporcionada" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Información del sistema" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Acerca de InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" -msgstr "La compilación debe cancelarse antes de poder ser eliminada" +msgstr "La construcción debe cancelarse antes de que pueda ser eliminada" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Opción no válida para la construcción padre" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:791 msgid "Build Order" -msgstr "Construir órden" +msgstr "Petición de Ensamblado" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" -msgstr "Construir órdenes" +msgstr "Peticiones de Ensamblado" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Opción no válida para la construcción padre" + +#: build/models.py:157 msgid "Build Order Reference" -msgstr "Número de orden de construcción o armado" +msgstr "Referencia de Orden de Ensamblado" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referencia" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Breve descripción de la construcción o armado" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" -msgstr "Orden de Construcción o Armado a la que se asigna" +msgstr "Construcción de orden a la que se asigna esta versión" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" -msgstr "Parte" +msgstr "Pieza" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" -msgstr "Referencia de orden de venta" +msgstr "Referencia de Pedido de Entrega" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" -msgstr "Orden de Venta a la que se asigna" +msgstr "Pedido de Entrega a la que este ensamblaje se asigna" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" -msgstr "Seleccione la ubicación donde se almacenarán los elementos completados" +msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" -msgstr "Número de objetos existentes a construir" - -#: build/models.py:227 -msgid "Completed items" -msgstr "Elementos completados" +msgstr "Número de artículos de stock a ensamblar" #: build/models.py:229 +msgid "Completed items" +msgstr "Artículos completados" + +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" -msgstr "Código de estado de construcción" +msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" -msgstr "Numero de lote" +msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" -msgstr "Número de lote de este producto final" +msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." +msgstr "Fecha límite para la finalización del ensamblado. El ensamblado estará vencido después de esta fecha." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" -msgstr "Fecha de finalización" +msgstr "Fecha de Finalización" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "terminado por" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Responsable" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Usuario responsable de esta orden" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Usuario o grupo responsable de esta orden de fabricación" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" -msgstr "Link externo" +msgstr "Enlaces Externo" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" -msgstr "Notas adicionales de construcción" +msgstr "Notas adicionales de fabricación" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" -msgstr "Prioridad de construcción" +msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" -msgstr "Prioridad de esta orden de construcción" +msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "El pedido {build} ha sido procesado" +msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" -msgstr "Pedido #[order] ha sido procesado" +msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" -msgstr "No se ha especificado salida de construcción" +msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" -msgstr "La construcción de la salida ya está completa" +msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" -msgstr "La salida de la construcción no coincide con el orden de construcción" +msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" +msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" +msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" -msgstr "Artículo de stock sobreasignado" +msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" -msgstr "Artículo de stock seleccionado no encontrado en BOM" +msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" -msgstr "Construcción o Armado" +msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" -msgstr "Armar para asignar partes" +msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" -msgstr "Artículo de stock" +msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" -msgstr "Producto original de stock" +msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Instalar en" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" -msgstr "Resultado de la construcción o armado" +msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" -msgstr "La salida de construcción no coincide con la construcción padre" +msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" -msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" +msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" -msgstr "Esta salida de construcción ya ha sido completada" +msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" -msgstr "Esta salida de construcción no está completamente asignada" +msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" -msgstr "Ingrese la cantidad para la producción de la construcción" +msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" -msgstr "La cantidad debe ser mayor que cero" +msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" -msgstr "Cantidad entera requerida para partes rastreables" +msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" +msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" -msgstr "Asignar automáticamente los elementos requeridos con números de serie coincidentes" +msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" -msgstr "Los siguientes números seriales ya existen o son inválidos" +msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" -msgstr "Debe proporcionarse una lista de salidas de construcción" +msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" -msgstr "Unicación" +msgstr "Ubicación" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" -msgstr "Ubicación para las salidas de construcción completadas" +msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Estado" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" -msgstr "Aceptar Asignación Incompleta" +msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Completar salidas si el inventario no se ha asignado completamente" +msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" -msgstr "Quitar inventario asignado" +msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" -msgstr "Eliminar salidas incompletas" +msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" -msgstr "Stock sobreasignado" +msgstr "Existencias sobreasignadas" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "Cómo quieres manejar los artículos extra de stock asignados a la orden de ensamblado" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" -msgstr "" +msgstr "Algunos artículos de stock han sido sobreasignados" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" -msgstr "Aceptar incompleto" +msgstr "Acepta incompleto" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" -msgstr "La cantidad de construcción requerida aún no se ha completado" +msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" -msgstr "El orden de construcción tiene salidas incompletas" +msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" -msgstr "Item de Lista de Materiales" +msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" -msgstr "Resultado de la construcción o armado" +msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" -msgstr "La salida de la construcción debe apuntar a la misma construcción" +msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" -msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" +msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "Cantidad disponible ({q}) excedida" +msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" -msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" +msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" +msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" -msgstr "Debe proporcionarse la adjudicación de artículos" - -#: build/serializers.py:825 -msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:829 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "Ubicación de stock donde las piezas deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" + +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" -msgstr "Excluir artículos de stock de esta ubicación seleccionada" +msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" -msgstr "Stock intercambiable" +msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" -msgstr "Sustituir stock" +msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" -msgstr "Elementos opcionales" +msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" #: build/tasks.py:100 msgid "Stock required for build order" -msgstr "Stock requerido para la orden de construcción" +msgstr "" #: build/tasks.py:118 msgid "Overdue Build Order" @@ -1356,201 +1453,261 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" -msgstr "Imprimir acciones" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "Acciones de impresión" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" -msgstr "Imprimir informe de orden de construcción" +msgstr "Imprimir informe de orden de fabricación" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" -msgstr "Acciones de construcción o armado" +msgstr "Acciones de fabricación" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" -msgstr "Editar construcción o armado" +msgstr "Editar fabricación" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" -msgstr "Cancelar construcción o armado" +msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" -msgstr "Eliminar construcción o armado" +msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" -msgstr "Completar construcción" +msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" -msgstr "Descripción de Construcción" +msgstr "Descripción de Ensamblado" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "No se han creado salidas para esta orden de construcción" - -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Este pedido de construcción está asignado a la orden de venta %(link)s" - -#: build/templates/build/build_base.html:111 -#, python-format -msgid "This Build Order is a child of Build Order %(link)s" -msgstr "Esta orden de construcción es hijo de la orden de construcción %(link)s" - -#: build/templates/build/build_base.html:118 -msgid "Build Order is ready to mark as completed" -msgstr "Orden de construcción está lista para marcar como completada" +msgstr "" #: build/templates/build/build_base.html:123 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:130 +msgid "Build Order is ready to mark as completed" +msgstr "" + +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "La orden de construcción no se puede completar ya que existen salidas pendientes" +msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" -msgstr "La cantidad de construcción requerida aún no se ha completado" +msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" -msgstr "Stock no ha sido asignado completamente a este pedido de construcción" +msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" -msgstr "Fecha objetivo" +msgstr "Fecha Límite" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" -msgstr "Esta construcción vence el %(target)s" +msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Vencido" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" -msgstr "Completados" +msgstr "Completado" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" -msgstr "Orden de Venta" +msgstr "Pedido de Entrega" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" -msgstr "Emitido por" +msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" -msgstr "Prioridad" +msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" -msgstr "Eliminar Orden de Trabajo" +msgstr "" + +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" #: build/templates/build/detail.html:15 msgid "Build Details" -msgstr "Detalles de Trabajo" +msgstr "" #: build/templates/build/detail.html:38 msgid "Stock Source" -msgstr "Fuente de stock" +msgstr "" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "Las existencias se pueden tomar desde cualquier ubicación disponible." +msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" -msgstr "Destinación" +msgstr "" #: build/templates/build/detail.html:56 msgid "Destination location not specified" -msgstr "Se requiere ubicación de destino" +msgstr "" #: build/templates/build/detail.html:73 msgid "Allocated Parts" -msgstr "Partes asignadas" +msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" -msgstr "Lote" +msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Creado" #: build/templates/build/detail.html:144 msgid "No target date set" -msgstr "Sin fecha objetivo" +msgstr "Sin fecha límite" #: build/templates/build/detail.html:153 msgid "Build not complete" -msgstr "Trabajo incompleto" +msgstr "" #: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" -msgstr "Órdenes de Trabajo herederas" +msgstr "" #: build/templates/build/detail.html:179 msgid "Allocate Stock to Build" -msgstr "Asignar Stock a Trabajo" +msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" -msgstr "Desasignar stock" +msgstr "" #: build/templates/build/detail.html:184 msgid "Unallocate Stock" -msgstr "Desasignar stock" +msgstr "" #: build/templates/build/detail.html:186 msgid "Automatically allocate stock to build" @@ -1558,7 +1715,7 @@ msgstr "" #: build/templates/build/detail.html:187 msgid "Auto Allocate" -msgstr "Auto asignar" +msgstr "" #: build/templates/build/detail.html:189 msgid "Manually allocate stock to build" @@ -1566,1428 +1723,1536 @@ msgstr "" #: build/templates/build/detail.html:190 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "Asignar stock" +msgstr "" #: build/templates/build/detail.html:193 msgid "Order required parts" -msgstr "Pedir partes necesarias" +msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" -msgstr "Partes del pedido" +msgstr "Pedir Piezas" #: build/templates/build/detail.html:206 msgid "Untracked stock has been fully allocated for this Build Order" -msgstr "Stock no ha sido asignado completamente a esta Orden de Trabajo" +msgstr "" #: build/templates/build/detail.html:210 msgid "Untracked stock has not been fully allocated for this Build Order" -msgstr "El stock sin rastrear no ha sido asignado completamente para esta Orden de Trabajo" +msgstr "" #: build/templates/build/detail.html:217 msgid "Allocate selected items" -msgstr "Asignar partes seleccionadas" +msgstr "" #: build/templates/build/detail.html:227 msgid "This Build Order does not have any associated untracked BOM items" -msgstr "Esta Orden de Trabajo no tiene ningún objeto BOM sin seguimiento asociados" +msgstr "" #: build/templates/build/detail.html:236 msgid "Incomplete Build Outputs" -msgstr "Salidas de Trabajo incompletas" +msgstr "" #: build/templates/build/detail.html:240 msgid "Create new build output" -msgstr "Crear nueva salida de trabajo" +msgstr "" #: build/templates/build/detail.html:241 msgid "New Build Output" -msgstr "Nueva Salida de Trabajo" +msgstr "" #: build/templates/build/detail.html:255 msgid "Output Actions" -msgstr "Acciones de salida" +msgstr "" #: build/templates/build/detail.html:260 msgid "Complete selected build outputs" -msgstr "Completa las salidas seleccionadas" +msgstr "" #: build/templates/build/detail.html:261 msgid "Complete outputs" -msgstr "Completar salidas" +msgstr "" #: build/templates/build/detail.html:265 msgid "Delete selected build outputs" -msgstr "Eliminar salidas seleccionadas" +msgstr "" #: build/templates/build/detail.html:266 msgid "Delete outputs" -msgstr "Eliminar salidas" +msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Acciones de impresión" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Imprimir Etiquetas" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" -msgstr "Salidas de Trabajo Completadas" +msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" -msgstr "Adjuntos" +msgstr "Archivos adjuntos" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" -msgstr "Notas del Trabajo" +msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" -msgstr "Asignación completa" +msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" -msgstr "Todos los artículos de stock no rastreados han sido asignados" +msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" -msgstr "Nueva Orden de Trabajo" - -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Imprimir Ordenes de Trabajo" +msgstr "" #: build/templates/build/sidebar.html:5 msgid "Build Order Details" -msgstr "Configuración de Pedido de Trabajo" +msgstr "" #: build/templates/build/sidebar.html:12 msgid "Incomplete Outputs" -msgstr "Salidas incompletas" +msgstr "" #: build/templates/build/sidebar.html:15 msgid "Completed Outputs" -msgstr "Salidas completadas" +msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Formato de archivo no soportado: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" -msgstr "Error al leer el archivo (codificación inválida)" +msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "Error al leer el archivo (formato no válido)" +msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "Error leyendo el archivo (dimensión incorrecta)" +msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "Error al leer el archivo (los datos podrían estar corruptos)" +msgstr "" #: common/forms.py:13 msgid "File" -msgstr "Archivo" +msgstr "" #: common/forms.py:14 msgid "Select file to upload" -msgstr "Seleccione el archivo a cargar" +msgstr "" #: common/forms.py:28 msgid "{name.title()} File" -msgstr "Archivo {name.title()}" +msgstr "" #: common/forms.py:29 #, python-brace-format msgid "Select {name} file to upload" -msgstr "Seleccione el archivo {name} para subir" - -#: common/models.py:65 templates/js/translated/part.js:781 -msgid "Updated" -msgstr "Actualizado" +msgstr "" #: common/models.py:66 +msgid "Updated" +msgstr "" + +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" -msgstr "Clave de configuración (debe ser única - mayúsculas y minúsculas)" +msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" -msgstr "Valor de ajuste" +msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" -msgstr "El valor elegido no es una opción válida" +msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" -msgstr "El valor debe ser un valor booleano" +msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" -msgstr "El valor debe ser un entero" +msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" -msgstr "Cadena de clave debe ser única" +msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" -msgstr "Sin grupo" +msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." -msgstr "Un dominio vacío no está permitido." +msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "Nombre de dominio inválido: {domain}" - -#: common/models.py:873 -msgid "Restart required" -msgstr "Reinicio requerido" - -#: common/models.py:874 -msgid "A setting has been changed which requires a server restart" -msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" - -#: common/models.py:881 -msgid "Server Instance Name" -msgstr "Nombre de la instancia del servidor" - -#: common/models.py:883 -msgid "String descriptor for the server instance" -msgstr "Descriptor de cadena para la instancia del servidor" - -#: common/models.py:888 -msgid "Use instance name" -msgstr "Usar nombre de instancia" - -#: common/models.py:889 -msgid "Use the instance name in the title-bar" -msgstr "Utilice el nombre de la instancia en la barra de título" +msgstr "" #: common/models.py:895 -msgid "Restrict showing `about`" +msgid "Restart required" msgstr "" #: common/models.py:896 +msgid "A setting has been changed which requires a server restart" +msgstr "" + +#: common/models.py:903 +msgid "Server Instance Name" +msgstr "" + +#: common/models.py:905 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:910 +msgid "Use instance name" +msgstr "" + +#: common/models.py:911 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:917 +msgid "Restrict showing `about`" +msgstr "Restringir mostrar 'acerca de'" + +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Nombre de empresa" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" -msgstr "URL Base" - -#: common/models.py:909 -msgid "Base URL for server instance" -msgstr "URL base para la instancia del servidor" - -#: common/models.py:916 -msgid "Default Currency" -msgstr "Moneda predeterminada" - -#: common/models.py:917 -msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 -msgid "Download from URL" -msgstr "Descargar desde URL" - -#: common/models.py:925 -msgid "Allow download of remote images and files from external URL" -msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" - #: common/models.py:931 -msgid "Download Size Limit" -msgstr "Límite de tamaño de descarga" +msgid "Base URL for server instance" +msgstr "" -#: common/models.py:932 +#: common/models.py:938 +msgid "Default Currency" +msgstr "Moneda Predeterminada" + +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" +msgstr "Moneda a usar para el cálculo de precios" + +#: common/models.py:946 +msgid "Download from URL" +msgstr "" + +#: common/models.py:947 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:953 +msgid "Download Size Limit" +msgstr "" + +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" -msgstr "Requiere confirmación" +msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." -msgstr "Requiere confirmación explícita del usuario para ciertas acciones." +msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" -msgstr "Profundidad del árbol" +msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" -msgstr "Copia de seguridad automática" - -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" -msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" - -#: common/models.py:973 -msgid "Days Between Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:974 +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" +msgstr "" + +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 +msgid "days" +msgstr "" + +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "Eliminar tareas antiguas" +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" -#: common/models.py:984 +#: common/models.py:1018 msgid "Background task results will be deleted after specified number of days" -msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" +msgstr "" -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "Borrar registros de errores" +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" -#: common/models.py:995 +#: common/models.py:1029 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "Eliminar notificaciones" +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" -#: common/models.py:1006 +#: common/models.py:1040 msgid "User notifications will be deleted after specified number of days" -msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" +msgstr "" -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "Soporte de código de barras" +msgstr "Códigos de barras" -#: common/models.py:1017 +#: common/models.py:1051 msgid "Enable barcode scanner support" msgstr "Habilitar soporte para escáner de código de barras" -#: common/models.py:1023 +#: common/models.py:1057 msgid "Barcode Input Delay" -msgstr "" +msgstr "Retraso de entrada" -#: common/models.py:1024 +#: common/models.py:1058 msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "Regex IPN" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Patrón de expresión regular para IPN de la parte coincidente" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Permitir IPN duplicado" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Permitir que varias partes compartan el mismo IPN" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Permitir editar IPN" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Permite cambiar el valor de IPN mientras se edita una pieza" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Copiar parte de datos BOM" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Copiar datos BOM por defecto al duplicar una parte" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Copiar Parámetros de Pieza" +msgstr "Tiempo de retraso en la lectura de códigos de barras" #: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Copiar datos de parámetro por defecto al duplicar una parte" +msgid "Barcode Webcam Support" +msgstr "Soporte para cámaras web" -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Copiar parte de datos de prueba" +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" #: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Copiar datos de parámetro por defecto al duplicar una parte" +msgid "Part Revisions" +msgstr "" -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Copiar plantillas de parámetros de categoría" +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" #: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 msgid "Copy category parameter templates when creating a part" -msgstr "Copiar plantillas de parámetros de categoría al crear una parte" +msgstr "" -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 msgid "Template" -msgstr "Plantilla" +msgstr "" -#: common/models.py:1089 +#: common/models.py:1130 msgid "Parts are templates by default" -msgstr "Las piezas son plantillas por defecto" +msgstr "" -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 msgid "Assembly" -msgstr "Montaje" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Las piezas pueden ser ensambladas desde otros componentes por defecto" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Componente" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Las piezas pueden ser usadas como subcomponentes por defecto" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Comprable" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Las piezas son comprables por defecto" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Vendible" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Las piezas se pueden vender por defecto" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Rastreable" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Las piezas son rastreables por defecto" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtual" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Las piezas son virtuales por defecto" +msgstr "" #: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Mostrar importación en vistas" +msgid "Parts can be assembled from other components by default" +msgstr "" -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Mostrar el asistente de importación en algunas vistas de partes" +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" #: common/models.py:1144 -msgid "Show related parts" -msgstr "Mostrar piezas relacionadas" +msgid "Parts can be used as sub-components by default" +msgstr "" -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Mostrar partes relacionadas para una pieza" +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" #: common/models.py:1151 -msgid "Initial Stock Data" +msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" msgstr "" -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" +#: common/models.py:1158 +msgid "Parts are salable by default" msgstr "" -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" msgstr "" #: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Formato de visualización de Nombre de Parte" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Formato para mostrar el nombre de la pieza" - -#: common/models.py:1173 -msgid "Part Category Default Icon" +msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" msgstr "" #: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "Lugares decimales en el precio" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" +msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1190 +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1191 +#: common/models.py:1243 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1197 +#: common/models.py:1249 msgid "Purchase History Override" msgstr "" -#: common/models.py:1198 +#: common/models.py:1250 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" +msgstr "" -#: common/models.py:1204 +#: common/models.py:1256 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1205 +#: common/models.py:1257 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1211 +#: common/models.py:1263 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1212 +#: common/models.py:1264 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1222 +#: common/models.py:1274 msgid "Use Variant Pricing" -msgstr "Usar precios variantes" +msgstr "" -#: common/models.py:1223 +#: common/models.py:1275 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1229 +#: common/models.py:1281 msgid "Active Variants Only" -msgstr "Solo variantes activas" +msgstr "" -#: common/models.py:1230 +#: common/models.py:1282 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1236 -msgid "Pricing Rebuild Time" +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1237 +#: common/models.py:1289 msgid "Number of days before part pricing is automatically updated" +msgstr "Número de días antes de que el precio de la pieza se actualice automáticamente" + +#: common/models.py:1299 +msgid "Internal Prices" msgstr "" -#: common/models.py:1238 common/models.py:1361 -msgid "days" -msgstr "días" - -#: common/models.py:1247 -msgid "Internal Prices" -msgstr "Precios internos" - -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" -msgstr "Habilitar precios internos para piezas" +msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" -msgstr "Habilitar impresión de etiquetas" +msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" -msgstr "Habilitar impresión de etiquetas desde la interfaz web" +msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" -msgstr "PPP de la imagen de etiqueta" +msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" -msgstr "Habilitar generación de informes" +msgstr "Habilitar la generación de informes" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" -msgstr "Tamaño de página" +msgstr "Formato de papel" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" -msgstr "Tamaño de página predeterminado para informes PDF" +msgstr "Formato de papel predeterminado para informes en PDF" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" -msgstr "Habilitar generación de informes de prueba" +msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" -msgstr "Expiración de stock" +msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" -msgstr "Habilitar la funcionalidad de expiración de stock" +msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" -msgstr "Vender existencias caducadas" +msgstr "Entregar Existencias Caducadas" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" -msgstr "Permitir venta de existencias caducadas" +msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" -msgstr "Tiempo histórico de Stock" +msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" -msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" +msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" -msgstr "Crear Stock Caducado" +msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" -msgstr "Permitir crear con stock caducado" +msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" -msgstr "Control de Stock" +msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" -msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" +msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" -msgstr "" +msgstr "Patrón para Referencias de Orden de Ensamblado" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" +msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" + +#: common/models.py:1445 +msgid "Enable Return Orders" msgstr "" -#: common/models.py:1393 +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" -msgstr "" +msgstr "Patrón para la Referencia de los Pedidos de Entrega" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" -msgstr "" +msgstr "Patrón requerido para generar el campo de referencia de la Petición de Entrega" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" -msgstr "" +msgstr "Envío Predeterminado de las Peticiones de Entrega" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" -msgstr "" +msgstr "Habilitar la creación de envío predeterminado con pedidos de entrega" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" -msgstr "" +msgstr "Editar Pedidos Completados" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +msgstr "Permitir la edición de pedidos después de que hayan sido enviados o completados" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" -msgstr "" +msgstr "Patrón para Referencias de Orden de Compra" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" -msgstr "Habilitar función de contraseña olvidada" +msgstr "Habilitar recuperación de contraseña" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" -msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" +msgstr "Permitir a los usuarios recuperar su contraseña al iniciar sesión" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Habilitar registro" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" -msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" +msgstr "Permitir a usuarios registrarse por su cuenta" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" -msgstr "Habilitar SSO" +msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" -msgstr "Habilitar SSO en las páginas de inicio de sesión" +msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" -msgstr "Email requerido" +msgstr "Requerir email" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" -msgstr "Requiere usuario para suministrar correo al registrarse" +msgstr "Requerir al usuario una dirección de correo electrónico al registrarse" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" -msgstr "Auto-rellenar usuarios SSO" +msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" -msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" +msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" -msgstr "Correo dos veces" +msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" -msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" +msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" -msgstr "Contraseña dos veces" +msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" -msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" +msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" -msgstr "Grupo al registrarse" +msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" -msgstr "Grupo al que se asignan nuevos usuarios al registrarse" +msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" -msgstr "Forzar MFA" +msgstr "Requerir AFM" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." -msgstr "Los usuarios deben utilizar seguridad multifactor." +msgstr "Requerir a los usuarios el uso de Autenticación de Factor Múltiple" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" -msgstr "Habilitar integración de URL" - -#: common/models.py:1523 -msgid "Enable plugins to add URL routes" -msgstr "Habilitar plugins para añadir rutas de URL" - -#: common/models.py:1530 -msgid "Enable navigation integration" -msgstr "Habilitar integración de navegación" - -#: common/models.py:1531 -msgid "Enable plugins to integrate into navigation" -msgstr "Habilitar plugins para integrar en la navegación" - -#: common/models.py:1538 -msgid "Enable app integration" -msgstr "Habilitar integración de la aplicación" - -#: common/models.py:1539 -msgid "Enable plugins to add apps" -msgstr "Habilitar plugins para añadir aplicaciones" - -#: common/models.py:1546 -msgid "Enable schedule integration" -msgstr "Habilitar integración de programación" - -#: common/models.py:1547 -msgid "Enable plugins to run scheduled tasks" -msgstr "Habilitar plugins para ejecutar tareas programadas" - -#: common/models.py:1554 -msgid "Enable event integration" -msgstr "Habilitar integración de eventos" - -#: common/models.py:1555 -msgid "Enable plugins to respond to internal events" -msgstr "Habilitar plugins para responder a eventos internos" - -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" -msgstr "Tecla de ajustes (debe ser única - mayúsculas y minúsculas" +msgstr "" #: common/models.py:1596 -msgid "Show subscribed parts" -msgstr "Mostrar partes suscritas" - -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" -msgstr "Mostrar las partes suscritas en la página principal" +msgid "Enable plugins to add URL routes" +msgstr "" #: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "Mostrar categorías suscritas" +msgid "Enable navigation integration" +msgstr "" #: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "Mostrar categorías de partes suscritas en la página de inicio" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "Mostrar últimas partes" +msgid "Enable plugins to integrate into navigation" +msgstr "" #: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "Mostrar las últimas partes en la página de inicio" +msgid "Enable app integration" +msgstr "" -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "Conteo de Partes Recientes" +#: common/models.py:1612 +msgid "Enable plugins to add apps" +msgstr "" -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "Número de partes recientes a mostrar en la página de índice" +#: common/models.py:1619 +msgid "Enable schedule integration" +msgstr "" -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "Mostrar BOMs no validadas" +#: common/models.py:1620 +msgid "Enable plugins to run scheduled tasks" +msgstr "" -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "Mostrar BOMs que esperan validación en la página de inicio" +#: common/models.py:1627 +msgid "Enable event integration" +msgstr "" -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "Mostrar cambios recientes de stock" +#: common/models.py:1628 +msgid "Enable plugins to respond to internal events" +msgstr "" -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "Mostrar artículos de stock recientemente modificados en la página de inicio" +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "" -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "Conteo Reciente de Stock" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "Número de elementos de stock recientes a mostrar en la página de índice" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "" -#: common/models.py:1645 -msgid "Show low stock" -msgstr "Mostrar stock bajo" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" -msgstr "Mostrar artículos de stock bajo en la página de inicio" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" -msgstr "Mostrar stock agotado" +msgid "Report Deletion Interval" +msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "Mostrar Lista de Materiales (BOMs) no validados" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" -msgstr "Mostrar artículos agotados en la página de inicio" +msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" -msgstr "Mostrar stock necesario" +msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" -msgstr "Mostrar elementos de stock necesarios para trabajos en la página de inicio" +msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" -msgstr "Mostrar stock caducado" +msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" -msgstr "Mostrar artículos de stock caducados en la página de inicio" +msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" -msgstr "Mostrar stock obsoleto" +msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" -msgstr "Mostrar elementos de stock obsoletos en la página de inicio" +msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" -msgstr "Mostrar trabajos pendientes" +msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" -msgstr "Mostrar trabajos pendientes en la página de inicio" +msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" -msgstr "Mostrar trabajos vencidos" +msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" -msgstr "Mostrar trabajos pendientes en la página de inicio" +msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" -msgstr "Mostrar Órdenes de Compra Pendientes" +msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" -msgstr "Mostrar las OC destacadas en la página de inicio" +msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" -msgstr "Mostrar OC atrasadas" +msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" -msgstr "Mostrar las OC vencidas en la página de inicio" +msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" -msgstr "Mostrar OV pendiemtes" +msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" -msgstr "Mostrar OV pendientes en la página de inicio" +msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" -msgstr "Mostrar OV atrasadas" +msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" -msgstr "Mostrar OV atrasadas en la página de inicio" +msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" -msgstr "" +msgstr "Mostrar noticias" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" +msgstr "Mostrar las últimas novedades de InvenTree en la página de inicio" + +#: common/models.py:1843 +msgid "Inline label display" msgstr "" -#: common/models.py:1729 -msgid "Inline label display" -msgstr "Mostrar etiqueta interior" - -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Mostrar etiquetas PDF en el navegador, en lugar de descargar como un archivo" -#: common/models.py:1736 -msgid "Inline report display" -msgstr "Mostrar informe en línea" +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" -#: common/models.py:1737 +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 +msgid "Inline report display" +msgstr "" + +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Mostrar informes PDF en el navegador, en lugar de descargar como un archivo" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" -msgstr "Buscar partes" +msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" -msgstr "Ocultar Partes Inactivas" +msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" -msgstr "Buscar categorías" +msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" -msgstr "Buscar inventario" +msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" -msgstr "Buscar órdenes de compra" +msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" -msgstr "Buscar órdenes de venta" +msgstr "Buscar Pedidos de Entrega" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" -msgstr "" +msgstr "Mostrar pedidos de entrega en la ventana de vista previa de búsqueda" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" -msgstr "" +msgstr "Excluir Pedidos Inactivos" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" -msgstr "" +msgstr "Excluir pedidos inactivos de la ventana de vista previa de búsqueda" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "Resultados de la vista previa" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "Mostrar cantidad en formularios" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "Mostrar la cantidad de piezas disponibles en algunos formularios" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "Formularios de cierre de teclas de escape" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "Usa la clave de escape para cerrar formularios modales" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "Barra de navegación fija" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "La posición de la barra de navegación se fija en la parte superior de la pantalla" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "Formato de Fecha" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "Formato preferido para mostrar fechas" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 -msgid "Price break quantity" -msgstr "Cantidad de salto de precio" +msgid "Display return orders in search preview window" +msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "Formato de Fecha" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "Planificación de piezas" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "Mostrar información de programación de piezas" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Precio" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" -msgstr "Punto final en el que se recibe este webhook" +msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" -msgstr "Nombre para este webhook" +msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" -msgstr "Activo" +msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" -msgstr "Está activo este webhook" - -#: common/models.py:2161 -msgid "Token" -msgstr "Token" - -#: common/models.py:2162 -msgid "Token for access" -msgstr "Token para el acceso" - -#: common/models.py:2169 -msgid "Secret" -msgstr "Clave" - -#: common/models.py:2170 -msgid "Shared secret for HMAC" -msgstr "Secreto compartido para HMAC" - -#: common/models.py:2276 -msgid "Message ID" -msgstr "ID de mensaje" - -#: common/models.py:2277 -msgid "Unique identifier for this message" -msgstr "Identificador único para este mensaje" - -#: common/models.py:2285 -msgid "Host" -msgstr "Host" - -#: common/models.py:2286 -msgid "Host from which this message was received" -msgstr "Servidor desde el cual se recibió este mensaje" - -#: common/models.py:2293 -msgid "Header" -msgstr "Encabezado" - -#: common/models.py:2294 -msgid "Header of this message" -msgstr "Encabezado del mensaje" - -#: common/models.py:2300 -msgid "Body" -msgstr "Cuerpo" +msgstr "" #: common/models.py:2301 -msgid "Body of this message" -msgstr "Cuerpo de este mensaje" +msgid "Token" +msgstr "" + +#: common/models.py:2302 +msgid "Token for access" +msgstr "" + +#: common/models.py:2309 +msgid "Secret" +msgstr "" #: common/models.py:2310 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:2416 +msgid "Message ID" +msgstr "" + +#: common/models.py:2417 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:2425 +msgid "Host" +msgstr "" + +#: common/models.py:2426 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:2433 +msgid "Header" +msgstr "" + +#: common/models.py:2434 +msgid "Header of this message" +msgstr "" + +#: common/models.py:2440 +msgid "Body" +msgstr "" + +#: common/models.py:2441 +msgid "Body of this message" +msgstr "" + +#: common/models.py:2450 msgid "Endpoint on which this message was received" -msgstr "Endpoint en el que se recibió este mensaje" +msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" -msgstr "Trabajado en" +msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" -msgstr "¿El trabajo en este mensaje ha terminado?" +msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" -msgstr "Id" +msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" -msgstr "Titulo" +msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" -msgstr "Publicado" +msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" -msgstr "Autor" +msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" -msgstr "Resumen" +msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,44 +3265,48 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "Artículos Recibidos" #: common/notifications.py:304 msgid "Items have been received against a purchase order" +msgstr "Los artículos han sido recibidos contra una orden de compra" + +#: common/notifications.py:311 +msgid "Items have been received against a return order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Subir Archivo" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "Coincidir Campos" +msgstr "" #: common/views.py:87 msgid "Match Items" -msgstr "Coincidir elementos" +msgstr "Concordar Artículos" #: common/views.py:420 msgid "Fields matching failed" -msgstr "Falló la coincidencia de campos" +msgstr "" #: common/views.py:481 msgid "Parts imported" -msgstr "Partes importadas" +msgstr "" #: common/views.py:509 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -3048,7 +3317,7 @@ msgstr "Partes importadas" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "Paso anterior" +msgstr "Paso Anterior" #: company/models.py:103 msgid "Company description" @@ -3060,9 +3329,9 @@ msgstr "Descripción de la empresa" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" -msgstr "Página web" +msgstr "Sitio Web" #: company/models.py:111 msgid "Company website URL" @@ -3078,7 +3347,7 @@ msgstr "Dirección de la empresa" #: company/models.py:119 msgid "Phone number" -msgstr "Teléfono" +msgstr "Número de teléfono" #: company/models.py:120 msgid "Contact phone number" @@ -3086,6 +3355,7 @@ msgstr "Teléfono de contacto" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "Correo electrónico" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "Correo electrónico de contacto" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Contacto" @@ -3105,13 +3378,13 @@ msgstr "Punto de contacto" msgid "Link to external company information" msgstr "Enlace a información externa de la empresa" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" -msgstr "Imágen" +msgstr "Imagen" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" -msgstr "Notas de la empresa" +msgstr "Notas de la Empresa" #: company/models.py:145 msgid "is customer" @@ -3127,7 +3400,7 @@ msgstr "es proveedor" #: company/models.py:147 msgid "Do you purchase items from this company?" -msgstr "¿Compras artículos de esta empresa?" +msgstr "¿Compras artículos a esta empresa?" #: company/models.py:149 msgid "is manufacturer" @@ -3137,242 +3410,243 @@ msgstr "es fabricante" msgid "Does this company manufacture parts?" msgstr "¿Esta empresa fabrica piezas?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Moneda" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Moneda predeterminada utilizada para esta empresa" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Parte base" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Seleccionar pieza" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Fabricante" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Seleccionar fabricante" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Número de Parte del Fabricante" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "URL para el enlace de parte del fabricante externo" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "Descripción de la parte del fabricante" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Parte del fabricante" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Nombre del parámetro" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Valor" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Valor del parámetro" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Unidades" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Unidades de parámetro" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "La parte vinculada del fabricante debe hacer referencia a la misma pieza base" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Proveedor" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Seleccionar proveedor" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "SKU" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "Unidad de mantenimiento de stock de proveedores" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "Seleccionar parte del fabricante" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "URL del enlace de parte del proveedor externo" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "Descripción de la parte del proveedor" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Nota" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "costo base" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Paquetes" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "Embalaje de partes" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "Cantidad de paquete" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "múltiple" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "Pedido múltiple" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Disponible" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "Disponibilidad actualizada" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "Moneda predeterminada utilizada para este proveedor" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Código de moneda" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Empresa" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Pieza Base" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Seleccionar pieza" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Fabricante" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Seleccionar fabricante" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "'Part Number' del Fabricante" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "'Part Number' del fabricante" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "URL para el enlace de parte del fabricante externo" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "Descripción de la pieza del fabricante" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Pieza del Fabricante" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Nombre del parámetro" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Valor" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Valor del parámetro" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Unidades" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Unidades de parámetro" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "La parte vinculada del fabricante debe hacer referencia a la misma pieza base" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Proveedor" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Seleccionar proveedor" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "Descripción de la pieza del proveedor" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Nota" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Empaquetado" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "Empaquetado de pieza" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Moneda predeterminada utilizada para este proveedor" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" -msgstr "Crear orden de compra" +msgstr "Crear Orden de Compra" #: company/templates/company/company_base.html:28 msgid "Company actions" -msgstr "Acciones de empresa" +msgstr "Actuaciones de la empresa" #: company/templates/company/company_base.html:33 msgid "Edit company information" -msgstr "Editar datos de la empresa" +msgstr "Editar información de la empresa" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Modificar Empresa" @@ -3388,26 +3662,29 @@ msgstr "Eliminar Empresa" #: company/templates/company/company_base.html:56 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "Cargar nueva imagen" +msgstr "" #: company/templates/company/company_base.html:59 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "Descargar desde URL" +msgstr "" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "Borrar imagen" +msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Cliente" @@ -3417,138 +3694,168 @@ msgstr "Usa la moneda predeterminada" #: company/templates/company/company_base.html:126 msgid "Phone" -msgstr "Teléfono" +msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" -msgstr "Quitar imagen" +msgstr "" #: company/templates/company/company_base.html:207 msgid "Remove associated image from this company" -msgstr "" +msgstr "Eliminar imagen asociada a esta empresa" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" -msgstr "Eliminar" +msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" -msgstr "Cargar Imagen" +msgstr "Subir Imagen" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" -msgstr "Descargar imagen" +msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" -msgstr "Partes de Proveedor" - -#: company/templates/company/detail.html:18 -msgid "Create new supplier part" -msgstr "Crear nueva parte del proveedor" +msgstr "Piezas del Proveedor" #: company/templates/company/detail.html:19 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" -msgstr "Nueva Parte de Proveedor" +msgstr "Nueva Pieza del Proveedor" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" -msgstr "Piezas de pedido" - -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "Eliminar partes" +msgstr "Pedir piezas" #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" -msgstr "Eliminar Partes" +msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" -msgstr "Partes del fabricante" +msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" -msgstr "Crear nueva pieza de fabricante" +msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" -msgstr "Nueva pieza de fabricante" +msgstr "Nueva Pieza del Fabricante" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" -msgstr "Stock del Proveedor" +msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" -msgstr "Ordenes de compra" +msgstr "Ordenes de Compra" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Crear nueva orden de compra" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" -msgstr "Nueva orden de compra" +msgstr "Nueva Orden de Compra" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" -msgstr "Órdenes de venta" +msgstr "Pedidos de Entrega" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "Crear Orden de Venta" +msgstr "Crear un nuevo pedido de entrega" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" -msgstr "Nueva orden de venta" +msgstr "Nuevo Pedido de Entrega" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" -msgstr "Stock asignado" +msgstr "Stock Asignado" + +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" #: company/templates/company/index.html:8 msgid "Supplier List" -msgstr "Listado de proveedores" +msgstr "" #: company/templates/company/manufacturer_part.html:15 company/views.py:38 #: templates/InvenTree/search.html:181 templates/navbar.html:49 @@ -3556,25 +3863,25 @@ msgid "Manufacturers" msgstr "Fabricantes" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" -msgstr "Pedir ítem" +msgstr "Pedir pieza" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" -msgstr "Editar fabricante de la pieza" +msgstr "Editar pieza del fabricante" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" -msgstr "Eliminar fabricante de la pieza" +msgstr "Eliminar pieza del fabricante" #: company/templates/company/manufacturer_part.html:65 #: company/templates/company/supplier_part.html:98 msgid "Internal Part" -msgstr "Componente interno" +msgstr "Pieza Interna" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" @@ -3582,225 +3889,174 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Proveedores" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" -msgstr "Eliminar partes del proveedor" +msgstr "Eliminar piezas del proveedor" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" -msgstr "Eliminar" +msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parámetros" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" -msgstr "Nuevo parámetro" +msgstr "Nuevo Parámetro" #: company/templates/company/manufacturer_part.html:183 msgid "Delete parameters" -msgstr "Eliminar parámetro" +msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" -msgstr "Añadir parámetro" +msgstr "" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "Partes Manufacturadas" +msgstr "" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "Partes suministradas" +msgstr "" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "Elementos de stock suministrados" +msgstr "Artículos de Stock Suministrados" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "Elementos de Stock Asignados" +msgstr "Artículos de Stock Asignados" + +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" -msgstr "Ítems de Proveedor" - -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Acciones para código de barras" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "Mostrar código QR" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "Desvincular Código de Barras" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "Vincular Código de Barras" +msgstr "Pieza del Proveedor" #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" -msgstr "" +msgstr "Acciones de piezas del proveedor" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" -msgstr "Pedir ítem" +msgstr "Pedir Pieza" #: company/templates/company/supplier_part.html:61 #: company/templates/company/supplier_part.html:62 msgid "Update Availability" -msgstr "Actualizar disponibilidad" +msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" -msgstr "Editar Parte del Proveedor" +msgstr "Editar Pieza del Proveedor" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" -msgstr "" +msgstr "Duplicar Pieza del Proveedor" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "" +msgstr "Eliminar Pieza del Proveedor" #: company/templates/company/supplier_part.html:75 msgid "Delete Supplier Part" -msgstr "" +msgstr "Eliminar Pieza del Proveedor" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "Identificador de Código de Barras" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" -msgstr "Stock del Proveedor" +msgstr "Stock de Piezas del Proveedor" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" -msgstr "Crear nuevo artículo de stock" +msgstr "Añadir un nuevo artículo en inventario" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" -msgstr "Nuevo artículo de stock" +msgstr "Nuevo artículo en stock" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" -msgstr "Pedidos de piezas al proveedor" +msgstr "Pedidos de Piezas al Proveedor" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" -msgstr "Información de Precios" +msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" -msgstr "Agregar descuento de precio" +msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" -msgstr "" +msgstr "Enlazar código de barras a Pieza del Proveedor" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" -msgstr "" +msgstr "Actualizar Disponibilidad de Piezas" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Inventario" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Pedidos" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "Precio de pieza del proveedor" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Precios" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" -msgstr "Elementos de stock" +msgstr "Artículos de Stock" + +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Precio de Pieza del Proveedor" #: company/views.py:33 msgid "New Supplier" @@ -3819,526 +4075,611 @@ msgstr "Clientes" msgid "New Customer" msgstr "Nuevo Cliente" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Empresas" #: company/views.py:53 msgid "New Company" -msgstr "Nueva Compañía" +msgstr "Nueva Empresa" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "Código QR de Item de Stock" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" -msgstr "Nombre etiqueta" +msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Descripción de etiqueta" -#: label/models.py:116 -msgid "Label" -msgstr "Etiqueta" - #: label/models.py:117 -msgid "Label template file" -msgstr "Archivo de plantilla de etiqueta" - -#: label/models.py:123 report/models.py:254 -msgid "Enabled" -msgstr "Habilitado" - -#: label/models.py:124 -msgid "Label template is enabled" -msgstr "Plantilla de etiqueta habilitada" - -#: label/models.py:129 -msgid "Width [mm]" -msgstr "Ancho [mm]" - -#: label/models.py:130 -msgid "Label width, specified in mm" -msgstr "Ancho de la etiqueta, especificado en mm" - -#: label/models.py:136 -msgid "Height [mm]" -msgstr "Altura [mm]" - -#: label/models.py:137 -msgid "Label height, specified in mm" -msgstr "Altura de la etiqueta, especificada en mm" - -#: label/models.py:143 report/models.py:247 -msgid "Filename Pattern" -msgstr "Patrón de Nombre de archivo" - -#: label/models.py:144 -msgid "Pattern for generating label filenames" -msgstr "Patrón para generar nombres de archivo de etiquetas" - -#: label/models.py:233 -msgid "Query filters (comma-separated list of key=value pairs)," -msgstr "Crear filtros de consulta (lista separada por comas de pares clave=valor)," - -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 -msgid "Filters" -msgstr "Filtros" - -#: label/models.py:274 -msgid "Query filters (comma-separated list of key=value pairs" -msgstr "Crear filtros de consulta (lista separada por comas de pares clave=valor" - -#: label/models.py:302 -msgid "Part query filters (comma-separated value of key=value pairs)" -msgstr "Filtros de búsqueda de partes (valor separado por comas de pares clave=valor)" - -#: order/api.py:161 -msgid "No matching purchase order found" +msgid "Label" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: label/models.py:118 +msgid "Label template file" +msgstr "" + +#: label/models.py:124 report/models.py:264 +msgid "Enabled" +msgstr "" + +#: label/models.py:125 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:130 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:131 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:137 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:138 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:144 report/models.py:257 +msgid "Filename Pattern" +msgstr "" + +#: label/models.py:145 +msgid "Pattern for generating label filenames" +msgstr "" + +#: label/models.py:234 +msgid "Query filters (comma-separated list of key=value pairs)," +msgstr "" + +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 +msgid "Filters" +msgstr "" + +#: label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:303 +msgid "Part query filters (comma-separated value of key=value pairs)" +msgstr "" + +#: order/api.py:225 +msgid "No matching purchase order found" +msgstr "No se encontró ninguna orden de compra coincidente" + +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" -msgstr "Orden de compra" +msgstr "Orden de Compra" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" -msgstr "Desconocido" +msgstr "" -#: order/models.py:83 -msgid "Order description" -msgstr "Descripción del pedido" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Precio Total" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" -msgstr "Enlace a Url externa" +msgstr "Enlace a página web externa" -#: order/models.py:93 +#: order/models.py:207 +msgid "Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:216 msgid "Created By" -msgstr "Creado por" +msgstr "" -#: order/models.py:100 +#: order/models.py:223 msgid "User or group responsible for this order" msgstr "Usuario o grupo responsable de este pedido" -#: order/models.py:105 -msgid "Order notes" -msgstr "Notas del pedido" +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" -#: order/models.py:242 order/models.py:652 +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:250 order/models.py:670 +#: order/models.py:336 order/models.py:760 msgid "Purchase order status" -msgstr "Estado de la orden de compra" +msgstr "" -#: order/models.py:265 +#: order/models.py:351 msgid "Company from which the items are being ordered" -msgstr "Compañía de la que se están encargando los artículos" +msgstr "Empresa a la que se están encargando los artículos" -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 msgid "Supplier Reference" -msgstr "Referencia del proveedor" +msgstr "Referencia del Proveedor" -#: order/models.py:268 +#: order/models.py:359 msgid "Supplier order reference code" -msgstr "Código de referencia de pedido del proveedor" +msgstr "" -#: order/models.py:275 +#: order/models.py:366 msgid "received by" -msgstr "recibido por" +msgstr "" -#: order/models.py:280 +#: order/models.py:371 order/models.py:1710 msgid "Issue Date" -msgstr "Fecha de emisión" +msgstr "" -#: order/models.py:281 +#: order/models.py:372 order/models.py:1711 msgid "Date order was issued" -msgstr "Fecha de expedición del pedido" +msgstr "" -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Fecha de entrega objetivo" - -#: order/models.py:287 -msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha." - -#: order/models.py:293 +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" -msgstr "La fecha de pedido fue completada" +msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" -msgstr "El proveedor de la pieza debe coincidir con el proveedor de PO" +msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" -msgstr "La cantidad debe ser un número positivo" +msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " -msgstr "Referencia del cliente " +msgstr "Referencia de Cliente " -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" -msgstr "Código de referencia de pedido del cliente" +msgstr "Código de referencia del pedido del cliente" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "Fecha límite para la finalización del pedido. El pedido se retrasará después de esta fecha." - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" -msgstr "Fecha de envío" +msgstr "Fecha de Envío" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" -msgstr "enviado por" +msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" -msgstr "El pedido no se puede completar porque no se han asignado partes" +msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "Sólo una orden pendiente puede ser marcada como completa" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "El pedido no se puede completar porque hay envíos incompletos" +msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" -msgstr "El pedido no se puede completar porque hay artículos de línea incompletos" +msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" -msgstr "Cantidad del artículo" +msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" -msgstr "Referencia de línea en la orden" +msgstr "Referencia de artículo de línea" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" -msgstr "Notas del artículo de línea" +msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" -msgstr "Contexto" +msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" -msgstr "Precio unitario" +msgstr "Precio por unidad" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" -msgstr "La pieza del proveedor debe coincidir con el proveedor" - -#: order/models.py:1014 -msgid "deleted" -msgstr "eliminado" - -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 -msgid "Order" -msgstr "Orden" - -#: order/models.py:1039 -msgid "Supplier part" -msgstr "Ítems de Proveedor" - -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 -msgid "Received" -msgstr "Recibido" - -#: order/models.py:1047 -msgid "Number of items received" -msgstr "Número de artículos recibidos" - -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 -msgid "Purchase Price" -msgstr "Precio de Compra" - -#: order/models.py:1055 -msgid "Unit purchase price" -msgstr "Precio de compra unitario" - -#: order/models.py:1063 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "¿Dónde quiere el comprador almacenar este objeto?" - -#: order/models.py:1129 -msgid "Virtual part cannot be assigned to a sales order" msgstr "" #: order/models.py:1134 -msgid "Only salable parts can be assigned to a sales order" +msgid "deleted" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 +msgid "Order" +msgstr "" + +#: order/models.py:1159 +msgid "Supplier part" +msgstr "" + +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 +msgid "Received" +msgstr "" + +#: order/models.py:1167 +msgid "Number of items received" +msgstr "" + +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 +msgid "Purchase Price" +msgstr "Precio de Compra" + +#: order/models.py:1175 +msgid "Unit purchase price" +msgstr "Precio de compra por unidad" + +#: order/models.py:1188 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "" + +#: order/models.py:1254 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "Una pieza virtual no puede ser asignada a un pedido de entrega" + +#: order/models.py:1259 +msgid "Only salable parts can be assigned to a sales order" +msgstr "Sólo las piezas entregables pueden ser asignadas a un pedido de entrega" + +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" -msgstr "Precio de Venta" +msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" -msgstr "Precio de venta unitario" +msgstr "Precio de venta por unidad" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" -msgstr "Cantidad enviada" +msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" -msgstr "Fecha del envío" +msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" -msgstr "Revisado por" +msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" -msgstr "Usuario que revisó este envío" +msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" -msgstr "Envío" +msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" -msgstr "Número de envío" +msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" -msgstr "Nota de envío" +msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" -msgstr "Número de Seguimiento" +msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" -msgstr "Información de seguimiento del envío" +msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" -msgstr "El envío ya ha sido enviado" +msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" -msgstr "El envío no tiene artículos de stock asignados" +msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" -msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" - -#: order/models.py:1409 -msgid "Cannot allocate stock to a line without a part" -msgstr "No se puede asignar stock a una línea sin una pieza" - -#: order/models.py:1412 -msgid "Allocation quantity cannot exceed stock quantity" -msgstr "La cantidad de asignación no puede exceder la cantidad de stock" - -#: order/models.py:1422 order/serializers.py:1083 -msgid "Quantity must be 1 for serialized stock item" -msgstr "La cantidad debe ser 1 para el stock serializado" - -#: order/models.py:1425 -msgid "Sales order does not match shipment" -msgstr "La orden de venta no coincide con el envío" - -#: order/models.py:1426 -msgid "Shipment does not match sales order" -msgstr "El envío no coincide con el pedido de venta" - -#: order/models.py:1434 -msgid "Line" -msgstr "Línea" - -#: order/models.py:1443 -msgid "Sales order shipment reference" -msgstr "Referencia del envío del pedido de venta" - -#: order/models.py:1456 templates/js/translated/notification.js:55 -msgid "Item" -msgstr "Ítem" - -#: order/models.py:1457 -msgid "Select stock item to allocate" -msgstr "Seleccionar artículo de stock para asignar" - -#: order/models.py:1460 -msgid "Enter stock allocation quantity" -msgstr "Especificar la cantidad de asignación de stock" - -#: order/serializers.py:63 -msgid "Price currency" msgstr "" -#: order/serializers.py:193 -msgid "Order cannot be cancelled" -msgstr "El pedido no puede ser cancelado" +#: order/models.py:1543 +msgid "Cannot allocate stock to a line without a part" +msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/models.py:1546 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:1556 order/serializers.py:1086 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:1559 +msgid "Sales order does not match shipment" +msgstr "La petición de entrega no coincide con el envío" + +#: order/models.py:1560 +msgid "Shipment does not match sales order" +msgstr "El envío no coincide con el pedido de entrega" + +#: order/models.py:1568 +msgid "Line" +msgstr "" + +#: order/models.py:1577 +msgid "Sales order shipment reference" +msgstr "Referencia del envío del pedido de entrega" + +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 +msgid "Item" +msgstr "" + +#: order/models.py:1591 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:1594 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "" + +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" -msgstr "La orden de compra debe coincidir con el proveedor" +msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" -msgstr "Artículo en línea" +msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" -msgstr "La línea del artículo no coincide con la orden de compra" +msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" -msgstr "Seleccione la ubicación de destino para los artículos recibidos" +msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "Identificador único" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" -msgstr "Código de barras en uso" +msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" -msgstr "Se deben proporcionar elementos de línea" +msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" -msgstr "Se requiere ubicación de destino" +msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" -msgstr "Los valores del código de barras deben ser únicos" +msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" -msgstr "No se proporcionaron detalles de envío" +msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" -msgstr "Artículo en línea no está asociado con este pedido" +msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" -msgstr "La cantidad debe ser positiva" +msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" -msgstr "Introduzca números de serie para asignar" - -#: order/serializers.py:1233 order/serializers.py:1357 -msgid "Shipment has already been shipped" -msgstr "El envío ya ha sido enviado" +msgstr "" #: order/serializers.py:1236 order/serializers.py:1360 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" -msgstr "El envío no está asociado con este pedido" +msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" -msgstr "No se han encontrado coincidencias para los siguientes números de serie" +msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" -msgstr "Los siguientes números de serie ya están asignados" +msgstr "" + +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" #: order/tasks.py:26 msgid "Overdue Purchase Order" @@ -4351,108 +4692,129 @@ msgstr "" #: order/tasks.py:89 msgid "Overdue Sales Order" -msgstr "" +msgstr "Pedidos de Entrega Atrasados" #: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" +msgstr "La petición de entrega {so} está vencida" + +#: order/templates/order/order_base.html:51 +msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:33 -msgid "Print purchase order report" -msgstr "Imprimir informe de orden de compra" - -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Exportar pedido a archivo" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "Acciones de pedido" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Editar pedido" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" -msgstr "Cancelar orden" +msgstr "Cancelar pedido" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "Recibir artículos" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" -msgstr "Recibir artículos" +msgstr "Recibir Artículos" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" -msgstr "Marcar pedido como completado" +msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" -msgstr "Completar pedido" +msgstr "Completar Pedido" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" -msgstr "Referencia del pedido" +msgstr "Referencia del Pedido" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" -msgstr "Descripción del pedido" +msgstr "Descripción del Pedido" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" -msgstr "Estado del pedido" +msgstr "Estado del Pedido" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" -msgstr "No hay información disponible sobre el proveedor" +msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" -msgstr "Ítems de línea completados" +msgstr "Artículos de Línea Completados" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incompleto" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" -msgstr "Emitido" +msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" -msgstr "Costo total" +msgstr "Coste total" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" -msgstr "No se ha podido calcular el costo total" +msgstr "No se ha podido calcular el coste total" + +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 @@ -4466,7 +4828,7 @@ msgstr "Faltan selecciones para las siguientes columnas requeridas" #: part/templates/part/import_wizard/match_fields.html:20 #: templates/patterns/wizard/match_fields.html:19 msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "Se han encontrado selecciones duplicadas, vea a continuación. Arreglarlas y vuelva a intentar enviarlas." +msgstr "" #: order/templates/order/order_wizard/match_fields.html:29 #: order/templates/order/order_wizard/match_parts.html:21 @@ -4474,28 +4836,28 @@ msgstr "Se han encontrado selecciones duplicadas, vea a continuación. Arreglarl #: part/templates/part/import_wizard/match_references.html:21 #: templates/patterns/wizard/match_fields.html:28 msgid "Submit Selections" -msgstr "Enviar selecciones" +msgstr "Enviar Selecciones" #: order/templates/order/order_wizard/match_fields.html:35 #: part/templates/part/import_wizard/ajax_match_fields.html:28 #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "Campos de archivo" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 #: part/templates/part/import_wizard/match_fields.html:42 #: templates/patterns/wizard/match_fields.html:41 msgid "Remove column" -msgstr "Eliminar columna" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:60 #: part/templates/part/import_wizard/ajax_match_fields.html:53 #: part/templates/part/import_wizard/match_fields.html:60 #: templates/patterns/wizard/match_fields.html:59 msgid "Duplicate selection" -msgstr "Duplicar selección" +msgstr "" #: order/templates/order/order_wizard/match_fields.html:71 #: order/templates/order/order_wizard/match_parts.html:52 @@ -4503,11 +4865,13 @@ msgstr "Duplicar selección" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Eliminar fila" @@ -4526,7 +4890,7 @@ msgstr "Fila" #: order/templates/order/order_wizard/match_parts.html:29 msgid "Select Supplier Part" -msgstr "Seleccionar Parte de Proveedor" +msgstr "Seleccionar Pieza del Proveedor" #: order/templates/order/order_wizard/po_upload.html:8 msgid "Return to Orders" @@ -4534,11 +4898,11 @@ msgstr "Volver a Pedidos" #: order/templates/order/order_wizard/po_upload.html:13 msgid "Upload File for Purchase Order" -msgstr "Subir archivo para orden de compra" +msgstr "Subir Archivo para Orden de Compra" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "El pedido ya ha sido procesado. Los archivos no se pueden cargar." +msgstr "" #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -4549,1373 +4913,1541 @@ msgid "Step %(step)s of %(count)s" msgstr "Paso %(step)s de %(count)s" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" -msgstr "Línea de pedido" +msgstr "Artículos de Línea" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "Stock Recibido" +msgstr "" #: order/templates/order/purchase_order_detail.html:19 msgid "Purchase Order Items" -msgstr "Comprar artículos de orden" +msgstr "Artículos de la Orden de Compra" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" -msgstr "Añadir artículo de línea" +msgstr "Añadir Artículo de Línea" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" -msgstr "Recibir elementos seleccionados" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "Líneas Adicionales" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" -msgstr "Añadir línea adicional" +msgstr "Añadir Línea Adicional" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" -msgstr "Articulos Recibidos" +msgstr "Artículos Recibidos" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" -msgstr "Notas del pedido" +msgstr "Notas del Pedido" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "Imprimir informes de pedidos" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "Imprimir reporte de orden de venta" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "Imprimir lista de empaquetado" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 +msgid "Customer Reference" +msgstr "Referencia del Cliente" + +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" msgstr "" -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "Imprimir informe de pedidos de entrega" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 msgid "Complete Sales Order" -msgstr "Ordenes de venta completas" +msgstr "Completar Pedido de Entrega" -#: order/templates/order/sales_order_base.html:103 +#: order/templates/order/sales_order_base.html:131 msgid "This Sales Order has not been fully allocated" -msgstr "Esta orden de venta no ha sido completamente asignada" +msgstr "Este pedido de entrega no ha sido completamente asignado" -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 -msgid "Customer Reference" -msgstr "Referencia del cliente" - -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" -msgstr "Envíos completados" +msgstr "Envíos Completados" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" -msgstr "Editar orden de venta" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" +msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" -msgstr "Artículos de Pedidos de Venta" +msgstr "Artículos de Pedidos de Entrega" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" -msgstr "Envíos pendientes" +msgstr "Envíos Pendientes" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "Acciones" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "Nuevo Envío" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" -msgstr "Coincidir Piezas de Proveedor" +msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" -msgstr "Orden de venta no encontrada" +msgstr "Pedido de entrega no encontrado" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" -msgstr "Precio no encontrado" +msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "Actualizado el precio unitario de {part} a {price}" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Actualizado el precio unitario de {part} a {price} y la cantidad a {qty}" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" -msgstr "ID de Parte" +msgstr "ID de Pieza" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" -msgstr "" +msgstr "Nombre de la Pieza" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" -msgstr "" +msgstr "Descripción de la Pieza" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" -msgstr "Revisión" +msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" -msgstr "Palabras claves" +msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" -msgstr "ID de Categoría" +msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" -msgstr "Stock mínimo" +msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "En Stock" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" -msgstr "En pedido" +msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "Usado en" +msgstr "Usado En" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" -msgstr "Asignadas" +msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" -msgstr "En construcción" +msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" -msgstr "Ruta de Categoría" +msgstr "Ruta de la Categoría" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" -msgstr "Partes" +msgstr "Piezas" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" +msgstr "IPN de la Pieza" + +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 +msgid "Minimum Price" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 -msgid "Minimum Price" -msgstr "Precio mínimo" - -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" -msgstr "Precio máximo" +msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" -msgstr "Orden de compra entrante" +msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" -msgstr "Orden de venta saliente" +msgstr "Pedidos de Entrega Salientes" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" -msgstr "Válido" +msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" -msgstr "Validación de Lista de Materiales" +msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" -msgstr "Esta opción debe ser seleccionada" +msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" -msgstr "Ubicación Predeterminada" +msgstr "" #: part/bom.py:176 templates/email/low_stock_notification.html:17 msgid "Total Stock" -msgstr "Inventario Total" +msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Stock Disponible" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" -msgstr "Cantidad de entrada para el cálculo del precio" - -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Ubicación predeterminada para partes de esta categoría" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "Estructural" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:128 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "Categoría de Pieza" + +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 +#: users/models.py:37 +msgid "Part Categories" +msgstr "Categorías de Piezas" + +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Ubicación predeterminada para piezas de esta categoría" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "Las piezas no pueden asignarse directamente a una categoría estructural, pero pueden asignarse a categorías hijas." + +#: part/models.py:133 msgid "Default keywords" msgstr "Palabras clave predeterminadas" -#: part/models.py:128 +#: part/models.py:133 msgid "Default keywords for parts in this category" -msgstr "Palabras clave por defecto para partes en esta categoría" +msgstr "Palabras clave por defecto para piezas en esta categoría" -#: part/models.py:133 stock/models.py:102 +#: part/models.py:138 stock/models.py:109 msgid "Icon" msgstr "Icono" -#: part/models.py:134 stock/models.py:103 +#: part/models.py:139 stock/models.py:110 msgid "Icon (optional)" msgstr "Icono (opcional)" -#: part/models.py:153 +#: part/models.py:158 msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" +msgstr "¡No puedes hacer que esta categoría de piezas sea estructural porque algunas piezas ya están asignadas!" -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 -#: part/templates/part/part_app_base.html:10 -msgid "Part Category" -msgstr "Categoría de parte" - -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 -#: users/models.py:37 -msgid "Part Categories" -msgstr "Categorías de parte" - -#: part/models.py:469 +#: part/models.py:466 msgid "Invalid choice for parent part" -msgstr "Opción no válida para la parte principal" +msgstr "Opción no válida para la pieza principal" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" -msgstr "La parte '{p1}' se utiliza en BOM para '{p2}' (recursivo)" +msgstr "La pieza '{p1}' se utiliza en la lista BOM para '{p2}' (recursivo)" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN debe coincidir con el patrón de regex {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" -msgstr "IPN duplicado no permitido en la configuración de partes" +msgstr "IPN duplicado no permitido en la configuración de piezas" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" -msgstr "" +msgstr "¡No se pueden asignar piezas a las categorías de piezas estructurales!" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Nombre de la pieza" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" -msgstr "Es plantilla" +msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" -msgstr "¿Es esta parte una parte de la plantilla?" +msgstr "¿Es esta pieza una 'pieza plantilla'?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" -msgstr "¿Es esta parte una variante de otra parte?" +msgstr "¿Es esta pieza una variante de otra pieza?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:834 -msgid "Part description" -msgstr "Descripción de la pieza" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" -msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" +msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda de piezas" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Categoría" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" -msgstr "Categoría de parte" +msgstr "Categoría de pieza" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" -msgstr "Número de parte interna" - -#: part/models.py:860 -msgid "Part revision or version number" -msgstr "Revisión de parte o número de versión" +msgstr "'Part Number' Interno (IPN)" #: part/models.py:886 +msgid "Part revision or version number" +msgstr "Revisión de la pieza o número de versión" + +#: part/models.py:912 msgid "Where is this item normally stored?" -msgstr "¿Dónde se almacena este elemento normalmente?" +msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" -msgstr "Proveedor por defecto" +msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" -msgstr "Parte de proveedor predeterminada" +msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" -msgstr "Expiración por defecto" +msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" -msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" +msgstr "Tiempo de expiración (en días) para los artículos de stock de esta pieza" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" -msgstr "Nivel mínimo de stock permitido" +msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" -msgstr "¿Se puede construir esta pieza a partir de otras piezas?" +msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" -msgstr "¿Se puede utilizar esta pieza para construir otras partes?" +msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" -msgstr "¿Esta parte tiene seguimiento de objetos únicos?" +msgstr "¿Esta pieza tiene seguimiento de artículos únicos?" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta pieza a proveedores externos?" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" -msgstr "¿Se puede vender esta pieza a los clientes?" +msgstr "¿Se puede entregar esta pieza a los clientes?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" -msgstr "¿Está activa esta parte?" +msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" -msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" +msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" -msgstr "Notas de parte" +msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" -msgstr "Suma de control BOM almacenada" - -#: part/models.py:998 -msgid "BOM checked by" -msgstr "BOM comprobado por" - -#: part/models.py:1000 -msgid "BOM checked date" -msgstr "Fecha BOM comprobada" - -#: part/models.py:1004 -msgid "Creation User" -msgstr "Creación de Usuario" - -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 -msgid "Last Stocktake" -msgstr "Último inventario" - -#: part/models.py:1869 -msgid "Sell multiple" -msgstr "Vender múltiples" - -#: part/models.py:2775 -msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:1024 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:1026 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:1030 +msgid "Creation User" +msgstr "" + +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 +msgid "Last Stocktake" +msgstr "Último Inventario" + +#: part/models.py:1912 +msgid "Sell multiple" +msgstr "Entrega múltiple" + +#: part/models.py:2837 +msgid "Currency used to cache pricing calculations" +msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" + +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" -msgstr "Costo mínimo de compra" +msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" -msgstr "" +msgstr "Precio mínimo de la pieza de proveedores externos" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" -msgstr "" +msgstr "Precio máximo de la pieza de proveedores externos" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" -msgstr "Costo mínimo de variante" +msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" -msgstr "Coste mínimo calculado de las partes variantes" - -#: part/models.py:2846 -msgid "Maximum Variant Cost" -msgstr "Costo máximo de variante" - -#: part/models.py:2847 -msgid "Calculated maximum cost of variant parts" -msgstr "" - -#: part/models.py:2853 -msgid "Calculated overall minimum cost" -msgstr "" - -#: part/models.py:2859 -msgid "Calculated overall maximum cost" -msgstr "" - -#: part/models.py:2864 -msgid "Minimum Sale Price" -msgstr "" - -#: part/models.py:2865 -msgid "Minimum sale price based on price breaks" -msgstr "" - -#: part/models.py:2870 -msgid "Maximum Sale Price" -msgstr "" - -#: part/models.py:2871 -msgid "Maximum sale price based on price breaks" -msgstr "" - -#: part/models.py:2876 -msgid "Minimum Sale Cost" -msgstr "" - -#: part/models.py:2877 -msgid "Minimum historical sale price" -msgstr "" - -#: part/models.py:2882 -msgid "Maximum Sale Cost" -msgstr "" - -#: part/models.py:2883 -msgid "Maximum historical sale price" -msgstr "" - -#: part/models.py:2901 -msgid "Part for stocktake" msgstr "" #: part/models.py:2908 -msgid "Total available stock at time of stocktake" +msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:63 -#: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 -msgid "Date" -msgstr "Fecha" +#: part/models.py:2909 +msgid "Calculated maximum cost of variant parts" +msgstr "" -#: part/models.py:2913 -msgid "Date stocktake was performed" +#: part/models.py:2915 +msgid "Calculated overall minimum cost" msgstr "" #: part/models.py:2921 -msgid "Additional notes" -msgstr "Notas adicionales" +msgid "Calculated overall maximum cost" +msgstr "" -#: part/models.py:2929 +#: part/models.py:2926 +msgid "Minimum Sale Price" +msgstr "" + +#: part/models.py:2927 +msgid "Minimum sale price based on price breaks" +msgstr "" + +#: part/models.py:2932 +msgid "Maximum Sale Price" +msgstr "" + +#: part/models.py:2933 +msgid "Maximum sale price based on price breaks" +msgstr "" + +#: part/models.py:2938 +msgid "Minimum Sale Cost" +msgstr "" + +#: part/models.py:2939 +msgid "Minimum historical sale price" +msgstr "" + +#: part/models.py:2944 +msgid "Maximum Sale Cost" +msgstr "" + +#: part/models.py:2945 +msgid "Maximum historical sale price" +msgstr "" + +#: part/models.py:2964 +msgid "Part for stocktake" +msgstr "" + +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 +msgid "Total available stock at time of stocktake" +msgstr "" + +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 +#: templates/InvenTree/settings/plugin.html:63 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 +msgid "Date" +msgstr "Fecha" + +#: part/models.py:2982 +msgid "Date stocktake was performed" +msgstr "" + +#: part/models.py:2990 +msgid "Additional notes" +msgstr "" + +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" -msgstr "Las plantillas de prueba sólo pueden ser creadas para partes rastreables" +msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" -msgstr "Ya existe una prueba con este nombre para esta parte" +msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" -msgstr "Nombre de prueba" +msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" -msgstr "Introduzca un nombre para la prueba" +msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" -msgstr "Requerido" +msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" -msgstr "¿Es necesario pasar esta prueba?" +msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" -msgstr "Requiere valor" +msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" -msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" +msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" -msgstr "Adjunto obligatorio" +msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3182 -msgid "Parameter template name must be unique" -msgstr "El nombre de parámetro en la plantilla tiene que ser único" - -#: part/models.py:3190 -msgid "Parameter Name" -msgstr "Nombre de Parámetro" - -#: part/models.py:3194 -msgid "Parameter Units" -msgstr "Unidad del Parámetro" - -#: part/models.py:3199 -msgid "Parameter description" -msgstr "" - -#: part/models.py:3232 -msgid "Parent Part" -msgstr "Parte principal" - -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 -msgid "Parameter Template" -msgstr "Plantilla de parámetro" - -#: part/models.py:3236 -msgid "Data" -msgstr "Datos" - -#: part/models.py:3236 -msgid "Parameter Value" -msgstr "Valor del parámetro" - -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 -msgid "Default Value" -msgstr "Valor predeterminado" - -#: part/models.py:3288 -msgid "Default Parameter Value" -msgstr "Valor de parámetro por defecto" - #: part/models.py:3325 -msgid "Part ID or part name" +msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3329 -msgid "Unique part ID value" +#: part/models.py:3333 +msgid "Parameter Name" msgstr "" #: part/models.py:3337 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:3342 +msgid "Parameter description" +msgstr "Descripción del parámetro" + +#: part/models.py:3375 +msgid "Parent Part" +msgstr "Pieza Superior" + +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:3379 +msgid "Data" +msgstr "" + +#: part/models.py:3379 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 +msgid "Default Value" +msgstr "" + +#: part/models.py:3431 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:3468 +msgid "Part ID or part name" +msgstr "" + +#: part/models.py:3472 +msgid "Unique part ID value" +msgstr "" + +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" -msgstr "Nivel" +msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" -msgstr "Seleccionar parte principal" +msgstr "Seleccionar pieza superior" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" -msgstr "Sub parte" +msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" -msgstr "Seleccionar parte a utilizar en BOM" +msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" -msgstr "Cantidad del artículo en BOM" +msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "Opcional" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" -msgstr "Este elemento BOM es opcional" +msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" -msgstr "Consumible" +msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Exceso" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "Cantidad estimada de desperdicio de construcción (absoluta o porcentaje)" +msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" -msgstr "Referencia de artículo de BOM" +msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" -msgstr "Notas del artículo de BOM" +msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" -msgstr "Suma de comprobación de la línea en BOM" +msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "Heredado" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "Este artículo BOM es heredado por BOMs para partes variantes" +msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" -msgstr "Permitir variantes" +msgstr "Permitir Variantes" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" +msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" -msgstr "La cantidad debe ser un valor entero para las partes rastreables" +msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" -msgstr "Debe especificar la subparte" +msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" -msgstr "Ítem de BOM sustituto" +msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" -msgstr "La parte sustituta no puede ser la misma que la parte principal" +msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" -msgstr "Artículo BOM superior" +msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" -msgstr "Sustituir parte" +msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" -msgstr "Parte 1" +msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" -msgstr "Parte 2" +msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" -msgstr "Seleccionar parte relacionada" +msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" -msgstr "Moneda de compra de ítem de stock" +msgstr "Moneda de compra de este artículo de stock" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" -msgstr "Parte original" +msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" -msgstr "Copiar Imagen" +msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" -msgstr "Copiar imagen desde la parte original" +msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" -msgstr "Copiar BOM" +msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" -msgstr "Copiar la factura de materiales de la parte original" +msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" -msgstr "Copiar Parámetros" +msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" -msgstr "Copiar datos del parámetro de la parte original" +msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" -msgstr "Cantidad Inicial de Stock" +msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" -msgstr "Duplicar Parte" +msgstr "Duplicar Pieza" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 -msgid "Update" -msgstr "Actualizar" +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 +msgid "Update" +msgstr "" + +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" -msgstr "Seleccionar parte de la que copiar BOM" +msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" -msgstr "Eliminar Datos Existentes" +msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" -msgstr "Eliminar elementos BOM existentes antes de copiar" +msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" -msgstr "Incluye Heredado" +msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" -msgstr "Incluye elementos BOM que son heredados de partes con plantillas" +msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" -msgstr "Limpiar BOM Existente" +msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" -msgstr "Varios resultados encontrados" +msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" -msgstr "No se encontraron partes coincidentes" +msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" -msgstr "La parte no está designada como componente" +msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" -msgstr "Cantidad no proporcionada" +msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" -msgstr "Cantidad no válida" +msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" -msgstr "Se requiere al menos un elemento BOM" +msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" -msgstr "Notificación por bajo stock" +msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "Cantidad Total" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." -msgstr "No tienes permiso para editar la lista de materiales." +msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" -msgstr "El BOM para %(part)s ha cambiado y debe ser validado.
" +msgid "The BOM this part has been changed, and must be validated" +msgstr "" #: part/templates/part/bom.html:17 #, python-format msgid "The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" -msgstr "El BOM para %(part)s fue revisado por última vez por %(checker)s el %(check_date)s" +msgstr "" #: part/templates/part/bom.html:21 #, python-format msgid "The BOM for %(part)s has not been validated." -msgstr "El BOM para %(part)s no ha sido validada." +msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" -msgstr "Acciones BOM" +msgstr "" #: part/templates/part/bom.html:34 msgid "Delete Items" -msgstr "Eliminar elementos" +msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" -msgstr "Estás suscrito a las notificaciones de esta categoría" - -#: part/templates/part/category.html:42 -msgid "Subscribe to notifications for this category" -msgstr "Suscribirse a las notificaciones de esta categoría" +msgstr "" #: part/templates/part/category.html:48 -msgid "Category Actions" -msgstr "Acciones de categoría" - -#: part/templates/part/category.html:53 -msgid "Edit category" -msgstr "Editar categoría" +msgid "Subscribe to notifications for this category" +msgstr "" #: part/templates/part/category.html:54 -msgid "Edit Category" -msgstr "Editar Categoría" - -#: part/templates/part/category.html:58 -msgid "Delete category" -msgstr "Eliminar categoría" +msgid "Category Actions" +msgstr "" #: part/templates/part/category.html:59 +msgid "Edit category" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Edit Category" +msgstr "" + +#: part/templates/part/category.html:64 +msgid "Delete category" +msgstr "" + +#: part/templates/part/category.html:65 msgid "Delete Category" -msgstr "Eliminar Categoría" +msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" -msgstr "Categoría de partes de nivel superior" +msgstr "Categoría de piezas de nivel superior" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Subcategorías" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" -msgstr "Partes (incluyendo subcategorías)" +msgstr "Piezas (incluyendo subcategorías)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" -msgstr "Crear nueva parte" +msgstr "Crear nueva pieza" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" -msgstr "Nueva Parte" +msgstr "Nueva Pieza" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" -msgstr "Opciones" +msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" -msgstr "Definir categoría" +msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" -msgstr "Definir Categoría" +msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "Imprimir Etiquetas" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" -msgstr "Parámetros de Parte" - -#: part/templates/part/category.html:228 -msgid "Create new part category" -msgstr "Crear nueva categoría de partes" +msgstr "Parámetros de Pieza" #: part/templates/part/category.html:229 +msgid "Create new part category" +msgstr "Crear nueva categoría de piezas" + +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Nueva Categoría" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" -msgstr "Crear Categoría de Parte" +msgstr "Crear Categoría para Piezas" #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" -msgstr "Importar Partes" +msgstr "Importar Piezas" #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." -msgstr "Hacer una copia de la parte '%(full_name)s'." +msgstr "Hacer una copia de la pieza '%(full_name)s'." #: part/templates/part/copy_part.html:14 #: part/templates/part/create_part.html:11 msgid "Possible Matching Parts" -msgstr "Posibles Partes coincidentes" +msgstr "Posibles Piezas Coincidentes" #: part/templates/part/copy_part.html:15 #: part/templates/part/create_part.html:12 msgid "The new part may be a duplicate of these existing parts" -msgstr "La nueva parte puede ser un duplicado de estas partes existentes" +msgstr "La nueva pieza puede ser un duplicado de estas piezas existentes" #: part/templates/part/create_part.html:17 #, python-format msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "%(full_name)s - %(desc)s (%(match_per)s%% coincidencia)" +msgstr "" #: part/templates/part/detail.html:20 msgid "Part Stock" -msgstr "Stock de parte" +msgstr "Stock de Piezas" #: part/templates/part/detail.html:44 msgid "Refresh scheduling data" -msgstr "" +msgstr "Actualizar datos de programación" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" -msgstr "Actualizar" +msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "Inventario" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" -msgstr "Plantillas de prueba de parte" +msgstr "Plantillas de Prueba para Pieza" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" -msgstr "Añadir Plantilla de Prueba" - -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 -msgid "Sales Order Allocations" -msgstr "Asignaciones de órdenes de venta" - -#: part/templates/part/detail.html:164 -msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 -msgid "Part Variants" -msgstr "Variantes de Parte" +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 +msgid "Sales Order Allocations" +msgstr "Asignaciones de Pedidos de Entrega" -#: part/templates/part/detail.html:183 -msgid "Create new variant" -msgstr "Crear nueva variante" +#: part/templates/part/detail.html:165 +msgid "Part Notes" +msgstr "Notas de la Pieza" + +#: part/templates/part/detail.html:180 +msgid "Part Variants" +msgstr "Variantes de la Pieza" #: part/templates/part/detail.html:184 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/detail.html:185 msgid "New Variant" -msgstr "Nueva Variante" +msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" -msgstr "Añadir nuevo parámetro" +msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" -msgstr "Partes relacionadas" +msgstr "Piezas Relacionadas" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" -msgstr "Añadir Relacionado" +msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Lista de Materiales" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" -msgstr "Exportar acciones" +msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" -msgstr "Exportar BOM" +msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" -msgstr "Imprimir informe BOM" +msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" -msgstr "Subir BOM" +msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" -msgstr "Validar BOM" +msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" -msgstr "Añadir artículo al BOM" +msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" -msgstr "Ensamblajes" +msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" -msgstr "Construcción de partes" +msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" -msgstr "Construir adjudicaciones de pedidos" +msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" -msgstr "Proveedores de piezas" +msgstr "Proveedores de Piezas" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" -msgstr "Fabricantes de piezas" +msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" -msgstr "Eliminar partes del fabricante" +msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" -msgstr "Partes relacionadas" +msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" -msgstr "Añadir artículos relacionados" +msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" -msgstr "Añadir plantilla de resultados de prueba" +msgstr "" #: part/templates/part/import_wizard/ajax_part_upload.html:29 #: part/templates/part/import_wizard/part_upload.html:14 @@ -5924,11 +6456,11 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:8 msgid "Return to Parts" -msgstr "Volver a los artículos" +msgstr "Volver a las Piezas" #: part/templates/part/import_wizard/part_upload.html:13 msgid "Import Parts from File" -msgstr "Importar artículos desde archivo" +msgstr "Importar Piezas desde Archivo" #: part/templates/part/import_wizard/part_upload.html:31 msgid "Requirements for part import" @@ -5948,27 +6480,27 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" -msgstr "Formato" +msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" -msgstr "Seleccionar formato de archivo" +msgstr "" #: part/templates/part/part_app_base.html:12 msgid "Part List" -msgstr "Listado de artículos" +msgstr "" #: part/templates/part/part_base.html:27 part/templates/part/part_base.html:31 msgid "You are subscribed to notifications for this part" -msgstr "Estás suscrito a las notificaciones de este artículo" +msgstr "" #: part/templates/part/part_base.html:35 msgid "Subscribe to notifications for this part" -msgstr "Suscríbete a las notificaciones de este artículo" +msgstr "" #: part/templates/part/part_base.html:49 msgid "Unink Barcode" @@ -5976,147 +6508,149 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" -msgstr "Imprimir etiqueta" +msgstr "Imprimir Etiqueta" #: part/templates/part/part_base.html:60 msgid "Show pricing information" -msgstr "Mostrar información de precios" +msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Acciones de stock" #: part/templates/part/part_base.html:72 msgid "Count part stock" -msgstr "Contar stock de piezas" +msgstr "" #: part/templates/part/part_base.html:78 msgid "Transfer part stock" -msgstr "Transferir stock de piezas" +msgstr "" #: part/templates/part/part_base.html:93 msgid "Part actions" -msgstr "Acciones para piezas" +msgstr "" #: part/templates/part/part_base.html:96 msgid "Duplicate part" -msgstr "Duplicar pieza" +msgstr "" #: part/templates/part/part_base.html:99 msgid "Edit part" -msgstr "Editar pieza" +msgstr "" #: part/templates/part/part_base.html:102 msgid "Delete part" -msgstr "Eliminar pieza" +msgstr "" #: part/templates/part/part_base.html:121 msgid "Part is a template part (variants can be made from this part)" -msgstr "La pieza es una pieza de plantilla (las variantes se pueden hacer a partir de esta pieza)" +msgstr "" #: part/templates/part/part_base.html:125 msgid "Part can be assembled from other parts" -msgstr "La pieza puede ser ensamblada desde otras piezas" +msgstr "" #: part/templates/part/part_base.html:129 msgid "Part can be used in assemblies" -msgstr "La pieza puede ser usada en ensamblajes" +msgstr "" #: part/templates/part/part_base.html:133 msgid "Part stock is tracked by serial number" -msgstr "El stock de esta pieza está rastreado por número de serie" +msgstr "" #: part/templates/part/part_base.html:137 msgid "Part can be purchased from external suppliers" -msgstr "La pieza puede ser comprada de proveedores externos" +msgstr "La pieza puede comprarse a proveedores externos" #: part/templates/part/part_base.html:141 msgid "Part can be sold to customers" -msgstr "La pieza puede ser vendida a clientes" +msgstr "La pieza puede ser entregada a los clientes" #: part/templates/part/part_base.html:147 -#: part/templates/part/part_base.html:155 -msgid "Part is virtual (not a physical part)" -msgstr "La pieza es virtual (no una pieza física)" +msgid "Part is not active" +msgstr "" #: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 msgid "Inactive" msgstr "Inactivo" +#: part/templates/part/part_base.html:155 +msgid "Part is virtual (not a physical part)" +msgstr "" + #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" -msgstr "Mostrar Detalles de Parte" +msgstr "Mostrar Detalles de la Pieza" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "Esta parte es una variante de %(link)s" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "Asignado a Pedidos" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" -msgstr "Puede construir" +msgstr "" #: part/templates/part/part_base.html:293 msgid "Minimum stock level" -msgstr "Nivel mínimo de stock" +msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" -msgstr "Rango de precios" +msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" -msgstr "Último Número Serial" +msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" -msgstr "Buscar número de serie" +msgstr "" + +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" -msgstr "Calcular" +msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" -msgstr "No se encontraron imágenes coincidentes" +msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" -msgstr "Ocultar Detalles de la Parte" +msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "Precios del Proveedor" @@ -6125,14 +6659,7 @@ msgstr "Precios del Proveedor" #: part/templates/part/part_pricing.html:95 #: part/templates/part/part_pricing.html:110 msgid "Unit Cost" -msgstr "Coste Unitario" - -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "Costo Total" +msgstr "" #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" @@ -6141,47 +6668,63 @@ msgstr "Ningún precio de proveedor disponible" #: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:87 #: part/templates/part/prices.html:240 msgid "BOM Pricing" -msgstr "Precios BOM" +msgstr "Precio de la Lista de Materiales (BOM)" #: part/templates/part/part_pricing.html:66 msgid "Unit Purchase Price" -msgstr "Precio de Compra Unitario" +msgstr "Precio de Compra por Unidad" #: part/templates/part/part_pricing.html:72 msgid "Total Purchase Price" -msgstr "Precio total de compra" +msgstr "" #: part/templates/part/part_pricing.html:83 msgid "No BOM pricing available" -msgstr "No hay precios BOM disponibles" +msgstr "No hay precio de la Lista de Materiales (BOM) disponible" #: part/templates/part/part_pricing.html:92 msgid "Internal Price" -msgstr "Precio Interno" +msgstr "" #: part/templates/part/part_pricing.html:123 msgid "No pricing information is available for this part." -msgstr "No hay información de precios disponible para esta parte." +msgstr "" #: part/templates/part/part_scheduling.html:14 msgid "Scheduled Quantity" -msgstr "" +msgstr "Cantidad Programada" #: part/templates/part/part_sidebar.html:11 msgid "Variants" -msgstr "Variantes" +msgstr "" + +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Inventario" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Precios" #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" -msgstr "" +msgstr "Programación" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" -msgstr "Plantillas de Prueba" +msgstr "" #: part/templates/part/part_thumb.html:11 msgid "Select from existing images" -msgstr "Seleccionar de imágenes existentes" +msgstr "" #: part/templates/part/prices.html:11 msgid "Pricing Overview" @@ -6191,13 +6734,13 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" -msgstr "Última actualización" +msgstr "Última Actualización" #: part/templates/part/prices.html:34 part/templates/part/prices.html:116 msgid "Price Category" @@ -6205,23 +6748,23 @@ msgstr "" #: part/templates/part/prices.html:35 part/templates/part/prices.html:117 msgid "Minimum" -msgstr "Mínimo" +msgstr "" #: part/templates/part/prices.html:36 part/templates/part/prices.html:118 msgid "Maximum" -msgstr "Máximo" +msgstr "" #: part/templates/part/prices.html:48 part/templates/part/prices.html:163 msgid "Internal Pricing" -msgstr "Precio Interno" +msgstr "" #: part/templates/part/prices.html:61 part/templates/part/prices.html:195 msgid "Purchase History" -msgstr "Historial de compras" +msgstr "" #: part/templates/part/prices.html:95 part/templates/part/prices.html:264 msgid "Variant Pricing" -msgstr "Precios variantes" +msgstr "" #: part/templates/part/prices.html:102 msgid "Overall Pricing" @@ -6229,7 +6772,7 @@ msgstr "" #: part/templates/part/prices.html:138 part/templates/part/prices.html:316 msgid "Sale History" -msgstr "Historial de ventas" +msgstr "" #: part/templates/part/prices.html:146 msgid "Sale price data is not available for this part" @@ -6244,11 +6787,11 @@ msgstr "" #: part/templates/part/prices.html:265 part/templates/part/prices.html:288 #: part/templates/part/prices.html:317 msgid "Jump to overview" -msgstr "Ir a la vista general" +msgstr "" #: part/templates/part/prices.html:169 msgid "Add Internal Price Break" -msgstr "Añadir salto de precio interno" +msgstr "" #: part/templates/part/prices.html:287 msgid "Sale Pricing" @@ -6258,98 +6801,93 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" -msgstr "Sin Stock" +msgstr "" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:158 msgid "Low Stock" -msgstr "Bajo Stock" +msgstr "" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" -msgstr "Volver al BOM" +msgstr "Volver a la Lista de Materiales (BOM)" #: part/templates/part/upload_bom.html:13 msgid "Upload Bill of Materials" -msgstr "Cargar Lista de Materiales" +msgstr "" #: part/templates/part/upload_bom.html:19 msgid "BOM upload requirements" -msgstr "Requisitos de subida BOM" +msgstr "" #: part/templates/part/upload_bom.html:23 #: part/templates/part/upload_bom.html:90 msgid "Upload BOM File" -msgstr "Subir archivo BOM" +msgstr "" #: part/templates/part/upload_bom.html:29 msgid "Submit BOM Data" -msgstr "Enviar datos BOM" +msgstr "" #: part/templates/part/upload_bom.html:37 msgid "Requirements for BOM upload" -msgstr "Requisitos para subir BOM" +msgstr "" #: part/templates/part/upload_bom.html:39 msgid "The BOM file must contain the required named columns as provided in the " -msgstr "El archivo BOM debe contener las columnas con nombre requeridos como se indica en el " +msgstr "El archivo dde Lista de Materiales (BOM) debe contener las columnas con nombre requeridos como se indica en el " #: part/templates/part/upload_bom.html:39 msgid "BOM Upload Template" -msgstr "Plantilla de subida BOM" +msgstr "" #: part/templates/part/upload_bom.html:40 msgid "Each part must already exist in the database" -msgstr "Cada parte debe existir en la base de datos" +msgstr "" #: part/templates/part/variant_part.html:9 msgid "Create new part variant" -msgstr "Crear nueva variante de pieza" +msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." -msgstr "Crear una nueva variante de la plantilla '%(full_name)s'." +msgid "Create a new variant part from this template" +msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" -msgstr "Base de datos desconocida" +msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" -msgstr "Coincidir Referencias" +msgstr "Concordar Referencias" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "Código QR de Parte" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" -msgstr "Seleccionar Imagen de Parte" +msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" -msgstr "Imagen de parte actualizada" +msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" -msgstr "Imagen de parte no encontrada" +msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" -msgstr "Precio de parte" +msgstr "" #: plugin/apps.py:55 msgid "Your environment has an outdated git version. This prevents InvenTree from loading plugin details." @@ -6357,11 +6895,11 @@ msgstr "" #: plugin/base/action/api.py:27 msgid "No action specified" -msgstr "No se especificó ninguna acción" +msgstr "" #: plugin/base/action/api.py:38 msgid "No matching action found" -msgstr "No se encontró ninguna acción coincidente" +msgstr "" #: plugin/base/barcodes/api.py:54 plugin/base/barcodes/api.py:110 msgid "Missing barcode data" @@ -6369,13 +6907,14 @@ msgstr "" #: plugin/base/barcodes/api.py:80 msgid "No match found for barcode data" -msgstr "No se encontró ninguna coincidencia para los datos del código de barras" +msgstr "" #: plugin/base/barcodes/api.py:84 msgid "Match found for barcode data" -msgstr "Coincidencia encontrada para datos de códigos de barras" +msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6411,12 +6950,12 @@ msgstr "" #: plugin/builtin/integration/core_notifications.py:39 #: plugin/builtin/integration/core_notifications.py:80 msgid "Enable email notifications" -msgstr "" +msgstr "Habilitar notificaciones por correo electrónico" #: plugin/builtin/integration/core_notifications.py:40 #: plugin/builtin/integration/core_notifications.py:81 msgid "Allow sending of emails for event notifications" -msgstr "" +msgstr "Habilitar el envío de correo electrónico para la notificación de eventos" #: plugin/builtin/integration/core_notifications.py:45 msgid "Enable slack notifications" @@ -6436,7 +6975,7 @@ msgstr "" #: plugin/builtin/integration/core_notifications.py:162 msgid "Open link" -msgstr "Abrir enlace" +msgstr "" #: plugin/models.py:33 msgid "Plugin Metadata" @@ -6448,230 +6987,235 @@ msgstr "" #: plugin/models.py:80 msgid "Plugin Configuration" -msgstr "Configuración del Plugin" +msgstr "" #: plugin/models.py:81 msgid "Plugin Configurations" -msgstr "Configuraciones del Plug-in" +msgstr "" #: plugin/models.py:86 templates/InvenTree/settings/plugin.html:61 msgid "Key" -msgstr "Clave" +msgstr "" #: plugin/models.py:87 msgid "Key of plugin" -msgstr "Clave del plugin" +msgstr "" #: plugin/models.py:95 msgid "PluginName of the plugin" -msgstr "Nombre del plugin" +msgstr "" #: plugin/models.py:101 msgid "Is the plugin active" -msgstr "Está activo el plugin" +msgstr "" #: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 msgid "Unvailable" -msgstr "No disponible" +msgstr "" #: plugin/models.py:164 msgid "Sample plugin" -msgstr "Complemento de ejemplo" +msgstr "" #: plugin/models.py:173 msgid "Builtin Plugin" -msgstr "Complemento integrado" +msgstr "" #: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" -msgstr "Complemento" +msgstr "Plugin" #: plugin/models.py:263 msgid "Method" -msgstr "Método" +msgstr "" #: plugin/plugin.py:257 msgid "No author found" -msgstr "No se encontró autor" +msgstr "" #: plugin/plugin.py:269 msgid "No date found" -msgstr "No se encontró fecha" - -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:452 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 msgid "Enable PO" -msgstr "Habilitar PO" +msgstr "" #: plugin/samples/integration/sample.py:40 msgid "Enable PO functionality in InvenTree interface" -msgstr "Habilitar la funcionalidad PO en la interfaz de InvenTree" +msgstr "" #: plugin/samples/integration/sample.py:45 msgid "API Key" -msgstr "Clave API" +msgstr "" #: plugin/samples/integration/sample.py:46 msgid "Key required for accessing external API" -msgstr "Clave necesaria para acceder a la API externa" +msgstr "" #: plugin/samples/integration/sample.py:49 msgid "Numerical" -msgstr "Numérico" +msgstr "" #: plugin/samples/integration/sample.py:50 msgid "A numerical setting" -msgstr "Una configuración numérica" +msgstr "" #: plugin/samples/integration/sample.py:55 msgid "Choice Setting" -msgstr "Configuración de Elección" +msgstr "" #: plugin/samples/integration/sample.py:56 msgid "A setting with multiple choices" -msgstr "Un ajuste con múltiples opciones" +msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" -msgstr "URL de origen" - -#: plugin/serializers.py:73 -msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "Fuente del paquete - puede ser un registro personalizado o una ruta VCS" - -#: plugin/serializers.py:78 -msgid "Package Name" -msgstr "Nombre de Paquete" - -#: plugin/serializers.py:79 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "Nombre del paquete Plug-in - también puede contener un indicador de versión" +msgstr "" #: plugin/serializers.py:82 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:87 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:88 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:91 msgid "Confirm plugin installation" -msgstr "Confirmar instalación del plugin" +msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "Esto instalará este plug-in en la instancia actual. La instancia entrará en mantenimiento." +msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" -msgstr "Instalación no confirmada" +msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" -msgstr "Debe proporcionar cualquier nombre de paquete de la URL" +msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" -msgstr "No se han proporcionado objetos válidos a la plantilla" +msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 -msgid "Template name" -msgstr "Nombre de la plantilla" - #: report/models.py:159 -msgid "Report template file" -msgstr "Plantilla de informe" +msgid "Template name" +msgstr "" -#: report/models.py:166 +#: report/models.py:165 +msgid "Report template file" +msgstr "" + +#: report/models.py:172 msgid "Report template description" msgstr "Descripción de la plantilla de informe" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" -msgstr "Número de revisión del informe (autoincremental)" +msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" -msgstr "Patrón para generar nombres de archivo" +msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" -msgstr "Plantilla de informe está habilitada" +msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Filtros de consulta de Stock (lista separada por comas de pares clave=valor)" +msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" -msgstr "Incluye Pruebas Instaladas" +msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" -msgstr "Incluye resultados de prueba para artículos de stock instalados dentro del artículo ensamblado" +msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" -msgstr "Crear filtros" +msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Crear filtros de consulta (lista separada por comas de pares clave=valor" +msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" -msgstr "Filtros de partes" +msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "Filtros de búsqueda de partes (lista separada por comas de pares clave=valor" +msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" -msgstr "Filtros de búsqueda de orden de compra" +msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" -msgstr "Filtros de búsqueda de pedidos de ventas" +msgstr "Filtros de búsqueda de pedidos de entrega" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" -msgstr "Fragmento" +msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" -msgstr "Archivo de reporte snippet" +msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" -msgstr "Descripción de archivo de fragmento" +msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" -msgstr "Activo" +msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" -msgstr "Reportar archivo de activos" +msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" -msgstr "Descripción del archivo de activos" +msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" @@ -6679,539 +7223,600 @@ msgstr "" #: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" -msgstr "Requerido para" +msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Precio Unitario" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Total" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" -msgstr "Artículo Stock Informe de prueba" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Número de serie" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" -msgstr "Resultados de la Prueba" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" -msgstr "Prueba" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" -msgstr "Resultado" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" -msgstr "Pasada" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" -msgstr "Fallo" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" -msgstr "Elementos instalados" +msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" -msgstr "ID de Ubicación" +msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "Ruta de Ubicación" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 -msgid "Supplier Part ID" -msgstr "ID Parte del Proveedor" +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:110 +msgid "Supplier Part ID" +msgstr "" + +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" -msgstr "Nombre del proveedor" +msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" -msgstr "" +msgstr "ID del Cliente" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" -msgstr "Instalado en" - -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 -msgid "Build ID" -msgstr "ID de construcción" - -#: stock/admin.py:99 -msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:115 +msgid "Build ID" +msgstr "" + +#: stock/admin.py:117 +msgid "Sales Order ID" +msgstr "ID de Pedido de Entrega" + +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" -msgstr "Fecha de Expiración" +msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" -msgstr "Cantidad requerida" +msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" -msgstr "Debe suministrarse una pieza válida" +msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "Propietario" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "Seleccionar Propietario" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "Tipo de pieza ('{pf}') debe ser {pe}" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "La cantidad debe ser 1 para el artículo con un número de serie" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "Número de serie no se puede establecer si la cantidad es mayor que 1" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "El objeto no puede pertenecer a sí mismo" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "El elemento debe tener una referencia de construcción si is_building=True" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "La referencia de la construcción no apunta al mismo objeto de parte" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "Artículo de stock padre" - -#: stock/models.py:658 -msgid "Base part" -msgstr "Parte base" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "Seleccione una parte del proveedor correspondiente para este artículo de stock" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicación de Stock" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Ubicaciones de Stock" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Seleccione el proveedor de este artículo" + +#: stock/models.py:688 msgid "Where is this stock item located?" -msgstr "¿Dónde se encuentra este artículo de stock?" +msgstr "¿Dónde se encuentra este artículo?" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" -msgstr "Empaquetar este elemento de stock se almacena en" +msgstr "Empaque utilizado para almacenar este artículo" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" -msgstr "¿Está este elemento instalado en otro elemento?" +msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" -msgstr "Número de serie para este elemento" - -#: stock/models.py:722 -msgid "Batch code for this stock item" -msgstr "Código de lote para este artículo de stock" - -#: stock/models.py:727 -msgid "Stock Quantity" -msgstr "Cantidad de Stock" +msgstr "" #: stock/models.py:734 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:739 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:746 msgid "Source Build" -msgstr "Build de origen" +msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" -msgstr "Build para este item de stock" +msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" -msgstr "Orden de compra de origen" +msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" -msgstr "Orden de compra para este artículo de stock" +msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" -msgstr "Orden de venta de destino" +msgstr "Pedido de Entrega de Destino" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "Fecha de caducidad del artículo de stock. El stock se considerará caducado después de esta fecha" +msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" -msgstr "Eliminar al agotar" +msgstr "Eliminar al agotarse" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" -msgstr "Eliminar este artículo de stock cuando se agoten las existencias" +msgstr "Eliminar este artículo cuando no queden más existencias" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" -msgstr "Notas del artículo de stock" +msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" -msgstr "Precio de compra único en el momento de la compra" +msgstr "Precio de compra por unidad en el momento de la compra" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" -msgstr "Convertido a parte" +msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" -msgstr "La parte no está establecida como rastreable" +msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" -msgstr "Cantidad debe ser un entero" +msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" -msgstr "La cantidad no debe exceder la cantidad disponible de existencias ({n})" +msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" -msgstr "Los números de serie deben ser una lista de enteros" +msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" -msgstr "La cantidad no coincide con los números de serie" +msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "Los números de serie ya existen: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" -msgstr "Artículo de stock ha sido asignado a un pedido de venta" +msgstr "Artículo de stock ha sido asignado a un pedido de entrega" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" -msgstr "Artículo de stock está instalado en otro artículo" +msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" -msgstr "Artículo de stock contiene otros artículos" +msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" -msgstr "Artículo de stock ha sido asignado a un cliente" +msgstr "El artículo de stock ha sido asignado a un cliente" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" -msgstr "El artículo de stock está en producción" +msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" -msgstr "Stock serializado no puede ser combinado" +msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" -msgstr "Artículos de Stock Duplicados" +msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" -msgstr "Los artículos de stock deben referirse a la misma parte" +msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" -msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" +msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" -msgstr "Los códigos de estado del stock deben coincidir" +msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" -msgstr "Stock no se puede mover porque no está en stock" +msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" -msgstr "Notas de entrada" +msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" -msgstr "Debe proporcionarse un valor para esta prueba" +msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" -msgstr "El archivo adjunto debe ser subido para esta prueba" +msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" -msgstr "Nombre del test" +msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" -msgstr "Resultado de la prueba" +msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" -msgstr "Valor de salida de prueba" +msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" -msgstr "Adjunto de resultados de prueba" +msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" -msgstr "Notas de prueba" +msgstr "" #: stock/serializers.py:75 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" -msgstr "Precio de compra de este artículo de stock" +msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" -msgstr "Introduzca el número de elementos de stock para serializar" +msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" +msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" -msgstr "Introduzca números de serie para nuevos elementos" +msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" -msgstr "Ubicación de stock de destino" +msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" -msgstr "Campo de nota opcional" +msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" -msgstr "Los números de serie no se pueden asignar a esta parte" +msgstr "Los números de serie no se pueden asignar a esta pieza" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Números de serie ya existen" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" -msgstr "Añadir nota de transacción (opcional)" +msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" -msgstr "La parte debe ser vendible" +msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" -msgstr "El artículo está asignado a una orden de venta" +msgstr "El artículo está asignado a un pedido de entrega" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" -msgstr "El artículo está asignado a una orden de creación" +msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" -msgstr "Cliente para asignar elementos de stock" +msgstr "Cliente a quien asignar los elementos de stock" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" -msgstr "Notas de asignación de stock" +msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" -msgstr "Debe proporcionarse una lista de artículos de stock" +msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" -msgstr "Notas de fusión de stock" +msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" -msgstr "Permitir fusionar artículos de stock con diferentes piezas de proveedor" +msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" -msgstr "Permitir estado no coincidente" +msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" -msgstr "Permitir fusionar elementos de stock con diferentes códigos de estado" +msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" -msgstr "Debe proporcionar al menos dos artículos de stock" +msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" -msgstr "Valor de clave primaria de Stock" +msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" -msgstr "Notas de transacción de stock" +msgstr "" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" -msgstr "Información de Seguimiento de Stock" +msgstr "" #: stock/templates/stock/item.html:69 msgid "Child Stock Items" -msgstr "Elementos de Stock Hijos" +msgstr "" #: stock/templates/stock/item.html:77 msgid "This stock item does not have any child items" -msgstr "Este artículo de stock no tiene ningún elemento secundario" +msgstr "" #: stock/templates/stock/item.html:86 #: stock/templates/stock/stock_sidebar.html:12 msgid "Test Data" -msgstr "Datos de Prueba" +msgstr "" #: stock/templates/stock/item.html:90 stock/templates/stock/item_base.html:66 msgid "Test Report" -msgstr "Informe de Prueba" +msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" -msgstr "Eliminar Datos de Prueba" +msgstr "" #: stock/templates/stock/item.html:98 msgid "Add Test Data" -msgstr "Añadir Datos de Prueba" +msgstr "" #: stock/templates/stock/item.html:147 msgid "Installed Stock Items" -msgstr "Elementos de Stock instalados" +msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" -msgstr "Instalar elemento de stock" +msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" -msgstr "Añadir Resultado de Prueba" +msgstr "" #: stock/templates/stock/item_base.html:34 msgid "Locate stock item" @@ -7219,307 +7824,314 @@ msgstr "" #: stock/templates/stock/item_base.html:52 templates/stock_table.html:21 msgid "Scan to Location" -msgstr "Escanear a la ubicación" +msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "Acciones de impresión" #: stock/templates/stock/item_base.html:76 msgid "Stock adjustment actions" -msgstr "Acciones de ajuste de stock" +msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "Contar stock" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" -msgstr "Añadir stock" +msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" -msgstr "Eliminar stock" +msgstr "" #: stock/templates/stock/item_base.html:86 msgid "Serialize stock" -msgstr "Serializar stock" +msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "Transferir stock" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "Asignar a cliente" #: stock/templates/stock/item_base.html:95 msgid "Return to stock" -msgstr "Regresar al stock" +msgstr "" #: stock/templates/stock/item_base.html:98 msgid "Uninstall stock item" -msgstr "Desinstalar artículo de stock" +msgstr "" #: stock/templates/stock/item_base.html:98 msgid "Uninstall" -msgstr "Desinstalar" +msgstr "" #: stock/templates/stock/item_base.html:102 msgid "Install stock item" -msgstr "Instalar elemento de stock" +msgstr "" #: stock/templates/stock/item_base.html:102 msgid "Install" -msgstr "Instalar" +msgstr "" #: stock/templates/stock/item_base.html:116 msgid "Convert to variant" -msgstr "Convertir a variante" +msgstr "" #: stock/templates/stock/item_base.html:119 msgid "Duplicate stock item" -msgstr "Duplicar artículo" +msgstr "" #: stock/templates/stock/item_base.html:121 msgid "Edit stock item" -msgstr "Elemento de stock editado" +msgstr "" #: stock/templates/stock/item_base.html:124 msgid "Delete stock item" -msgstr "Eliminar elemento de stock" +msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" -msgstr "Elemento padre" +msgstr "Elemento Superior" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" -msgstr "Ningún fabricante establecido" +msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "No estás en la lista de propietarios de este artículo. Este artículo de stock no puede ser editado." +msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "Solo lectura" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." -msgstr "Este artículo de stock está en producción y no puede ser editado." +msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." -msgstr "Editar el elemento de stock desde la vista de construcción." +msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "Este artículo de stock no ha pasado todas las pruebas requeridas" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" -msgstr "Este artículo de stock está asignado a la orden de venta" +msgstr "Este artículo de stock está asignado a la Petición de Entrega" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" -msgstr "Este artículo de stock está asignado al orden de construcción" +msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "Este artículo de stock está serializado - tiene un número de serie único y la cantidad no se puede ajustar." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" -msgstr "página anterior" +msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" -msgstr "Navegar al número de serie anterior" +msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" -msgstr "página siguiente" +msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" -msgstr "Navegar al siguiente número de serie" +msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" -msgstr "Ubicación no establecida" +msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" -msgstr "Pruebas" +msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "Este ítem expiró el %(item.expiry_date)s" +msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" -msgstr "Expirado" +msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "Este ítem expira el %(item.expiry_date)s" +msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" -msgstr "Desactualizado" +msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "Ningún inventario realizado" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" -msgstr "Editar Estado del Stock" +msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "Código QR del artículo de Stock" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" -msgstr "Enlazar código de barras al artículo de stock" +msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" -msgstr "Advertencia" +msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" -msgstr "Esta acción no se puede deshacer fácilmente" +msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" -msgstr "Convertir artículo de stock" +msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" -msgstr "Volver a Stock" +msgstr "" #: stock/templates/stock/item_serialize.html:5 msgid "Create serialized items from this stock item." -msgstr "Crear artículos serializados a partir de este artículo de stock." +msgstr "" #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." -msgstr "Seleccione la cantidad para serializar y números de serie únicos." +msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" -msgstr "" +msgstr "Localizar ubicación de stock" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" -msgstr "" +msgstr "Escanear artículos de stock en esta ubicación" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" -msgstr "" +msgstr "Buscar Artículos en Stock" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" -msgstr "" +msgstr "Buscar en Contenedor" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Acciones de ubicación" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Editar ubicación" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Eliminar ubicación" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "Ubicación de stock superior" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." -msgstr "No estás en la lista de propietarios de esta ubicación. Esta ubicación de stock no puede ser editada." +msgstr "" #: stock/templates/stock/location.html:163 #: stock/templates/stock/location.html:211 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" -msgstr "Sub-ubicación" - -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Ubicaciones de Stock" +msgstr "Sub-ubicaciones" #: stock/templates/stock/location.html:215 msgid "Create new stock location" -msgstr "Crear nueva ubicación de stock" +msgstr "" #: stock/templates/stock/location.html:216 msgid "New Location" -msgstr "Nueva Ubicación" +msgstr "Nueva ubicación" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" #: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." -msgstr "Cargando..." +msgstr "" #: stock/templates/stock/stock_sidebar.html:5 msgid "Stock Tracking" -msgstr "Seguimiento de Stock" +msgstr "" #: stock/templates/stock/stock_sidebar.html:8 msgid "Allocations" -msgstr "Asignaciones" +msgstr "" #: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" -msgstr "Elementos secundarios" - -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "Código QR de ubicación de stock" +msgstr "" #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "Permiso Denegado" +msgstr "" #: templates/403.html:15 msgid "You do not have permission to view this page." -msgstr "No tiene permisos para ver esta página." +msgstr "" #: templates/403_csrf.html:11 msgid "Authentication Failure" @@ -7529,21 +8141,22 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" -msgstr "Iniciar sesión" +msgstr "" #: templates/404.html:6 templates/404.html:12 msgid "Page Not Found" -msgstr "Página No Encontrada" +msgstr "" #: templates/404.html:15 msgid "The requested page does not exist" -msgstr "La página solicitada no existe" +msgstr "" #: templates/500.html:6 templates/500.html:12 msgid "Internal Server Error" -msgstr "Error Interno Del Servidor" +msgstr "" #: templates/500.html:15 #, python-format @@ -7552,79 +8165,79 @@ msgstr "" #: templates/500.html:16 msgid "Refer to the error log in the admin interface for further details" -msgstr "Consulte el registro de errores en la interfaz de administración para más detalles" +msgstr "" #: templates/503.html:11 templates/503.html:34 msgid "Site is in Maintenance" -msgstr "El Sitio está en Mantenimiento" +msgstr "" #: templates/503.html:40 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "El sitio está actualmente en mantenimiento y debería estar listo pronto!" +msgstr "" #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "Índice" +msgstr "" #: templates/InvenTree/index.html:88 msgid "Subscribed Parts" -msgstr "Partes Suscritas" +msgstr "" #: templates/InvenTree/index.html:98 msgid "Subscribed Categories" -msgstr "Categorías Suscritas" +msgstr "" #: templates/InvenTree/index.html:108 msgid "Latest Parts" -msgstr "Últimas Partes" +msgstr "" #: templates/InvenTree/index.html:119 msgid "BOM Waiting Validation" -msgstr "Validación de BOM en espera" +msgstr "" #: templates/InvenTree/index.html:145 msgid "Recently Updated" -msgstr "Actualizado Recientemente" +msgstr "" #: templates/InvenTree/index.html:168 msgid "Depleted Stock" -msgstr "Stock Agotado" +msgstr "" #: templates/InvenTree/index.html:178 msgid "Required for Build Orders" -msgstr "Requerido para construir pedidos" +msgstr "" #: templates/InvenTree/index.html:191 msgid "Expired Stock" -msgstr "Stock Caducado" +msgstr "" #: templates/InvenTree/index.html:202 msgid "Stale Stock" -msgstr "Stock Obsoleto" +msgstr "" #: templates/InvenTree/index.html:224 msgid "Build Orders In Progress" -msgstr "Pedidos en curso" +msgstr "" #: templates/InvenTree/index.html:235 msgid "Overdue Build Orders" -msgstr "Órdenes de construcción atrasadas" +msgstr "" #: templates/InvenTree/index.html:255 msgid "Outstanding Purchase Orders" -msgstr "Órdenes de Compra Pendientes" +msgstr "" #: templates/InvenTree/index.html:266 msgid "Overdue Purchase Orders" -msgstr "Pedidos de Compra Atrasados" +msgstr "" #: templates/InvenTree/index.html:286 msgid "Outstanding Sales Orders" -msgstr "Pedidos de Venta Pendientes" +msgstr "Pedidos de Entrega Pendientes" #: templates/InvenTree/index.html:297 msgid "Overdue Sales Orders" -msgstr "Pedidos de Venta Atrasados" +msgstr "Pedidos de Entrega Atrasados" #: templates/InvenTree/index.html:312 msgid "InvenTree News" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "Notificaciones" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7681,33 +8300,32 @@ msgstr "" #: templates/InvenTree/search.html:8 msgid "Search Results" -msgstr "Resultados de Búsqueda" +msgstr "" #: templates/InvenTree/settings/barcode.html:8 msgid "Barcode Settings" -msgstr "Ajustes de Código de Barras" +msgstr "Ajustes de códigos de barras" #: templates/InvenTree/settings/build.html:8 msgid "Build Order Settings" -msgstr "Configuración de Pedido de Trabajo" +msgstr "" #: templates/InvenTree/settings/category.html:7 msgid "Category Settings" -msgstr "Ajustes de Categoría" +msgstr "Ajustes de categorías" #: templates/InvenTree/settings/global.html:9 msgid "Server Settings" -msgstr "Configuración del Servidor" +msgstr "" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 msgid "Label Settings" -msgstr "Ajustes de Etiqueta" +msgstr "Ajustes de etiquetas" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" -msgstr "Configuración de Inicio de Sesión" +msgstr "Inicio de sesión" #: templates/InvenTree/settings/login.html:16 msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" @@ -7716,33 +8334,34 @@ msgstr "" #: templates/InvenTree/settings/login.html:26 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" -msgstr "Registrarse" +msgstr "" #: templates/InvenTree/settings/login.html:35 msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" -msgstr "Ajustes" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "Direcciones URL" +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format msgid "The Base-URL for this plugin is %(base)s." -msgstr "La URL base para este plugin es %(base)s." +msgstr "" #: templates/InvenTree/settings/mixins/urls.html:23 msgid "Open in new tab" -msgstr "Abrir en una pestaña nueva" +msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "Ajustes de notificaciones" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -7750,38 +8369,46 @@ msgstr "" #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" -msgstr "Ajustes de Parte" +msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" -msgstr "Importar Parte" +msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" -msgstr "Importar Parte" +msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" -msgstr "Plantillas de Parámetros de Partes" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" -msgstr "Ajustes del Plugin" +msgstr "Ajustes de plugins" #: templates/InvenTree/settings/plugin.html:16 msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "" +msgstr "Cambiar la siguiente configuración requerirá reiniciar inmediatamente el servidor. Tenga precaución al hacer cambios con usuarios activos." #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" -msgstr "" +msgstr "Plugins" #: templates/InvenTree/settings/plugin.html:44 #: templates/js/translated/plugin.js:16 msgid "Install Plugin" -msgstr "Instalar Plugin" +msgstr "Instalar plugin" #: templates/InvenTree/settings/plugin.html:52 msgid "External plugins are not enabled for this InvenTree installation" @@ -7790,7 +8417,7 @@ msgstr "" #: templates/InvenTree/settings/plugin.html:64 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" -msgstr "Versión" +msgstr "" #: templates/InvenTree/settings/plugin.html:72 msgid "Active plugins" @@ -7798,20 +8425,20 @@ msgstr "" #: templates/InvenTree/settings/plugin.html:80 msgid "Inactive plugins" -msgstr "Plugins inactivos" +msgstr "" #: templates/InvenTree/settings/plugin.html:94 msgid "Plugin Error Stack" -msgstr "Pila de Error de Plugin" +msgstr "" #: templates/InvenTree/settings/plugin.html:103 msgid "Stage" -msgstr "Etapa" +msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" -msgstr "Mensaje" +msgstr "" #: templates/InvenTree/settings/plugin_details.html:32 #: templates/InvenTree/settings/plugin_settings.html:101 @@ -7820,35 +8447,35 @@ msgstr "" #: templates/InvenTree/settings/plugin_details.html:38 msgid "Sample" -msgstr "Muestra" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" -msgstr "Información de Plugin" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:48 msgid "no version information supplied" -msgstr "no se proporcionó información de versión" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:62 msgid "License" -msgstr "Licencia" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:71 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "La información del código es extraída del último git commit para este plugin. Puede que no refleje los números de versión oficiales o la información, pero sí el código actual en ejecución." +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:77 msgid "Package information" -msgstr "Información del paquete" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:83 msgid "Installation method" -msgstr "Método de instalación" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:86 msgid "This plugin was installed as a package" -msgstr "Este plugin fue instalado como un paquete" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:88 msgid "This plugin was found in a local server path" @@ -7856,7 +8483,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:94 msgid "Installation path" -msgstr "Ruta de instalación" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:102 msgid "This is a builtin plugin which cannot be disabled" @@ -7864,199 +8491,206 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:107 msgid "Commit Author" -msgstr "Autor del Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:111 #: templates/about.html:36 msgid "Commit Date" -msgstr "Fecha del Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:115 #: templates/about.html:29 msgid "Commit Hash" -msgstr "Hash de Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:119 msgid "Commit Message" -msgstr "Mensaje de Commit" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:127 msgid "Sign Status" -msgstr "Estado de Firma" +msgstr "" #: templates/InvenTree/settings/plugin_settings.html:132 msgid "Sign Key" -msgstr "Firma de clave" +msgstr "" #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" -msgstr "Ajustes de Orden de Compra" +msgstr "" #: templates/InvenTree/settings/pricing.html:7 msgid "Pricing Settings" +msgstr "Configuración de Precios" + +#: templates/InvenTree/settings/pricing.html:34 +msgid "Exchange Rates" +msgstr "Conversión de divisas" + +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "Actualizar" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "Última actualización" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 -msgid "Exchange Rates" -msgstr "Tipos de Cambio" - -#: templates/InvenTree/settings/pricing.html:37 -msgid "Update Now" -msgstr "Actualizar Ahora" - -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 -msgid "Last Update" -msgstr "Última Actualización" - -#: templates/InvenTree/settings/pricing.html:49 -msgid "Never" -msgstr "Nunca" - #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" -msgstr "Ajustes del Informe" +msgstr "Ajustes de informes" + +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" #: templates/InvenTree/settings/setting.html:31 msgid "No value set" -msgstr "Ningún valor establecido" +msgstr "" #: templates/InvenTree/settings/setting.html:44 msgid "Edit setting" -msgstr "Editar ajustes" +msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" -msgstr "Editar Configuración del Plugin" +msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" -msgstr "Editar Configuración Global" - -#: templates/InvenTree/settings/settings.html:125 -msgid "Edit User Setting" -msgstr "Editar Configuración de Usuario" - -#: templates/InvenTree/settings/settings.html:196 -msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_js.html:65 +msgid "Edit User Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "Tasa" + +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" -msgstr "No hay plantillas de parámetros de categoría" +msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" -msgstr "Editar Plantilla" +msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" -msgstr "Eliminar Plantilla" +msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "Crear plantilla de parámetro de categoría" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" -msgstr "Eliminar plantilla de parámetro de categoría" +msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" -msgstr "No se encontraron plantillas de parámetros de parte" +msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" -msgstr "Identificación" +msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" -msgstr "Crear plantilla Parámetro de Parte" +msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" -msgstr "Crear plantilla Parámetro de Parte" +msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" -msgstr "Eliminar Plantilla de Parámetros de Parte" +msgstr "" #: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" -msgstr "Configuración del Usuario" +msgstr "Ajustes del usuario" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Configuración de la Cuenta" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Ajuste de Visualización" +msgid "Display" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" -msgstr "Página de Inicio" +msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Ajustes de Búsqueda" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "Impresión de etiquetas" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" -msgstr "Informando" +msgstr "Informes" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" -msgstr "Configuración Global" +msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" -msgstr "Configuración del Servidor" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "Categorías" #: templates/InvenTree/settings/so.html:7 msgid "Sales Order Settings" -msgstr "Configuración de orden de venta" +msgstr "Configuración de Pedidos de Entrega" #: templates/InvenTree/settings/stock.html:7 msgid "Stock Settings" msgstr "Configuración de Stock" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Ajustes de la cuenta" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 msgid "Change Password" -msgstr "Cambiar Contraseña" +msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "Editar" @@ -8074,27 +8708,27 @@ msgstr "Apellido" #: templates/InvenTree/settings/user.html:54 msgid "The following email addresses are associated with your account:" -msgstr "Las siguientes direcciones de correo electrónico están asociadas con tu cuenta:" +msgstr "" #: templates/InvenTree/settings/user.html:75 msgid "Verified" -msgstr "Verificado" +msgstr "" #: templates/InvenTree/settings/user.html:77 msgid "Unverified" -msgstr "Sin verificar" +msgstr "" #: templates/InvenTree/settings/user.html:79 msgid "Primary" -msgstr "Principal" +msgstr "" #: templates/InvenTree/settings/user.html:85 msgid "Make Primary" -msgstr "Hacer Principal" +msgstr "" #: templates/InvenTree/settings/user.html:86 msgid "Re-send Verification" -msgstr "Reenviar verificación" +msgstr "" #: templates/InvenTree/settings/user.html:95 msgid "Warning:" @@ -8102,23 +8736,23 @@ msgstr "Advertencia:" #: templates/InvenTree/settings/user.html:96 msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "Actualmente no tiene ninguna dirección de correo electrónico configurada. Realmente deberías añadir una dirección de correo electrónico para que puedas recibir notificaciones, restablecer tu contraseña, etc." +msgstr "Actualmente no tienes ninguna dirección de correo electrónico configurada. Es necesario tener una para recibir notificaciones, restablecer tu contraseña, etc." #: templates/InvenTree/settings/user.html:104 msgid "Add Email Address" -msgstr "Añadir correo electrónico" +msgstr "Añadir dirección de correo electrónico" #: templates/InvenTree/settings/user.html:109 msgid "Add Email" -msgstr "Agregar Email" +msgstr "Añadir dirección" #: templates/InvenTree/settings/user.html:117 msgid "Social Accounts" -msgstr "Cuentas Sociales" +msgstr "" #: templates/InvenTree/settings/user.html:122 msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "Puede iniciar sesión en su cuenta utilizando cualquiera de las siguientes cuentas de terceros:" +msgstr "" #: templates/InvenTree/settings/user.html:158 msgid "There are no social network accounts connected to this account." @@ -8126,15 +8760,15 @@ msgstr "" #: templates/InvenTree/settings/user.html:164 msgid "Add a 3rd Party Account" -msgstr "Añadir una cuenta de terceros" +msgstr "" #: templates/InvenTree/settings/user.html:174 msgid "Multifactor" -msgstr "" +msgstr "Autenticación multifactor" #: templates/InvenTree/settings/user.html:179 msgid "You have these factors available:" -msgstr "Tienes estos factores disponibles:" +msgstr "" #: templates/InvenTree/settings/user.html:189 msgid "TOTP" @@ -8142,7 +8776,7 @@ msgstr "" #: templates/InvenTree/settings/user.html:195 msgid "Static" -msgstr "Estático" +msgstr "" #: templates/InvenTree/settings/user.html:204 msgid "Multifactor authentication is not configured for your account" @@ -8154,31 +8788,31 @@ msgstr "Cambiar factores" #: templates/InvenTree/settings/user.html:212 msgid "Setup multifactor" -msgstr "Configurar factor múltiple" +msgstr "Configurar factor" #: templates/InvenTree/settings/user.html:214 msgid "Remove multifactor" -msgstr "Remover factor múltiple" +msgstr "Eliminar factor" #: templates/InvenTree/settings/user.html:222 msgid "Active Sessions" -msgstr "Sesiones Activas" +msgstr "Sesiones activas" #: templates/InvenTree/settings/user.html:228 msgid "Log out active sessions (except this one)" -msgstr "Cerrar sesiones activas (excepto esta)" +msgstr "Expulsa a los usuarios activos (excepto a ti)" #: templates/InvenTree/settings/user.html:229 msgid "Log Out Active Sessions" -msgstr "Cerrar Sesiones Activas" +msgstr "Cerrar sesiones activas" #: templates/InvenTree/settings/user.html:238 msgid "unknown on unknown" -msgstr "desconocido en desconocido" +msgstr "" #: templates/InvenTree/settings/user.html:239 msgid "unknown" -msgstr "desconocido" +msgstr "" #: templates/InvenTree/settings/user.html:243 msgid "IP Address" @@ -8190,21 +8824,25 @@ msgstr "Dispositivo" #: templates/InvenTree/settings/user.html:245 msgid "Last Activity" -msgstr "Última Actividad" +msgstr "Última actividad" #: templates/InvenTree/settings/user.html:258 #, python-format msgid "%(time)s ago (this session)" -msgstr "%(time)s atrás (esta sesión)" +msgstr "" #: templates/InvenTree/settings/user.html:260 #, python-format msgid "%(time)s ago" -msgstr "%(time)s atrás" +msgstr "" #: templates/InvenTree/settings/user.html:272 msgid "Do you really want to remove the selected email address?" -msgstr "¿Realmente desea eliminar la dirección de correo electrónico seleccionada?" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Ajustes de Visualización" #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" @@ -8237,7 +8875,7 @@ msgstr "No hay traducciones disponibles" #: templates/InvenTree/settings/user_display.html:92 msgid "Set Language" -msgstr "Definir Idioma" +msgstr "Establecer Idioma" #: templates/InvenTree/settings/user_display.html:95 msgid "Some languages are not complete" @@ -8245,7 +8883,7 @@ msgstr "Algunos idiomas no están completos" #: templates/InvenTree/settings/user_display.html:97 msgid "Show only sufficent" -msgstr "Mostrar solo el contenido" +msgstr "" #: templates/InvenTree/settings/user_display.html:99 msgid "and hidden." @@ -8253,7 +8891,7 @@ msgstr "y oculto." #: templates/InvenTree/settings/user_display.html:99 msgid "Show them too" -msgstr "Mostrar también" +msgstr "Mostrarlos también" #: templates/InvenTree/settings/user_display.html:106 msgid "Help the translation efforts!" @@ -8261,99 +8899,99 @@ msgstr "¡Ayuda a los esfuerzos de traducción!" #: templates/InvenTree/settings/user_display.html:107 msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "" +msgstr "La aplicación web es traducida por una comunidad de voluntarios a través de crowdin. Tus contribuciones serán bienvenidas." #: templates/InvenTree/settings/user_display.html:108 msgid "InvenTree Translation Project" -msgstr "" +msgstr "Participar en el Proyecto de Traducción de InvenTree" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" -msgstr "Ajustes de página de inicio" +msgstr "Ajustes de la página de inicio" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Ajustes de búsqueda" #: templates/about.html:9 msgid "InvenTree Version" -msgstr "Versión de InvenTree" +msgstr "" #: templates/about.html:14 msgid "Development Version" -msgstr "Versión de Desarrollo" +msgstr "" #: templates/about.html:17 msgid "Up to Date" -msgstr "Actualizado" +msgstr "" #: templates/about.html:19 msgid "Update Available" -msgstr "Actualización Disponible" +msgstr "" #: templates/about.html:42 msgid "InvenTree Documentation" -msgstr "Documentación de InvenTree" +msgstr "" #: templates/about.html:47 msgid "API Version" -msgstr "Versión API" +msgstr "" #: templates/about.html:52 msgid "Python Version" -msgstr "Versión de Python" +msgstr "" #: templates/about.html:57 msgid "Django Version" -msgstr "Versión de Django" +msgstr "" #: templates/about.html:62 msgid "View Code on GitHub" -msgstr "Ver código en GitHub" +msgstr "" #: templates/about.html:67 msgid "Credits" -msgstr "Créditos" +msgstr "" #: templates/about.html:72 msgid "Mobile App" -msgstr "Aplicación Móvil" +msgstr "" #: templates/about.html:77 msgid "Submit Bug Report" -msgstr "Enviar Informe de Error" +msgstr "" #: templates/about.html:84 templates/clip.html:4 msgid "copy to clipboard" -msgstr "copiar al portapapeles" +msgstr "" #: templates/about.html:84 msgid "copy version information" -msgstr "copiar información de versión" +msgstr "" #: templates/account/email_confirm.html:6 #: templates/account/email_confirm.html:10 msgid "Confirm Email Address" -msgstr "Confirmar Email" +msgstr "" #: templates/account/email_confirm.html:16 #, python-format msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "Confirme que %(email)s es una dirección de correo electrónico para el usuario %(user_display)s." +msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" -msgstr "Confirmar" +msgstr "" #: templates/account/email_confirm.html:30 #, python-format msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "Este enlace de confirmación de correo electrónico ha caducado o no es válido. Por favor, envíe un nuevo correo electrónico de solicitud de confirmación." +msgstr "" #: templates/account/login.html:6 templates/account/login.html:17 #: templates/account/login.html:38 templates/socialaccount/login.html:4 msgid "Sign In" -msgstr "Ingresar" +msgstr "" #: templates/account/login.html:21 msgid "Not a member?" @@ -8363,11 +9001,11 @@ msgstr "" #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:20 msgid "Sign Up" -msgstr "Registrarse" +msgstr "" #: templates/account/login.html:45 msgid "Forgot Password?" -msgstr "¿Ha olvidado la contraseña?" +msgstr "" #: templates/account/login.html:53 msgid "or log in with" @@ -8376,55 +9014,55 @@ msgstr "" #: templates/account/logout.html:5 templates/account/logout.html:8 #: templates/account/logout.html:20 msgid "Sign Out" -msgstr "Cerrar Sesión" +msgstr "" #: templates/account/logout.html:10 msgid "Are you sure you want to sign out?" -msgstr "¿Está seguro de que desea salir?" +msgstr "" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 #: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" -msgstr "" +msgstr "Volver al sitio" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "Restablecer Contraseña" +msgstr "" #: templates/account/password_reset.html:18 msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." -msgstr "¿Olvidó su contraseña? Introduzca su dirección de correo electrónico a continuación y le enviaremos un correo electrónico que le permita restablecerla." +msgstr "" #: templates/account/password_reset.html:23 msgid "Reset My Password" -msgstr "Reestablecer mi Contraseña" +msgstr "" #: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." -msgstr "Esta función está actualmente deshabilitada. Por favor, póngase en contacto con un administrador." +msgstr "" #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "Token Incorrecto" +msgstr "" #: templates/account/password_reset_from_key.html:11 #, python-format msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "El enlace de restablecimiento de contraseña no era válido, posiblemente porque ya ha sido utilizado. Por favor, solicite un nuevo restablecimiento de contraseña." +msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "Cambiar contraseña" +msgstr "" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." -msgstr "Se ha cambiado la contraseña." +msgstr "" #: templates/account/signup.html:13 #, python-format msgid "Already have an account? Then please sign in." -msgstr "¿Ya tienes una cuenta? Entonces inicia sesión." +msgstr "" #: templates/account/signup.html:28 msgid "Use a SSO-provider for signup" @@ -8447,23 +9085,23 @@ msgstr "" #: templates/admin_button.html:8 msgid "View in administration panel" -msgstr "Ver en el panel de administración" +msgstr "" #: templates/allauth_2fa/authenticate.html:5 msgid "Two-Factor Authentication" -msgstr "Autenticación de dos factores" +msgstr "" #: templates/allauth_2fa/authenticate.html:13 msgid "Authenticate" -msgstr "Autenticar" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:6 msgid "Two-Factor Authentication Backup Tokens" -msgstr "Tokens de autenticación de doble factor" +msgstr "" #: templates/allauth_2fa/backup_tokens.html:17 msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "Se han generado tokens de copia de seguridad, pero no se revelan aquí por razones de seguridad. Pulse el botón de abajo para generar nuevos." +msgstr "" #: templates/allauth_2fa/backup_tokens.html:20 msgid "No backup tokens are available. Press the button below to generate some." @@ -8475,11 +9113,11 @@ msgstr "" #: templates/allauth_2fa/remove.html:6 msgid "Disable Two-Factor Authentication" -msgstr "Deshabilitar autenticación de dos factores" +msgstr "" #: templates/allauth_2fa/remove.html:9 msgid "Are you sure?" -msgstr "¿Está seguro?" +msgstr "" #: templates/allauth_2fa/remove.html:17 msgid "Disable 2FA" @@ -8487,7 +9125,7 @@ msgstr "" #: templates/allauth_2fa/setup.html:6 msgid "Setup Two-Factor Authentication" -msgstr "Configurar Autenticación de Dos Factores" +msgstr "Configurar autenticación de dos factores" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" @@ -8503,42 +9141,42 @@ msgstr "Paso 2" #: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "Ingrese un token generado por la aplicación:" +msgstr "Ingresa un token generado por la aplicación:" #: templates/allauth_2fa/setup.html:37 msgid "Verify" msgstr "Verificar" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "Agregar Enlace" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" -msgstr "Añadir archivo adjunto" +msgstr "Añadir Archivo Adjunto" #: templates/attachment_table.html:11 msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" -msgstr "Reinicio del Servidor Requerido" +msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" -msgstr "Se ha cambiado una opción de configuración que requiere reiniciar el servidor" +msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" -msgstr "Póngase en contacto con su administrador para más información" - -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" msgstr "" #: templates/email/build_order_completed.html:9 @@ -8547,255 +9185,248 @@ msgstr "" #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" -msgstr "" +msgstr "Haga clic en el siguiente enlace para ver este pedido" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "Se requiere stock para el siguiente orden de trabajo" +msgstr "" #: templates/email/build_order_required_stock.html:8 #, python-format msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "Orden de trabajo %(build)s - creando %(quantity)s x %(part)s" +msgstr "" #: templates/email/build_order_required_stock.html:10 msgid "Click on the following link to view this build order" -msgstr "Haga clic en el siguiente enlace para ver esta orden de trabajo" +msgstr "" #: templates/email/build_order_required_stock.html:14 msgid "The following parts are low on required stock" -msgstr "Las siguientes partes están bajas en stock requerido" +msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" -msgstr "Cantidad requerida" +msgstr "" #: templates/email/build_order_required_stock.html:38 #: templates/email/low_stock_notification.html:31 msgid "You are receiving this email because you are subscribed to notifications for this part " -msgstr "Estás recibiendo este correo electrónico porque estás suscrito a las notificaciones de esta parte " +msgstr "" #: templates/email/low_stock_notification.html:9 msgid "Click on the following link to view this part" -msgstr "Haga clic en el siguiente enlace para ver esta pieza" - -#: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 -msgid "Minimum Quantity" -msgstr "Cantidad Mínima" - -#: templates/expand_rows.html:3 -msgid "Expand all rows" msgstr "" -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/email/low_stock_notification.html:19 +#: templates/js/translated/part.js:2753 +msgid "Minimum Quantity" +msgstr "" + +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" -msgstr "Sin Respuesta" +msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" -msgstr "No hay respuesta del servidor InvenTree" - -#: templates/js/translated/api.js:202 -msgid "Error 400: Bad request" -msgstr "Error 400: Solicitud incorrecta" - -#: templates/js/translated/api.js:203 -msgid "API request returned error code 400" -msgstr "La solicitud API devolvió el código de error 400" - -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 -msgid "Error 401: Not Authenticated" -msgstr "Error 401: No autenticado" - -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 -msgid "Authentication credentials not supplied" -msgstr "Credenciales de autenticación no suministradas" - -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 -msgid "Error 403: Permission Denied" -msgstr "Error 403: Permiso Denegado" - -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 -msgid "You do not have the required permissions to access this function" -msgstr "No tiene los permisos necesarios para acceder a esta función" - -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 -msgid "Error 404: Resource Not Found" -msgstr "Error 404: Recurso No Encontrado" - -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 -msgid "The requested resource could not be located on the server" -msgstr "El recurso solicitado no se pudo encontrar en el servidor" - -#: templates/js/translated/api.js:222 -msgid "Error 405: Method Not Allowed" -msgstr "Error 405: Método no Permitido" - -#: templates/js/translated/api.js:223 -msgid "HTTP method not allowed at URL" -msgstr "Método HTTP no permitido en URL" - -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 -msgid "Error 408: Timeout" -msgstr "Error 408: Tiempo de espera agotado" - -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 -msgid "Connection timeout while requesting data from server" -msgstr "Tiempo de espera de conexión agotado al solicitar datos del servidor" +msgstr "" #: templates/js/translated/api.js:231 -msgid "Unhandled Error Code" -msgstr "Código de error no controlado" +msgid "Error 400: Bad request" +msgstr "" #: templates/js/translated/api.js:232 -msgid "Error code" -msgstr "Código de error" +msgid "API request returned error code 400" +msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/translated/api.js:251 +msgid "Error 405: Method Not Allowed" +msgstr "" + +#: templates/js/translated/api.js:252 +msgid "HTTP method not allowed at URL" +msgstr "" + +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/translated/api.js:260 +msgid "Unhandled Error Code" +msgstr "" + +#: templates/js/translated/api.js:261 +msgid "Error code" +msgstr "" + +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" -msgstr "No se encontraron archivos adjuntos" +msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" -msgstr "Editar archivos adjuntos" +msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" -msgstr "Fecha de subida" +msgstr "Fecha de Subida" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" -msgstr "Editar adjunto" +msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" -msgstr "Eliminar adjunto" +msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" -msgstr "Introduzca datos de código de barras" +msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "Código de barras" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" -msgstr "Introduzca notas opcionales para la transferencia de stock" +msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" -msgstr "Escribir notas" +msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" -msgstr "Error del servidor" +msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" -msgstr "Respuesta desconocida del servidor" +msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" -msgstr "Respuesta del servidor inválida" +msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" -msgstr "Escanear código de barras" +msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" -msgstr "No hay URL en respuesta" +msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" -msgstr "Desvincular" +msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" -msgstr "Eliminar elemento de stock" +msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" -msgstr "Registrar" +msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" -msgstr "Artículo de stock ya escaneado" +msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" -msgstr "Artículo de stock ya está en esta ubicación" +msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" -msgstr "Artículo de stock añadido" +msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" -msgstr "Comprobar en la ubicación" +msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" -msgstr "El código de barras no coincide con una ubicación válida" +msgstr "" #: templates/js/translated/bom.js:47 msgid "Create BOM Item" -msgstr "Crear artículo para el BOM" +msgstr "" #: templates/js/translated/bom.js:101 msgid "Display row data" @@ -8803,19 +9434,19 @@ msgstr "Mostrar datos de fila" #: templates/js/translated/bom.js:157 msgid "Row Data" -msgstr "Datos de Fila" +msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Cerrar" #: templates/js/translated/bom.js:275 msgid "Download BOM Template" -msgstr "Descargar plantilla BOM" +msgstr "" #: templates/js/translated/bom.js:320 msgid "Multi Level BOM" @@ -8827,15 +9458,15 @@ msgstr "" #: templates/js/translated/bom.js:326 msgid "Levels" -msgstr "Niveles" +msgstr "" #: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "Seleccione el número máximo de niveles BOM a exportar (0 = todos los niveles)" +msgstr "" #: templates/js/translated/bom.js:334 msgid "Include Alternative Parts" -msgstr "Incluye partes alternativas" +msgstr "" #: templates/js/translated/bom.js:335 msgid "Include alternative parts in exported BOM" @@ -8843,7 +9474,7 @@ msgstr "" #: templates/js/translated/bom.js:340 msgid "Include Parameter Data" -msgstr "Incluye Parámetros de Datos" +msgstr "" #: templates/js/translated/bom.js:341 msgid "Include part parameter data in exported BOM" @@ -8851,27 +9482,27 @@ msgstr "" #: templates/js/translated/bom.js:346 msgid "Include Stock Data" -msgstr "Incluye Datos de Stock" +msgstr "" #: templates/js/translated/bom.js:347 msgid "Include part stock data in exported BOM" -msgstr "Incluye datos de stock de piezas en BOM exportado" +msgstr "" #: templates/js/translated/bom.js:352 msgid "Include Manufacturer Data" -msgstr "Incluir Datos del fabricante" +msgstr "" #: templates/js/translated/bom.js:353 msgid "Include part manufacturer data in exported BOM" -msgstr "Incluye datos del fabricante de piezas en BOM exportado" +msgstr "" #: templates/js/translated/bom.js:358 msgid "Include Supplier Data" -msgstr "Incluir Datos del Proveedor" +msgstr "" #: templates/js/translated/bom.js:359 msgid "Include part supplier data in exported BOM" -msgstr "Incluye datos del proveedor de piezas en BOM exportado" +msgstr "" #: templates/js/translated/bom.js:364 msgid "Include Pricing Data" @@ -8881,132 +9512,132 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" -msgstr "Eliminar parte sustituta" +msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" -msgstr "Seleccione y añada una nueva parte sustituta usando la siguiente entrada" +msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" -msgstr "¿Está seguro que desea eliminar este enlace de la parte sustituta?" +msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" -msgstr "Eliminar parte sustituta" +msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" -msgstr "Añadir sustituto" +msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" -msgstr "Editar sustitutos de elementos BOM" +msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" -msgstr "Todos los elementos BOM seleccionados serán eliminados" +msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" -msgstr "¿Eliminar elementos BOM seleccionados?" +msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" -msgstr "Sustitutos Disponibles" +msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" -msgstr "Stock de variante permitido" +msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" -msgstr "Sustitutos" +msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "Ver BOM" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" -msgstr "Validar Artículo para el BOM" +msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" -msgstr "Esta línea ha sido validada" +msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" -msgstr "Editar partes sustitutas" +msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" -msgstr "Editar Artículo de BOM" +msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" -msgstr "Eliminar Artículo de BOM" +msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" -msgstr "No se encontraron elementos BOM" +msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" -msgstr "Parte requerida" +msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" -msgstr "Heredado de BOM superior" +msgstr "" #: templates/js/translated/build.js:96 msgid "Edit Build Order" -msgstr "Editar Orden de Trabajo" +msgstr "" #: templates/js/translated/build.js:139 msgid "Create Build Order" -msgstr "Crear Orden de Trabajo" +msgstr "" #: templates/js/translated/build.js:172 msgid "Cancel Build Order" @@ -9014,7 +9645,7 @@ msgstr "" #: templates/js/translated/build.js:181 msgid "Are you sure you wish to cancel this build?" -msgstr "¿Estás seguro de que quieres cancelar esta construcción?" +msgstr "" #: templates/js/translated/build.js:187 msgid "Stock items have been allocated to this build order" @@ -9026,7 +9657,7 @@ msgstr "" #: templates/js/translated/build.js:246 msgid "Build order is ready to be completed" -msgstr "El pedido de construcción está listo para ser completado" +msgstr "" #: templates/js/translated/build.js:254 msgid "This build order cannot be completed as there are incomplete outputs" @@ -9034,628 +9665,645 @@ msgstr "" #: templates/js/translated/build.js:259 msgid "Build Order is incomplete" -msgstr "Orden de construcción incompleta" +msgstr "" #: templates/js/translated/build.js:277 msgid "Complete Build Order" -msgstr "Completar Orden de Construcción" +msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" -msgstr "Siguiente número de serie disponible" +msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" -msgstr "Último número de serie" +msgstr "" #: templates/js/translated/build.js:329 msgid "The Bill of Materials contains trackable parts" -msgstr "La ley de materiales contiene partes rastreables" +msgstr "" #: templates/js/translated/build.js:330 msgid "Build outputs must be generated individually" -msgstr "Las salidas de construcción deben ser generadas individualmente" +msgstr "" #: templates/js/translated/build.js:338 msgid "Trackable parts can have serial numbers specified" -msgstr "Las partes rastreables pueden tener números de serie especificados" +msgstr "" #: templates/js/translated/build.js:339 msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "Introduzca números de serie para generar múltiples salidas de construcción única" +msgstr "" #: templates/js/translated/build.js:346 msgid "Create Build Output" -msgstr "Crear Salida de Trabajo" +msgstr "" #: templates/js/translated/build.js:377 msgid "Allocate stock items to this build output" -msgstr "Asignar elementos de stock a esta salida de trabajo" +msgstr "" #: templates/js/translated/build.js:388 msgid "Unallocate stock from build output" -msgstr "Desasignar stock de la salida de trabajo" +msgstr "" #: templates/js/translated/build.js:397 msgid "Complete build output" -msgstr "Completar salida de trabajo" +msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" -msgstr "Eliminar Salida de Trabajo" +msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" -msgstr "¿Está seguro que desea desasignar los artículos de stock de este trabajo?" +msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" -msgstr "Desasignar artículos de stock" +msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" -msgstr "Seleccionar Salida de Trabajo" +msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" -msgstr "Se debe seleccionar al menos una salida de trabajo" +msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" -msgstr "Salida" +msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" -msgstr "Completar salidas de trabajo" +msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" -msgstr "Eliminar Salidas" +msgstr "" #: templates/js/translated/build.js:780 msgid "No build order allocations found" -msgstr "No se encontraron asignaciones de órdenes de trabajo" +msgstr "" #: templates/js/translated/build.js:817 msgid "Location not specified" -msgstr "Ubicación no especificada" +msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" -msgstr "No se encontraron salidas de trabajo activas" +msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" -msgstr "Editar asignación de stock" +msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" -msgstr "Eliminar asignación de stock" +msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" -msgstr "Editar Asignación" +msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" -msgstr "Quitar asignación" +msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" -msgstr "Piezas sustitutas disponibles" +msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" -msgstr "Cantidad por" +msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" -msgstr "Stock de Trabajo" +msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" -msgstr "Pedido de stock" +msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" -msgstr "Asignar stock" +msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" -msgstr "Seleccionar partes" +msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" -msgstr "Debe seleccionar al menos una parte para asignar" +msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" -msgstr "Especificar la cantidad de asignación de stock" +msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" -msgstr "Seleccionar ubicación de origen (dejar en blanco para tomar de todas las ubicaciones)" +msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" -msgstr "Asignar Artículos de Stock a Orden de Trabajo" +msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" -msgstr "No hay ubicaciones de stock coincidentes" +msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" -msgstr "No hay artículos de stock coincidentes" +msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" -msgstr "No hay trabajos que coincidan con la consulta" +msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" -msgstr "Seleccionar" +msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" -msgstr "Orden de trabajo atrasada" +msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" -msgstr "No hay información de usuario" +msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" -msgstr "No se asignaron partes para" +msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" -msgstr "Agregar Fabricante" +msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" -msgstr "Añadir Parte del fabricante" +msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" -msgstr "Editar Parte del Fabricante" +msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" -msgstr "Añadir Proveedor" +msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" -msgstr "Añadir Parte de Proveedor" +msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" -msgstr "Se eliminarán todas las partes del proveedor seleccionadas" +msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "Añadir nueva Empresa" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" -msgstr "Partes Suministradas" +msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" -msgstr "Partes Fabricadas" +msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "No se encontró información de la empresa" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" -msgstr "Eliminar Partes del Fabricante" +msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" -msgstr "Eliminar parámetros" +msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" -msgstr "No se encontraron partes del fabricante" +msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" -msgstr "Plantilla de parte" +msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" -msgstr "Parte ensamblada" +msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" -msgstr "No se encontraron parámetros" +msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" -msgstr "Editar parámetro" +msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" -msgstr "Eliminar parámetro" +msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" -msgstr "Editar parámetro" +msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" -msgstr "Eliminar parámetro" +msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" -msgstr "No se encontraron piezas de proveedor" +msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" -msgstr "Disponibilidad" +msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" -msgstr "Editar proveedor" +msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" -msgstr "Eliminar ítem del proveedor" +msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" -msgstr "Eliminar precio de descuento" +msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" -msgstr "Editar precio de descuento" +msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" -msgstr "No se ha encontrado información de descuento de precios" +msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "Última actualización" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" -msgstr "Editar precio de descuento" - -#: templates/js/translated/company.js:1186 -msgid "Delete price break" -msgstr "Eliminar precio de descuento" - -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 -msgid "true" -msgstr "verdadero" - -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 -msgid "false" -msgstr "falso" - -#: templates/js/translated/filters.js:206 -msgid "Select filter" -msgstr "Seleccionar filtro" - -#: templates/js/translated/filters.js:292 -msgid "Download data" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" -msgstr "Recargar datos" +#: templates/js/translated/company.js:1429 +msgid "Delete price break" +msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 +msgid "true" +msgstr "" + +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 +msgid "false" +msgstr "" + +#: templates/js/translated/filters.js:209 +msgid "Select filter" +msgstr "" + +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" +msgstr "" + +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" +msgstr "" + +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" -msgstr "Añadir un nuevo filtro" +msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" -msgstr "Limpiar todos los filtros" +msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" -msgstr "Crear filtro" +msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" -msgstr "Acción Prohibida" +msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" -msgstr "Operación de creación no permitida" +msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" -msgstr "Operación de actualización no permitida" +msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" -msgstr "Operación de eliminación no permitida" +msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" -msgstr "Operación de visualización no permitida" +msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" -msgstr "Introduzca un número válido" +msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" -msgstr "Existen errores en el formulario" +msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" -msgstr "No hay resultados" +msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" -msgstr "Buscando" +msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" -msgstr "Limpiar entrada" +msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" +msgstr "Seleccionar Columnas" + +#: templates/js/translated/helpers.js:38 +msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:24 -msgid "YES" -msgstr "SI" - -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "Seleccionar elementos de stock" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "Elemento(s) de stock deben ser seleccionados antes de imprimir etiquetas" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "No se encontraron etiquetas" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "No se han encontrado etiquetas que coincidan con los artículos de stock seleccionado(s)" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "Seleccionar ubicaciones de stock" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "Las ubicación(es) del stock deben ser seleccionadas antes de imprimir etiquetas" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "No se encontraron etiquetas que coincidan con las ubicaciones de stock seleccionadas" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "Pieza(s) deben ser seleccionadas antes de imprimir etiquetas" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "No se encontraron etiquetas que coincidan con la(s) parte(s) seleccionada(s)" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" -msgstr "artículos de stock seleccionados" +msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" -msgstr "Seleccione Plantilla de Etiqueta" +msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Cancelar" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" -msgstr "Enviar" - -#: templates/js/translated/modals.js:147 -msgid "Form Title" -msgstr "Título del Formulario" - -#: templates/js/translated/modals.js:428 -msgid "Waiting for server..." -msgstr "Esperando al servidor..." - -#: templates/js/translated/modals.js:575 -msgid "Show Error Information" -msgstr "Mostrar Información de Error" - -#: templates/js/translated/modals.js:632 -msgid "Accept" msgstr "Aceptar" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:148 +msgid "Form Title" +msgstr "" + +#: templates/js/translated/modals.js:429 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/translated/modals.js:576 +msgid "Show Error Information" +msgstr "" + +#: templates/js/translated/modals.js:662 +msgid "Accept" +msgstr "" + +#: templates/js/translated/modals.js:720 msgid "Loading Data" -msgstr "Cargando Datos" +msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" -msgstr "Respuesta no válida del servidor" +msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" -msgstr "Datos del formulario faltantes de la respuesta del servidor" +msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" -msgstr "Error al publicar datos del formulario" +msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" -msgstr "Respuesta JSON faltan datos del formulario" +msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" -msgstr "Error 400: Solicitud Incorrecta" +msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" -msgstr "El servidor devolvió el código de error 400" +msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" -msgstr "Error al solicitar datos del formulario" - -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "ID de Empresa" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "ID de Stock" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "ID del Pedido" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "ID de envío" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "ID de Parte del Fabricante" +msgstr "" #: templates/js/translated/news.js:24 msgid "No news found" @@ -9663,1663 +10311,1717 @@ msgstr "" #: templates/js/translated/notification.js:42 msgid "Age" -msgstr "Edad" +msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" -msgstr "Marcar como no leído" +msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" -msgstr "Marcar como leído" +msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" -msgstr "No hay notificaciones sin leer" +msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" -msgstr "Las notificaciones cargarán aquí" - -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" -msgstr "No se ha asignado ningún artículo de stock a este envío" - -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "Los siguientes artículos de stock serán enviados" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "Completar Envío" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "Confirmar Envío" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "No se encontraron envíos pendientes" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" msgstr "" -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "Omitir" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "Completar orden de compra" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "Marcar pedido como completado?" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "Este pedido tiene artículos de línea que no han sido marcados como recibidos." - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "Completar este pedido significa que los artículos de orden y línea ya no serán editables." - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "Cancelar orden de compra" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "Después de realizar esta orden de compra, los artículos de línea ya no serán editables." - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "Cancelar esta orden significa que la orden ya no será editable." - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "Crear Nuevo Envío" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "Añadir Cliente" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "Crear Orden de Venta" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Modificar orden de compra" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" -msgstr "Exportar Orden" - -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" msgstr "" -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" +#: templates/js/translated/order.js:222 +msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:1110 -msgid "New supplier part" +#: templates/js/translated/order.js:236 +msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:1128 -msgid "New purchase order" +#: templates/js/translated/order.js:249 +msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "Seleccionar Artículos de Línea" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "Debe seleccionar al menos un elemento de línea" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "Añadir números de serie" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "Cantidad recibida" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "Cantidad a recibir" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "Estado del Stock" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Código de Pedido" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Pedido" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "Cantidad a recibir" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "Confirmar recepción de artículos" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "Recibir artículos de orden de compra" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "No se encontraron órdenes de compra" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "El pedido está vencido" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "Artículos" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "Editar Ítem de Línea" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "Eliminar Ítemde Línea" - -#: templates/js/translated/order.js:2269 +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 msgid "No line items found" -msgstr "No hay elementos de línea" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "Total" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "Cantidad Total" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "Precio Unitario" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Precio Total" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" msgstr "" -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "Recibir ítem de línea" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "Editar elemento de línea" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "Eliminar elemento de línea" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 +#: templates/js/translated/order.js:344 msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 +#: templates/js/translated/order.js:345 msgid "Edit line" -msgstr "Editar línea" +msgstr "" -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 +#: templates/js/translated/order.js:349 msgid "Delete line" -msgstr "Eliminar línea" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 -msgid "Duplicate Line" -msgstr "Duplicar línea" - -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 -msgid "Edit Line" -msgstr "Editar línea" - -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 -msgid "Delete Line" -msgstr "Eliminar línea" - -#: templates/js/translated/order.js:2687 -msgid "No matching line" -msgstr "No hay línea coincidente" - -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "No se encontraron ventas" - -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" -msgstr "Cliente Inválido" - -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "Editar envío" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "Completar envío" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "Eliminar envío" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "Editar envío" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "Eliminar Envío" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "No se encontraron envíos coincidentes" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "Referencia de Envío" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "No enviado" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "Seguimiento" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "Factura" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "Añadir envío" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Confirmar asignación de stock" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "Asignar artículos de stock a pedido de venta" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "No se encontraron asignaciones de órdenes" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "Editar Asignación de Stock" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "Confirmar Operación de Eliminar" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "Eliminar Adjudicación de Stock" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "Enviado al cliente" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "Ubicación de stock no especificada" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "Asignar números de serie" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Comprar stock" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Calcular precio" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "No se puede eliminar ya que los artículos han sido enviados" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "No se puede eliminar ya que los elementos han sido asignados" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "Asignar Números de Serie" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "Actualizar Precio Unitario" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "No hay elementos de línea coincidentes" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" -msgstr "No hay líneas coincidentes" +msgstr "" #: templates/js/translated/part.js:56 msgid "Part Attributes" -msgstr "Atributos de Parte" +msgstr "" #: templates/js/translated/part.js:60 msgid "Part Creation Options" -msgstr "Opciones de Creación de Parte" +msgstr "" #: templates/js/translated/part.js:64 msgid "Part Duplication Options" -msgstr "Opciones de Duplicación de Parte" +msgstr "" #: templates/js/translated/part.js:87 msgid "Add Part Category" -msgstr "Añadir Categoría de Parte" +msgstr "Añadir Categoría de Pieza" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "Copiar Parámetros de Categoría" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" -msgstr "Categoría superior de parte" +msgstr "Categoría superior de pieza" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" +msgstr "Icono (opcional) - Explora todos los iconos disponibles en" + +#: templates/js/translated/part.js:291 +msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:281 -msgid "Edit Part Category" -msgstr "Editar Categoría de Parte" - -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" -msgstr "Mover a la categoría padre" +msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" -msgstr "Eliminar Categoría de Parte" +msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" -msgstr "Crear Parte" +msgstr "Crear Pieza" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" -msgstr "" +msgstr "Crear otra pieza después de esta" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" +msgstr "Pieza creada con éxito" + +#: templates/js/translated/part.js:382 +msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:372 -msgid "Edit Part" -msgstr "Editar Parte" - -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" -msgstr "Parte editada" +msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" -msgstr "Crear Variante de Parte" - -#: templates/js/translated/part.js:437 -msgid "Active Part" -msgstr "Parte activa" - -#: templates/js/translated/part.js:438 -msgid "Part cannot be deleted as it is currently active" msgstr "" #: templates/js/translated/part.js:452 +msgid "Active Part" +msgstr "" + +#: templates/js/translated/part.js:453 +msgid "Part cannot be deleted as it is currently active" +msgstr "" + +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" -msgstr "Estás suscrito a las notificaciones de este elemento" +msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" -msgstr "Te has suscrito a las notificaciones de este elemento" +msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" -msgstr "Suscríbete a las notificaciones de este elemento" +msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" -msgstr "Has cancelado la suscripción a las notificaciones de este elemento" +msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" -msgstr "Validar el BOM marcará cada elemento de línea como válido" +msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" -msgstr "Validar la Factura de Materiales" +msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" -msgstr "Validación de Lista de Materiales" +msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" -msgstr "Copiar Factura de Materiales" +msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "Stock bajo" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" +msgstr "Existencias no disponibles" + +#: templates/js/translated/part.js:669 +msgid "Demand" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" -msgstr "Parte Rastreable" - -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 -msgid "Virtual part" -msgstr "Parte virtual" - -#: templates/js/translated/part.js:647 -msgid "Subscribed part" -msgstr "Parte suscrita" - -#: templates/js/translated/part.js:651 -msgid "Salable part" -msgstr "Pieza vendible" - -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" -msgstr "Actualizar elemento" +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 +msgid "Virtual part" +msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" -msgstr "Eliminar elemento" +#: templates/js/translated/part.js:727 +msgid "Subscribed part" +msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:731 +msgid "Salable part" +msgstr "" + +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." +msgstr "" + +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." +msgstr "" + +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" +msgstr "" + +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" -msgstr "No se encontraron variantes" +msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" -msgstr "Eliminar relación de parte" +msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" -msgstr "Eliminar Relación de Parte" +msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" -msgstr "No se encontraron partes" +msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" -msgstr "Sin categoría" - -#: templates/js/translated/part.js:1798 -msgid "No stock" msgstr "" -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Mostrar como lista" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Mostrar como cuadrícula" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" -msgstr "Definir Categoría de Parte" +msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Mostrar como árbol" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" -msgstr "Cargar subcategorías" +msgstr "Cargar Subcategorías" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" -msgstr "Categoría suscrita" +msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" -msgstr "No hay plantillas de prueba que coincidan con la consulta" +msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" -msgstr "Editar resultado de prueba" +msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" -msgstr "Eliminar resultado de prueba" +msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" -msgstr "Esta prueba está definida para una parte principal" +msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" -msgstr "Editar plantilla de resultado de prueba" +msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" -msgstr "Eliminar plantilla de resultados de prueba" +msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" -msgstr "Sin fecha especificada" +msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" -msgstr "Especulativo" +msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" -msgstr "" +msgstr "No hay información de precios disponible para esta pieza" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" -msgstr "" +msgstr "Error obteniendo información de programación de esta pieza" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" -msgstr "Cantidad máxima" +msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" #: templates/js/translated/plugin.js:23 msgid "The Plugin was installed" -msgstr "El Plugin fue Instalado" +msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "Editar ${human_name}" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "Eliminar ${human_name}" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" -msgstr "Parte variante" +msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Artículos" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" -msgstr "ítems seleccionados" +msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" -msgstr "Seleccionar Plantilla de Informe" +msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" -msgstr "Seleccione Plantilla de Informe de Prueba" +msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "Elemento(s) de stock deben ser seleccionados antes de imprimir informes" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" -msgstr "No se Encontraron Informes" +msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" -msgstr "No se encontraron plantillas de informe que coincidan con los artículos de stock seleccionados" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" +msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" -msgstr "Seleccionar construcciones" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" +msgstr "Añadir Cliente" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" -msgstr "Construccion(es) deben ser seleccionadas antes de imprimir informes" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" +msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" -msgstr "No se encontraron plantillas de informe que coincidan con la construcción(es) seleccionadas" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" +msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" -msgstr "Pieza(s) deben ser seleccionadas antes de imprimir informes" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" +msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" -msgstr "No se encontraron plantillas de informe que coincidan con la(s) parte(s) seleccionada(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" +msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" -msgstr "Seleccionar órdenes de compra" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" +msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" -msgstr "Pedido(s) de compra debe ser seleccionado antes de imprimir informe" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" +msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" -msgstr "No se encontraron plantillas de informe que coincidan con los pedidos seleccionados" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" +msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" -msgstr "Seleccionar Pedidos de Venta" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "Cliente Inválido" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" -msgstr "Pedido(s) de venta debe ser seleccionado antes de imprimir el informe" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "Crear Pedido de Entrega" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "Editar Pedido de Entrega" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "Completar Envíos" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "Cancelar Pedido de Entrega" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "No se encontraron pedidos de entrega" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "Referencia de Envío" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "Asignar Artículos de Stock a Pedido de Entrega" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "No se encontraron asignaciones de pedidos de entrega" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "Enviado al cliente" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "Actualizar Precio por Unidad" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" -msgstr "Minimizar resultados" +msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" -msgstr "Eliminar resultados" +msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" -msgstr "Serializar Artículo de Stock" +msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" -msgstr "Confirmar Serialización de Stock" +msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" -msgstr "Ubicación del stock principal" +msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" -msgstr "Editar ubicación de stock" +msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" -msgstr "Nueva Ubicación de Stock" +msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" -msgstr "¿Está seguro que desea eliminar esta ubicación?" +msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" -msgstr "Eliminar ubicación de stock" +msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" -msgstr "Esta parte no se puede serializar" +msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" -msgstr "Introduzca la cantidad inicial para este artículo de stock" +msgstr "Cantidad inicial de existencias que tendrá este artículo" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "Introduzca números de serie para el nuevo stock (o deje en blanco)" +msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" -msgstr "Duplicar artículo de stock" - -#: templates/js/translated/stock.js:404 -msgid "Are you sure you want to delete this stock item?" -msgstr "¿Está seguro que desea eliminar este elemento de stock?" +msgstr "" #: templates/js/translated/stock.js:409 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" -msgstr "Eliminar elemento de stock" +msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" -msgstr "Editar artículo de stock" +msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" -msgstr "Crear nuevo artículo de stock" +msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" -msgstr "Creados varios artículos de stock" +msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" -msgstr "Encontrar número serial" +msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" -msgstr "Introducir número de serie" +msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" -msgstr "Introducir un número de serie" +msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" -msgstr "Ningún número de serie coincidente" +msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" -msgstr "Más de un resultado encontrado" +msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" -msgstr "Confirmar asignación de stock" +msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "Asignar Stock al Cliente" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" -msgstr "Advertencia: La operación de fusión no puede ser revertida" +msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" -msgstr "Alguna información se perderá al combinar artículos de stock" +msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" -msgstr "Se eliminará el historial de transacciones de stock para elementos fusionados" +msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" -msgstr "La información de la pieza del proveedor se eliminará para los artículos fusionados" +msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" -msgstr "Confirmar fusión de artículos de stock" +msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" -msgstr "Fusionar Artículos de Stock" - -#: templates/js/translated/stock.js:958 -msgid "Transfer Stock" -msgstr "Transferir Stock" - -#: templates/js/translated/stock.js:959 -msgid "Move" -msgstr "Mover" - -#: templates/js/translated/stock.js:965 -msgid "Count Stock" -msgstr "Contar Stock" +msgstr "" #: templates/js/translated/stock.js:966 +msgid "Transfer Stock" +msgstr "" + +#: templates/js/translated/stock.js:967 +msgid "Move" +msgstr "" + +#: templates/js/translated/stock.js:973 +msgid "Count Stock" +msgstr "" + +#: templates/js/translated/stock.js:974 msgid "Count" -msgstr "Contar" +msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" -msgstr "Eliminar Stock" +msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" -msgstr "Tomar" +msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" -msgstr "Añadir Stock" +msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" -msgstr "Añadir" +msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" -msgstr "Eliminar Stock" +msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "La cantidad no se puede ajustar para el stock serializado" +msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" -msgstr "Especificar cantidad de stock" +msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" -msgstr "Debe seleccionar al menos un artículo de stock disponible" +msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" -msgstr "Confirmar ajuste de stock" - -#: templates/js/translated/stock.js:1276 -msgid "PASS" -msgstr "PASA" - -#: templates/js/translated/stock.js:1278 -msgid "FAIL" -msgstr "FALLO" +msgstr "" #: templates/js/translated/stock.js:1283 +msgid "PASS" +msgstr "" + +#: templates/js/translated/stock.js:1285 +msgid "FAIL" +msgstr "" + +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" -msgstr "SIN RESULTADO" +msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" -msgstr "Pruebas pasadas" +msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" -msgstr "Añadir resultado de prueba" +msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" -msgstr "No se encontraron resultados de prueba" +msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" -msgstr "Fecha de Prueba" +msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" -msgstr "Editar Resultados de Prueba" +msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" -msgstr "Borrar Resultado de Prueba" +msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" -msgstr "En producción" +msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" -msgstr "Instalado en el artículo de stock" +msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" -msgstr "Asignado a la Orden de Venta" +msgstr "Asignado al Pedido de Entrega" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" -msgstr "Ninguna ubicación de stock establecida" +msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" -msgstr "El artículo de stock está en producción" +msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" -msgstr "Artículo de stock asignado al pedido de venta" +msgstr "Artículo de stock asignado al pedido de entrega" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "Artículo de stock asignado al cliente" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" -msgstr "Se ha asignado un artículo de stock serializado" +msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" -msgstr "Artículo de stock ha sido completamente asignado" +msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" -msgstr "Artículo de stock ha sido asignado parcialmente" +msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" -msgstr "Artículo de stock ha sido instalado en otro artículo" +msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" -msgstr "Artículo de stock ha caducado" +msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" -msgstr "El artículo de stock caducará pronto" +msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" -msgstr "Artículo de stock ha sido rechazado" +msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" -msgstr "Artículo de stock perdido" +msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" -msgstr "Artículo de stock destruido" +msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" -msgstr "Agotado" +msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" -msgstr "Parte del proveedor no especificada" +msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" -msgstr "No hay artículos de stock que coincidan con la consulta" +msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" -msgstr "Establecer estado de stock" +msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" -msgstr "Seleccionar Código de Estado" +msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" -msgstr "Debe seleccionar el código de estado" +msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" -msgstr "Detalles" +msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" -msgstr "Ubicación ya no existe" +msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" -msgstr "La orden de compra ya no existe" +msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "El cliente ya no existe" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" -msgstr "Artículo de stock ya no existe" +msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" -msgstr "Añadido" +msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" -msgstr "Eliminado" +msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" -msgstr "Ningún elemento instalado" +msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" -msgstr "Desinstalar elemento de stock" +msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" -msgstr "Los artículos de stock sólo pueden ser instalados si cumplen con los siguientes criterios" +msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 +#: templates/js/translated/table_filters.js:465 +msgid "Order status" +msgstr "" + +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 msgid "Trackable Part" -msgstr "Parte Rastreable" +msgstr "" -#: templates/js/translated/table_filters.js:60 +#: templates/js/translated/table_filters.js:88 msgid "Assembled Part" -msgstr "Parte Ensamblada" +msgstr "" -#: templates/js/translated/table_filters.js:64 +#: templates/js/translated/table_filters.js:92 msgid "Has Available Stock" msgstr "" -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "Validado" - -#: templates/js/translated/table_filters.js:80 +#: templates/js/translated/table_filters.js:108 msgid "Allow Variant Stock" -msgstr "Permitir stock de variante" +msgstr "" -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 msgid "Has Pricing" msgstr "" -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 msgid "Include sublocations" msgstr "Incluir sub-ubicación" -#: templates/js/translated/table_filters.js:131 +#: templates/js/translated/table_filters.js:159 msgid "Include locations" -msgstr "Incluir ubicaciones" +msgstr "" -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 -#: templates/js/translated/table_filters.js:465 +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 msgid "Include subcategories" -msgstr "Incluir subcategorías" +msgstr "Incluir subcategorias" -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 msgid "Subscribed" -msgstr "Suscrito" +msgstr "" -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 msgid "Is Serialized" -msgstr "Es Serializado" +msgstr "" -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 msgid "Serial number GTE" -msgstr "Número Serial GTE" +msgstr "" -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 msgid "Serial number greater than or equal to" -msgstr "Número de serie mayor o igual a" +msgstr "" -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 msgid "Serial number LTE" -msgstr "Número Serial LTE" +msgstr "" -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 msgid "Serial number less than or equal to" -msgstr "Número de serie menor o igual que" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "Número de serie" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Código de lote" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "Partes activas" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "Mostrar stock para las partes activas" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "Parte es un ensamblado" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "Está asignado" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "El artículo ha sido asignado" +msgstr "" #: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "Stock disponible para uso" +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" #: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 msgid "Include stock in sublocations" -msgstr "Incluye stock en sub-ubicaciones" +msgstr "" -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:249 msgid "Show stock items which are depleted" -msgstr "Mostrar artículos de stock que están agotados" +msgstr "" -#: templates/js/translated/table_filters.js:222 +#: templates/js/translated/table_filters.js:254 msgid "Show items which are in stock" -msgstr "Mostrar elementos en stock" +msgstr "" -#: templates/js/translated/table_filters.js:226 +#: templates/js/translated/table_filters.js:258 msgid "In Production" -msgstr "En Producción" +msgstr "" -#: templates/js/translated/table_filters.js:227 +#: templates/js/translated/table_filters.js:259 msgid "Show items which are in production" -msgstr "Mostrar artículos que están en producción" +msgstr "" -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "Incluye Variantes" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "Incluye artículos de stock para partes de variantes" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "Instalado" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "Mostrar elementos de stock que están instalados en otro artículo" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "Mostrar elementos que han sido asignados a un cliente" - -#: templates/js/translated/table_filters.js:262 #: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "Estado del stock" +msgid "Include Variants" +msgstr "" -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" msgstr "" #: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" +msgid "Show items which have been assigned to a customer" +msgstr "Mostrar artículos que han sido asignados a un cliente" -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "Tiene precio de compra" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "Mostrar artículos de stock que tienen un precio de compra establecido" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" msgstr "" #: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 msgid "Show stock items which have expired" -msgstr "Mostrar artículos de stock que han caducado" +msgstr "" -#: templates/js/translated/table_filters.js:304 +#: templates/js/translated/table_filters.js:340 msgid "Show stock which is close to expiring" -msgstr "Mostrar stock que está cerca de caducar" +msgstr "" -#: templates/js/translated/table_filters.js:316 +#: templates/js/translated/table_filters.js:352 msgid "Test Passed" msgstr "" -#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:356 msgid "Include Installed Items" msgstr "" -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:375 msgid "Build status" -msgstr "Estado de la construcción" +msgstr "" -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "Asignado a mí" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 -msgid "Order status" -msgstr "Estado del pedido" - -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 -msgid "Outstanding" -msgstr "Pendiente" - -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" -msgstr "Incluye partes en subcategorías" +msgstr "Incluir piezas en subcategorías" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" -msgstr "Mostrar partes activas" +msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" -msgstr "Tiene IPN" - -#: templates/js/translated/table_filters.js:488 -msgid "Part has internal part number" -msgstr "La parte tiene número de pieza interno" - -#: templates/js/translated/table_filters.js:492 -msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 -msgid "Purchasable" -msgstr "Comprable" +#: templates/js/translated/table_filters.js:547 +msgid "Part has internal part number" +msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:551 +msgid "In stock" +msgstr "En stock" + +#: templates/js/translated/table_filters.js:559 +msgid "Purchasable" +msgstr "" + +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Mostrar vista de calendario" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Mostrar vista de lista" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" -msgstr "" +msgstr "Mostrar vista de árbol" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "Ampliar todas las filas" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "Contraer todas las filas" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" -msgstr "Cargando datos" +msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "filas por página" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" -msgstr "Mostrar todas las filas" +msgstr "Mostrando todas las filas" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Mostrando" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" -msgstr "para" +msgstr "hasta" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "de" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "filas" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Buscar" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" -msgstr "No se encontraron resultados" +msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" -msgstr "Ocultar/Mostrar paginación" +msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" -msgstr "Alternar" +msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Columnas" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" -msgstr "Todo" +msgstr "" #: templates/navbar.html:45 msgid "Buy" -msgstr "Comprar" +msgstr "" #: templates/navbar.html:57 msgid "Sell" -msgstr "Vender" +msgstr "Entrega" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" -msgstr "Notificaciones nuevas" +msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" -msgstr "Admin" +msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" -msgstr "Cerrar sesión" +msgstr "" #: templates/notes_buttons.html:6 templates/notes_buttons.html:7 msgid "Save" -msgstr "Guardar" +msgstr "" #: templates/notifications.html:13 msgid "Show all notifications and history" -msgstr "Mostrar todas las notificaciones y el historial" - -#: templates/price_data.html:7 -msgid "No data" -msgstr "Sin datos" +msgstr "" #: templates/qr_code.html:11 msgid "QR data not provided" -msgstr "Datos QR no proporcionados" +msgstr "" #: templates/registration/logged_out.html:6 msgid "You were logged out successfully." -msgstr "Se ha cerrado la sesión correctamente." +msgstr "" #: templates/registration/logged_out.html:8 msgid "Log in again" -msgstr "Volver a ingresar" +msgstr "" #: templates/search.html:9 msgid "Show full search results" -msgstr "Mostrar resultados completos de búsqueda" +msgstr "" #: templates/search.html:12 msgid "Clear search" -msgstr "Borrar búsqueda" +msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "Filtrar resultados" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" -msgstr "Cerrar menú de búsqueda" - -#: templates/search.html:35 -msgid "No search results" -msgstr "Búsqueda sin resultados" +msgstr "" #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" @@ -11359,7 +12061,7 @@ msgstr "" #: templates/socialaccount/login.html:19 msgid "Continue" -msgstr "Continuar" +msgstr "" #: templates/socialaccount/signup.html:10 #, python-format @@ -11367,13 +12069,9 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "Servidor" - #: templates/stats.html:13 msgid "Instance Name" -msgstr "Nombre de Instancia" +msgstr "Nombre de instancia" #: templates/stats.html:18 msgid "Database" @@ -11381,27 +12079,27 @@ msgstr "Base de datos" #: templates/stats.html:26 msgid "Server is running in debug mode" -msgstr "El servidor se está ejecutando en modo depuración" +msgstr "" #: templates/stats.html:33 msgid "Docker Mode" -msgstr "Modo Docker" +msgstr "" #: templates/stats.html:34 msgid "Server is deployed using docker" -msgstr "El servidor está desplegado usando docker" +msgstr "" #: templates/stats.html:39 msgid "Plugin Support" -msgstr "Soporte para Plugins" +msgstr "Soporte de plugins" #: templates/stats.html:43 msgid "Plugin support enabled" -msgstr "Soporte de plugins habilitado" +msgstr "" #: templates/stats.html:45 msgid "Plugin support disabled" -msgstr "Soporte de plugins desactivado" +msgstr "" #: templates/stats.html:52 msgid "Server status" @@ -11409,145 +12107,141 @@ msgstr "Estado del servidor" #: templates/stats.html:55 msgid "Healthy" -msgstr "Saludable" +msgstr "" #: templates/stats.html:57 msgid "Issues detected" -msgstr "Problemas detectados" +msgstr "" #: templates/stats.html:64 msgid "Background Worker" -msgstr "Trabajador en segundo plano" +msgstr "" #: templates/stats.html:67 msgid "Background worker not running" -msgstr "Trabajador en segundo plano no ejecutado" +msgstr "" #: templates/stats.html:75 msgid "Email Settings" -msgstr "Configuración de Email" +msgstr "Configuración de email" #: templates/stats.html:78 msgid "Email settings not configured" -msgstr "Configuración de correo no configurada" +msgstr "No se ha configurado el servidor de correo electrónico" #: templates/stock_table.html:17 msgid "Barcode Actions" -msgstr "Acciones de código de barras" +msgstr "" + +#: templates/stock_table.html:28 +msgid "Stock Options" +msgstr "" #: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Imprimir informes de prueba" +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:34 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:35 +msgid "Stocktake selected stock items" +msgstr "Inventariar artículos de stock seleccionados" + +#: templates/stock_table.html:36 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:37 +msgid "Merge selected stock items" +msgstr "" + +#: templates/stock_table.html:37 +msgid "Merge stock" +msgstr "" + +#: templates/stock_table.html:38 +msgid "Order selected items" +msgstr "" #: templates/stock_table.html:40 -msgid "Stock Options" -msgstr "Opciones Stock" - -#: templates/stock_table.html:45 -msgid "Add to selected stock items" -msgstr "Añadir a los elementos de stock seleccionados" - -#: templates/stock_table.html:46 -msgid "Remove from selected stock items" -msgstr "Eliminar de los elementos de stock seleccionados" - -#: templates/stock_table.html:47 -msgid "Stocktake selected stock items" -msgstr "Artículos de stock seleccionados" - -#: templates/stock_table.html:48 -msgid "Move selected stock items" -msgstr "Mover elementos de stock seleccionados" - -#: templates/stock_table.html:49 -msgid "Merge selected stock items" -msgstr "Combinar artículos de stock seleccionados" - -#: templates/stock_table.html:49 -msgid "Merge stock" -msgstr "Fusionar stock" - -#: templates/stock_table.html:50 -msgid "Order selected items" -msgstr "Ordenar artículos seleccionados" - -#: templates/stock_table.html:52 msgid "Change status" -msgstr "Cambiar estado" +msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" -msgstr "Cambiar estado de stock" +msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" -msgstr "Eliminar elementos seleccionados" +msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" -msgstr "Eliminar existencias" +msgstr "" #: templates/yesnolabel.html:4 msgid "Yes" -msgstr "Sí" +msgstr "" #: templates/yesnolabel.html:6 msgid "No" -msgstr "No" +msgstr "" #: users/admin.py:61 msgid "Users" -msgstr "Usuarios" +msgstr "" #: users/admin.py:62 msgid "Select which users are assigned to this group" -msgstr "Seleccione qué usuarios están asignados a este grupo" +msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" -msgstr "Los siguientes usuarios son miembros de varios grupos:" +msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" -msgstr "Información personal" +msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" -msgstr "Permisos" +msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" -msgstr "Fechas importantes" +msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" -msgstr "Permiso establecido" +msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" -msgstr "Grupo" +msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" -msgstr "Vista" +msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" -msgstr "Permiso para ver elementos" +msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" -msgstr "Permiso para añadir elementos" +msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" -msgstr "Cambiar" +msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" -msgstr "Permisos para editar elementos" +msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" -msgstr "Permiso para eliminar elementos" +msgstr "" diff --git a/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/InvenTree/locale/es_MX/LC_MESSAGES/django.po index 6f1f28d2bf..1c59910bfa 100644 --- a/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-09 10:12+0000\n" +"POT-Creation-Date: 2023-04-17 14:52+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -30,52 +34,55 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:204 build/serializers.py:387 -#: build/templates/build/sidebar.html:21 company/models.py:529 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2935 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2061 stock/models.py:2169 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1212 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2435 templates/js/translated/order.js:2569 -#: templates/js/translated/order.js:3067 templates/js/translated/order.js:4004 -#: templates/js/translated/order.js:4385 templates/js/translated/part.js:882 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "" -#: InvenTree/format.py:142 +#: InvenTree/format.py:152 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" msgstr "" -#: InvenTree/format.py:152 +#: InvenTree/format.py:162 msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "" @@ -91,103 +98,103 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:227 InvenTree/forms.py:233 +#: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:239 +#: InvenTree/forms.py:242 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -195,1144 +202,1241 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2163 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:412 common/models.py:2408 company/models.py:129 -#: company/models.py:281 company/models.py:516 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3056 templates/js/translated/part.js:1886 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1852 -#: common/models.py:1853 common/models.py:2076 common/models.py:2077 -#: common/models.py:2338 common/models.py:2339 part/models.py:2943 -#: part/models.py:3029 part/models.py:3049 plugin/models.py:264 -#: plugin/models.py:265 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2062 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3204 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:345 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:982 templates/js/translated/part.js:1151 -#: templates/js/translated/part.js:2291 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "" -#: InvenTree/models.py:564 build/models.py:163 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:522 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3213 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:356 -#: templates/js/translated/bom.js:592 templates/js/translated/bom.js:895 -#: templates/js/translated/build.js:2596 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2030 -#: templates/js/translated/order.js:2267 templates/js/translated/order.js:2845 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1494 -#: templates/js/translated/part.js:1768 templates/js/translated/part.js:2327 -#: templates/js/translated/part.js:2402 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2336 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3549 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:266 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "" -#: InvenTree/serializers.py:301 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:323 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:324 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:345 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:372 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:375 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:498 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:501 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:578 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:587 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:607 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:643 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:644 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:645 +#: InvenTree/settings.py:710 msgid "German" msgstr "" -#: InvenTree/settings.py:646 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "" -#: InvenTree/settings.py:647 +#: InvenTree/settings.py:712 msgid "English" msgstr "" -#: InvenTree/settings.py:648 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:649 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:650 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:651 +#: InvenTree/settings.py:716 msgid "French" msgstr "" -#: InvenTree/settings.py:652 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:653 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:654 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "" -#: InvenTree/settings.py:655 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:656 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "" -#: InvenTree/settings.py:657 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:658 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:659 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "" -#: InvenTree/settings.py:660 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:661 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:662 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3644 templates/js/translated/order.js:3979 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:703 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "" -#: InvenTree/views.py:710 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:226 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:105 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:110 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:790 +#: templates/js/translated/build.js:791 msgid "Build Order" msgstr "" -#: build/models.py:111 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:154 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:155 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3459 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:729 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1853 templates/js/translated/order.js:2298 -#: templates/js/translated/order.js:2516 templates/js/translated/order.js:3841 -#: templates/js/translated/order.js:4332 templates/js/translated/pricing.js:119 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:166 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:174 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:175 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:180 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:684 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2802 part/models.py:2915 -#: part/models.py:2975 part/models.py:2990 part/models.py:3009 -#: part/models.py:3027 part/models.py:3126 part/models.py:3247 -#: part/models.py:3339 part/models.py:3424 part/models.py:3740 -#: part/serializers.py:894 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:591 -#: templates/js/translated/bom.js:728 templates/js/translated/bom.js:849 -#: templates/js/translated/build.js:1224 templates/js/translated/build.js:1721 -#: templates/js/translated/build.js:2204 templates/js/translated/build.js:2601 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:106 -#: templates/js/translated/order.js:1172 templates/js/translated/order.js:1676 -#: templates/js/translated/order.js:2252 templates/js/translated/order.js:3199 -#: templates/js/translated/order.js:3595 templates/js/translated/order.js:3825 -#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1551 -#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:102 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "" -#: build/models.py:188 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:193 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:197 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:823 -#: templates/js/translated/build.js:2192 templates/js/translated/order.js:3187 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:206 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:211 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:215 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:219 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:226 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:228 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:232 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:236 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:224 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1534 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:225 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2858 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:256 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:257 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:260 order/models.py:292 -#: templates/js/translated/build.js:2678 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:266 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2646 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:283 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:115 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2658 templates/js/translated/order.js:2064 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:284 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:289 build/templates/build/detail.html:101 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:532 +#: build/models.py:301 +msgid "Build Priority" +msgstr "" + +#: build/models.py:304 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:538 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:717 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:720 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:723 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1180 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1189 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1199 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1205 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1211 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1268 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1337 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2580 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1338 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1354 build/serializers.py:663 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 -#: templates/js/translated/build.js:800 templates/js/translated/build.js:805 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2763 -#: templates/js/translated/order.js:107 templates/js/translated/order.js:3200 -#: templates/js/translated/order.js:3502 templates/js/translated/order.js:3507 -#: templates/js/translated/order.js:3602 templates/js/translated/order.js:3694 -#: templates/js/translated/part.js:803 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: stock/templates/stock/item_base.html:195 +#: templates/js/translated/build.js:801 templates/js/translated/build.js:806 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1355 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1367 build/serializers.py:192 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1884 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2922 part/models.py:3440 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:730 -#: templates/js/translated/bom.js:913 templates/js/translated/build.js:480 -#: templates/js/translated/build.js:636 templates/js/translated/build.js:827 -#: templates/js/translated/build.js:1246 templates/js/translated/build.js:1747 -#: templates/js/translated/build.js:2207 -#: templates/js/translated/company.js:1159 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:123 templates/js/translated/order.js:1175 -#: templates/js/translated/order.js:2304 templates/js/translated/order.js:2522 -#: templates/js/translated/order.js:3201 templates/js/translated/order.js:3521 -#: templates/js/translated/order.js:3608 templates/js/translated/order.js:3700 -#: templates/js/translated/order.js:3847 templates/js/translated/order.js:4338 -#: templates/js/translated/part.js:805 templates/js/translated/part.js:876 -#: templates/js/translated/part.js:1349 templates/js/translated/part.js:2849 -#: templates/js/translated/pricing.js:114 -#: templates/js/translated/pricing.js:207 -#: templates/js/translated/pricing.js:255 -#: templates/js/translated/pricing.js:349 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1368 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1376 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1377 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:137 build/serializers.py:692 -#: templates/js/translated/build.js:1234 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:149 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:153 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:157 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:168 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:193 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:207 build/serializers.py:683 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:686 -#: part/serializers.py:1057 stock/models.py:574 stock/models.py:1312 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:214 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:217 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:231 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1545 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:232 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:245 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:281 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:330 build/serializers.py:399 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:369 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:812 -#: templates/js/translated/build.js:1759 templates/js/translated/order.js:1572 -#: templates/js/translated/order.js:3514 templates/js/translated/order.js:3619 -#: templates/js/translated/order.js:3627 templates/js/translated/order.js:3708 -#: templates/js/translated/part.js:186 templates/js/translated/part.js:804 -#: templates/js/translated/stock.js:619 templates/js/translated/stock.js:784 -#: templates/js/translated/stock.js:994 templates/js/translated/stock.js:1898 -#: templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:370 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:376 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2630 -#: templates/js/translated/order.js:1681 templates/js/translated/order.js:2034 -#: templates/js/translated/order.js:2850 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:382 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:452 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:459 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:524 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:540 templates/js/translated/build.js:264 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:545 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:556 templates/js/translated/build.js:268 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:565 templates/js/translated/build.js:252 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:595 build/serializers.py:640 part/models.py:3576 -#: part/models.py:3732 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:605 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:654 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:669 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:727 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:740 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:768 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:832 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:844 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:850 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1350,130 +1454,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:131 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2670 templates/js/translated/order.js:2051 -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2866 -#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1364 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:204 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 -#: build/templates/build/detail.html:67 build/templates/build/detail.html:142 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:67 build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:94 order/api.py:1256 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2812 templates/js/translated/pricing.js:637 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 -#: build/templates/build/detail.html:108 +#: build/templates/build/build_base.html:203 +#: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:252 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1486,8 +1653,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1682 templates/js/translated/order.js:2424 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1499,169 +1666,162 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1250 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" -#: build/templates/build/detail.html:126 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2638 +#: build/templates/build/detail.html:133 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" -#: build/templates/build/detail.html:137 +#: build/templates/build/detail.html:144 msgid "No target date set" msgstr "" -#: build/templates/build/detail.html:146 +#: build/templates/build/detail.html:153 msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:157 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" -#: build/templates/build/detail.html:172 +#: build/templates/build/detail.html:179 msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:2015 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" -#: build/templates/build/detail.html:177 +#: build/templates/build/detail.html:184 msgid "Unallocate Stock" msgstr "" -#: build/templates/build/detail.html:179 +#: build/templates/build/detail.html:186 msgid "Automatically allocate stock to build" msgstr "" -#: build/templates/build/detail.html:180 +#: build/templates/build/detail.html:187 msgid "Auto Allocate" msgstr "" -#: build/templates/build/detail.html:182 +#: build/templates/build/detail.html:189 msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:183 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:190 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" -#: build/templates/build/detail.html:186 +#: build/templates/build/detail.html:193 msgid "Order required parts" msgstr "" -#: build/templates/build/detail.html:187 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1215 +#: build/templates/build/detail.html:194 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:199 +#: build/templates/build/detail.html:206 msgid "Untracked stock has been fully allocated for this Build Order" msgstr "" -#: build/templates/build/detail.html:203 +#: build/templates/build/detail.html:210 msgid "Untracked stock has not been fully allocated for this Build Order" msgstr "" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:217 msgid "Allocate selected items" msgstr "" -#: build/templates/build/detail.html:220 +#: build/templates/build/detail.html:227 msgid "This Build Order does not have any associated untracked BOM items" msgstr "" -#: build/templates/build/detail.html:229 +#: build/templates/build/detail.html:236 msgid "Incomplete Build Outputs" msgstr "" -#: build/templates/build/detail.html:233 +#: build/templates/build/detail.html:240 msgid "Create new build output" msgstr "" -#: build/templates/build/detail.html:234 +#: build/templates/build/detail.html:241 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:248 +#: build/templates/build/detail.html:255 msgid "Output Actions" msgstr "" -#: build/templates/build/detail.html:253 +#: build/templates/build/detail.html:260 msgid "Complete selected build outputs" msgstr "" -#: build/templates/build/detail.html:254 +#: build/templates/build/detail.html:261 msgid "Complete outputs" msgstr "" -#: build/templates/build/detail.html:258 +#: build/templates/build/detail.html:265 msgid "Delete selected build outputs" msgstr "" -#: build/templates/build/detail.html:259 +#: build/templates/build/detail.html:266 msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:267 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:271 build/templates/build/detail.html:272 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:294 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:306 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:321 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:504 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:505 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1674,23 +1834,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1711,1222 +1872,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:472 +#: common/models.py:66 +msgid "Updated" +msgstr "" + +#: common/models.py:67 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:474 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:515 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:532 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:543 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:588 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:772 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:797 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:799 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:838 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:839 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:846 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:848 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:853 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:854 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:860 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:861 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:867 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:868 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:873 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:874 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:881 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:882 -msgid "Default currency" +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:888 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:889 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:895 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:896 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:907 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:908 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:913 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:914 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:920 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:921 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:930 -msgid "Automatic Backup" -msgstr "" - -#: common/models.py:931 -msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:937 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:938 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:948 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:949 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:959 -msgid "Delete Noficiations" -msgstr "" - -#: common/models.py:960 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:970 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:971 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:977 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:978 -msgid "Barcode input processing delay time" -msgstr "" - #: common/models.py:988 -msgid "Barcode Webcam Support" +msgid "Update Check Inverval" msgstr "" #: common/models.py:989 -msgid "Allow barcode scanning via webcam in browser" +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:995 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:996 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1000 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1001 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1007 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1008 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1014 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1015 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1021 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1022 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1028 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1029 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1035 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1036 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1042 part/admin.py:41 part/models.py:3249 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1043 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1049 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1595 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1050 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1056 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1057 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1063 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1064 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1070 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1071 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1077 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1078 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1084 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1085 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1091 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1092 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1098 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1099 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1105 -msgid "Create initial stock" -msgstr "" - -#: common/models.py:1106 -msgid "Create initial stock on part creation" -msgstr "" - -#: common/models.py:1112 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1113 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1120 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1121 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1126 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1127 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1137 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1138 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1144 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1145 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1151 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1152 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1158 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1159 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1165 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1166 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1167 common/models.py:1290 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1176 -msgid "Internal Prices" +#: common/models.py:999 +msgid "Automatic Backup" msgstr "" -#: common/models.py:1177 -msgid "Enable internal prices for parts" +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1183 -msgid "Internal Price Override" +#: common/models.py:1006 +msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1184 -msgid "If available, internal prices override price range calculations" +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1190 -msgid "Enable label printing" +#: common/models.py:1017 +msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1191 -msgid "Enable label printing from the web interface" +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1197 -msgid "Label Image DPI" +#: common/models.py:1028 +msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1198 -msgid "DPI resolution when generating image files to supply to label printing plugins" +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" msgstr "" #: common/models.py:1207 -msgid "Enable Reports" +msgid "Format to display the part name" msgstr "" -#: common/models.py:1208 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1214 templates/stats.html:25 -msgid "Debug Mode" +#: common/models.py:1214 +msgid "Part Category Default Icon" msgstr "" #: common/models.py:1215 -msgid "Generate reports in debug mode (HTML output)" +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" msgstr "" #: common/models.py:1221 -msgid "Page Size" +msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1222 -msgid "Default page size for PDF reports" +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" msgstr "" #: common/models.py:1232 -msgid "Enable Test Reports" +msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1233 -msgid "Enable generation of test reports" +#: common/models.py:1242 +msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1239 -msgid "Attach Test Reports" +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1240 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +#: common/models.py:1249 +msgid "Purchase History Override" msgstr "" -#: common/models.py:1246 -msgid "Globally Unique Serials" +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1247 -msgid "Serial numbers for stock items must be globally unique" +#: common/models.py:1256 +msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1253 -msgid "Autofill Serial Numbers" +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1254 -msgid "Autofill serial numbers in forms" +#: common/models.py:1263 +msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1260 -msgid "Delete Depleted Stock" -msgstr "" - -#: common/models.py:1261 -msgid "Determines default behaviour when a stock item is depleted" -msgstr "" - -#: common/models.py:1267 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1268 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1273 -msgid "Stock Expiry" +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" #: common/models.py:1274 -msgid "Enable stock expiry functionality" +msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1280 -msgid "Sell Expired Stock" +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" msgstr "" #: common/models.py:1281 -msgid "Allow sale of expired stock" +msgid "Active Variants Only" msgstr "" -#: common/models.py:1287 -msgid "Stock Stale Time" +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" msgstr "" #: common/models.py:1288 -msgid "Number of days stock items are considered stale before expiring" +msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1295 -msgid "Build Expired Stock" +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1296 -msgid "Allow building with expired stock" +#: common/models.py:1299 +msgid "Internal Prices" msgstr "" -#: common/models.py:1302 -msgid "Stock Ownership Control" +#: common/models.py:1300 +msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1303 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1306 +msgid "Internal Price Override" msgstr "" -#: common/models.py:1309 -msgid "Stock Location Default Icon" +#: common/models.py:1307 +msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1310 -msgid "Stock location default icon (empty means no icon)" +#: common/models.py:1313 +msgid "Enable label printing" msgstr "" -#: common/models.py:1315 -msgid "Build Order Reference Pattern" +#: common/models.py:1314 +msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1316 -msgid "Required pattern for generating Build Order reference field" +#: common/models.py:1320 +msgid "Label Image DPI" msgstr "" -#: common/models.py:1322 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1323 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1329 -msgid "Sales Order Default Shipment" +#: common/models.py:1321 +msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" #: common/models.py:1330 -msgid "Enable creation of default shipment with sales orders" +msgid "Enable Reports" msgstr "" -#: common/models.py:1336 -msgid "Edit Completed Sales Orders" +#: common/models.py:1331 +msgid "Enable generation of reports" msgstr "" -#: common/models.py:1337 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1337 templates/stats.html:25 +msgid "Debug Mode" msgstr "" -#: common/models.py:1343 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1338 +msgid "Generate reports in debug mode (HTML output)" msgstr "" #: common/models.py:1344 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Page Size" msgstr "" -#: common/models.py:1350 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1345 +msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1351 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1355 +msgid "Enable Test Reports" msgstr "" -#: common/models.py:1358 -msgid "Enable password forgot" +#: common/models.py:1356 +msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1359 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1362 +msgid "Attach Test Reports" msgstr "" -#: common/models.py:1365 -msgid "Enable registration" +#: common/models.py:1363 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1366 -msgid "Enable self-registration for users on the login pages" +#: common/models.py:1369 +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1372 -msgid "Enable SSO" +#: common/models.py:1370 +msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1373 -msgid "Enable SSO on the login pages" +#: common/models.py:1376 +msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1379 -msgid "Email required" +#: common/models.py:1377 +msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1380 -msgid "Require user to supply mail on signup" +#: common/models.py:1383 +msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1386 -msgid "Auto-fill SSO users" +#: common/models.py:1384 +msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1387 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1390 +msgid "Batch Code Template" msgstr "" -#: common/models.py:1393 -msgid "Mail twice" +#: common/models.py:1391 +msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1394 -msgid "On signup ask users twice for their mail" +#: common/models.py:1396 +msgid "Stock Expiry" msgstr "" -#: common/models.py:1400 -msgid "Password twice" +#: common/models.py:1397 +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1401 -msgid "On signup ask users twice for their password" +#: common/models.py:1403 +msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1407 -msgid "Allowed domains" +#: common/models.py:1404 +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1408 -msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +#: common/models.py:1410 +msgid "Stock Stale Time" msgstr "" -#: common/models.py:1414 -msgid "Group on signup" +#: common/models.py:1411 +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1415 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1418 +msgid "Build Expired Stock" msgstr "" -#: common/models.py:1421 -msgid "Enforce MFA" +#: common/models.py:1419 +msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1422 -msgid "Users must use multifactor security." +#: common/models.py:1425 +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1428 -msgid "Check plugins on startup" +#: common/models.py:1426 +msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1429 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1432 +msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1436 -msgid "Check plugin signatures" +#: common/models.py:1433 +msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1437 -msgid "Check and show signatures for plugins" +#: common/models.py:1438 +msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1444 -msgid "Enable URL integration" +#: common/models.py:1439 +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1445 -msgid "Enable plugins to add URL routes" +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" msgstr "" #: common/models.py:1452 -msgid "Enable navigation integration" +msgid "Return Order Reference Pattern" msgstr "" #: common/models.py:1453 -msgid "Enable plugins to integrate into navigation" +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" msgstr "" #: common/models.py:1460 -msgid "Enable app integration" +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1461 -msgid "Enable plugins to add apps" +#: common/models.py:1466 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1468 -msgid "Enable schedule integration" +#: common/models.py:1467 +msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1469 -msgid "Enable plugins to run scheduled tasks" +#: common/models.py:1473 +msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1476 -msgid "Enable event integration" +#: common/models.py:1474 +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1477 -msgid "Enable plugins to respond to internal events" +#: common/models.py:1480 +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1496 common/models.py:1845 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1481 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1518 -msgid "Show subscribed parts" +#: common/models.py:1487 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1519 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1488 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1525 -msgid "Show subscribed categories" +#: common/models.py:1494 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1526 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:1495 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1532 -msgid "Show latest parts" +#: common/models.py:1502 +msgid "Enable password forgot" msgstr "" -#: common/models.py:1533 -msgid "Show latest parts on the homepage" +#: common/models.py:1503 +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1539 -msgid "Recent Part Count" +#: common/models.py:1509 +msgid "Enable registration" msgstr "" -#: common/models.py:1540 -msgid "Number of recent parts to display on index page" +#: common/models.py:1510 +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1546 -msgid "Show unvalidated BOMs" +#: common/models.py:1516 +msgid "Enable SSO" msgstr "" -#: common/models.py:1547 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:1517 +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1553 -msgid "Show recent stock changes" +#: common/models.py:1523 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1554 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:1524 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1560 -msgid "Recent Stock Count" +#: common/models.py:1530 +msgid "Email required" msgstr "" -#: common/models.py:1561 -msgid "Number of recent stock items to display on index page" +#: common/models.py:1531 +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1567 -msgid "Show low stock" +#: common/models.py:1537 +msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1568 -msgid "Show low stock items on the homepage" +#: common/models.py:1538 +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1574 -msgid "Show depleted stock" +#: common/models.py:1544 +msgid "Mail twice" msgstr "" -#: common/models.py:1575 -msgid "Show depleted stock items on the homepage" +#: common/models.py:1545 +msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1581 -msgid "Show needed stock" +#: common/models.py:1551 +msgid "Password twice" msgstr "" -#: common/models.py:1582 -msgid "Show stock items needed for builds on the homepage" +#: common/models.py:1552 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:1558 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:1559 +msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +msgstr "" + +#: common/models.py:1565 +msgid "Group on signup" +msgstr "" + +#: common/models.py:1566 +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1572 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:1573 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1579 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1580 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:1587 +msgid "Check plugin signatures" msgstr "" #: common/models.py:1588 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:1589 -msgid "Show expired stock items on the homepage" +msgid "Check and show signatures for plugins" msgstr "" #: common/models.py:1595 -msgid "Show stale stock" +msgid "Enable URL integration" msgstr "" #: common/models.py:1596 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:1602 -msgid "Show pending builds" +msgid "Enable plugins to add URL routes" msgstr "" #: common/models.py:1603 -msgid "Show pending builds on the homepage" +msgid "Enable navigation integration" msgstr "" -#: common/models.py:1609 -msgid "Show overdue builds" +#: common/models.py:1604 +msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1610 -msgid "Show overdue builds on the homepage" +#: common/models.py:1611 +msgid "Enable app integration" msgstr "" -#: common/models.py:1616 -msgid "Show outstanding POs" +#: common/models.py:1612 +msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1617 -msgid "Show outstanding POs on the homepage" +#: common/models.py:1619 +msgid "Enable schedule integration" msgstr "" -#: common/models.py:1623 -msgid "Show overdue POs" +#: common/models.py:1620 +msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1624 -msgid "Show overdue POs on the homepage" +#: common/models.py:1627 +msgid "Enable event integration" msgstr "" -#: common/models.py:1630 -msgid "Show outstanding SOs" +#: common/models.py:1628 +msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1631 -msgid "Show outstanding SOs on the homepage" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1637 -msgid "Show overdue SOs" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1638 -msgid "Show overdue SOs on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1644 -msgid "Show News" -msgstr "" - -#: common/models.py:1645 -msgid "Show news on the homepage" -msgstr "" - -#: common/models.py:1651 -msgid "Inline label display" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:1773 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:1774 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:1780 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:1781 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:1787 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:1788 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:1794 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:1795 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:1801 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:1802 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:1808 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:1809 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:1815 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:1816 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:1822 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:1823 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:1829 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:1830 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:1836 +msgid "Show News" +msgstr "" + +#: common/models.py:1837 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:1843 +msgid "Inline label display" +msgstr "" + +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1658 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1659 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1665 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1666 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1672 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1673 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1679 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1680 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1686 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1687 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1693 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1694 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1700 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1701 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1707 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1708 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1714 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1715 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1721 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1722 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1728 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1729 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1735 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1736 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1742 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1743 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1749 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1750 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1756 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1757 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1763 +#: common/models.py:1962 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 msgid "Search Preview Results" msgstr "" -#: common/models.py:1764 +#: common/models.py:1977 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1770 +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1771 +#: common/models.py:1998 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1777 +#: common/models.py:2004 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1778 +#: common/models.py:2005 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1784 +#: common/models.py:2011 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1785 +#: common/models.py:2012 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1791 +#: common/models.py:2018 msgid "Date Format" msgstr "" -#: common/models.py:1792 +#: common/models.py:2019 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1806 part/templates/part/detail.html:41 +#: common/models.py:2033 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1807 +#: common/models.py:2034 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1813 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:822 +#: common/models.py:2040 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:1814 -msgid "Display part stocktake information" +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:1820 +#: common/models.py:2047 msgid "Table String Length" msgstr "" -#: common/models.py:1821 +#: common/models.py:2048 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1885 +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1892 company/serializers.py:393 order/models.py:975 -#: templates/js/translated/company.js:1164 templates/js/translated/part.js:1416 -#: templates/js/translated/pricing.js:354 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1893 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2053 common/models.py:2231 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2054 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2063 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2068 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2069 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2083 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2084 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2091 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2092 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2198 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2199 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2207 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2208 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2215 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2216 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2222 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2223 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2232 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2237 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2238 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2397 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2403 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2413 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2418 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2423 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2428 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2429 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -2939,7 +3266,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -2947,21 +3274,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -2999,7 +3330,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3025,6 +3356,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3033,6 +3365,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3044,11 +3379,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3076,234 +3411,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:399 -#: company/templates/company/company_base.html:107 part/models.py:2783 -#: part/serializers.py:156 part/serializers.py:184 stock/serializers.py:182 -#: templates/InvenTree/settings/pricing.html:64 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:487 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:581 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:491 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 templates/js/translated/part.js:241 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 templates/js/translated/part.js:242 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2286 -#: templates/js/translated/part.js:252 templates/js/translated/part.js:1338 -msgid "MPN" -msgstr "" - -#: company/models.py:276 templates/js/translated/part.js:253 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:510 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2156 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1160 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3209 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:350 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1166 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:455 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:497 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:252 part/bom.py:280 -#: stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2017 -#: templates/js/translated/part.js:222 templates/js/translated/part.js:1306 -#: templates/js/translated/pricing.js:231 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:498 templates/js/translated/part.js:223 -msgid "Select supplier" -msgstr "" - -#: company/models.py:503 company/templates/company/supplier_part.html:146 -#: part/bom.py:253 part/bom.py:281 templates/js/translated/company.js:303 -#: templates/js/translated/order.js:2273 templates/js/translated/part.js:233 -#: templates/js/translated/part.js:1324 templates/js/translated/pricing.js:243 -msgid "SKU" -msgstr "" - -#: company/models.py:504 templates/js/translated/part.js:234 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:511 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:517 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:523 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:528 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3462 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:532 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:532 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:534 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:534 -msgid "Part packaging" -msgstr "" - -#: company/models.py:537 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:826 -#: templates/js/translated/order.js:1253 templates/js/translated/order.js:1508 -#: templates/js/translated/order.js:2317 templates/js/translated/order.js:2334 -#: templates/js/translated/part.js:1356 templates/js/translated/part.js:1408 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:538 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:544 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:544 -msgid "Order multiple" -msgstr "" - -#: company/models.py:552 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1118 templates/js/translated/build.js:1883 -#: templates/js/translated/build.js:2770 templates/js/translated/part.js:626 -#: templates/js/translated/part.js:629 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:553 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:557 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:558 -msgid "Date of last update of availability data" -msgstr "" - -#: company/models.py:686 -msgid "last updated" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:689 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3316,7 +3647,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3344,14 +3675,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2827 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3364,7 +3698,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3373,123 +3707,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1732 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3500,18 +3864,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3526,36 +3890,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:38 -#: templates/js/translated/part.js:354 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:62 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3563,8 +3927,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:865 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3580,55 +3944,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1173 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3639,13 +3979,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3657,95 +3997,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:413 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1048 templates/js/translated/part.js:1649 -#: templates/js/translated/part.js:1805 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3763,7 +4076,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3771,519 +4084,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1254 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:619 templates/js/translated/order.js:1174 -#: templates/js/translated/order.js:2001 templates/js/translated/part.js:1283 -#: templates/js/translated/pricing.js:515 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1258 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2026 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2874 templates/js/translated/order.js:3036 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:419 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 -msgid "Target shipping date for this line item" +#: order/models.py:1069 +msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3492 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1679 templates/js/translated/order.js:2404 -#: templates/js/translated/part.js:1400 templates/js/translated/part.js:1432 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:800 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:665 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1535 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1546 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4302,102 +4700,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4448,10 +4867,12 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 -#: templates/js/translated/build.js:641 templates/js/translated/build.js:2088 -#: templates/js/translated/order.js:1122 templates/js/translated/order.js:1624 -#: templates/js/translated/order.js:3111 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4493,9 +4914,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4508,1029 +4931,1269 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:260 -#: templates/js/translated/order.js:728 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:291 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:232 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:397 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2840 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1224 -#: templates/js/translated/build.js:1989 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3343 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3347 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1034 templates/js/translated/part.js:1762 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1039 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:145 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1156 templates/js/translated/build.js:1935 -#: templates/js/translated/part.js:616 templates/js/translated/part.js:636 -#: templates/js/translated/part.js:1652 templates/js/translated/part.js:1830 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1947 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2777 -#: templates/js/translated/order.js:3951 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:619 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:1656 templates/js/translated/part.js:1837 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2867 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2873 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2346 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3351 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:91 -#: templates/js/translated/pricing.js:732 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:86 -#: templates/js/translated/pricing.js:740 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:539 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:559 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:577 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:663 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:821 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:822 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:828 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/api.py:1282 -msgid "Must be greater than zero" -msgstr "" - -#: part/api.py:1286 -msgid "Must be a valid quantity" -msgstr "" - -#: part/api.py:1301 -msgid "Specify location for initial part stock" -msgstr "" - -#: part/api.py:1332 part/api.py:1336 part/api.py:1351 part/api.py:1355 -msgid "This field is required" -msgstr "" - -#: part/bom.py:142 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" -#: part/bom.py:143 templates/email/low_stock_notification.html:17 +#: part/bom.py:176 templates/email/low_stock_notification.html:17 msgid "Total Stock" msgstr "" -#: part/bom.py:144 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3918 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3292 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3348 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3047 part/models.py:3291 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:230 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1784 templates/js/translated/part.js:2051 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 -msgid "Stock keeping units for this part" +#: part/models.py:979 +msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1901 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2784 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2789 templates/js/translated/part.js:806 -msgid "Updated" -msgstr "" - -#: part/models.py:2790 -msgid "Timestamp of last pricing update" -msgstr "" - -#: part/models.py:2807 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2808 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2813 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2814 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2819 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2820 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2825 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2826 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2831 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2832 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2837 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2838 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2843 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2844 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2849 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2850 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2855 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2856 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2861 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2862 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2868 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2874 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2879 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2880 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2885 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2886 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2891 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2892 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2897 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2898 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2916 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2923 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2927 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2043 templates/js/translated/part.js:887 -#: templates/js/translated/pricing.js:537 -#: templates/js/translated/pricing.js:658 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2928 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2936 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2944 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3094 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3111 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3131 templates/js/translated/part.js:2397 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3132 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3137 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3138 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3143 templates/js/translated/part.js:2406 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3144 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3149 templates/js/translated/part.js:2414 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3150 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3155 templates/js/translated/part.js:2421 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3156 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3197 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3205 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3209 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3214 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3247 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3249 part/models.py:3297 part/models.py:3298 -#: templates/InvenTree/settings/settings.html:225 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3251 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3251 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3302 templates/InvenTree/settings/settings.html:234 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3303 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3344 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3352 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3355 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3356 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3425 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3433 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3434 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3440 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3444 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:933 templates/js/translated/bom.js:986 -#: templates/js/translated/build.js:1868 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3445 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3450 templates/js/translated/bom.js:929 -#: templates/js/translated/bom.js:995 templates/js/translated/build.js:1859 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3451 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3455 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3456 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3459 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3462 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3464 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3464 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3468 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1012 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3469 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3474 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1004 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3475 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3561 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3570 part/models.py:3572 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3699 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3720 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3733 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3741 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3756 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3760 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3760 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3778 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3782 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:157 part/serializers.py:185 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:584 +#: part/serializers.py:307 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:307 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:317 part/templates/part/detail.html:296 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:317 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:332 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:332 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:338 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:338 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:348 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:359 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:365 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:372 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:380 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:392 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:400 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:621 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:626 templates/js/translated/part.js:68 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:626 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:631 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:631 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:585 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:895 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:904 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:909 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:910 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:915 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:921 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:922 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:962 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:963 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1051 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1080 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5543,7 +6206,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5551,108 +6214,92 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:405 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" -#: part/templates/part/category.html:352 -msgid "Create Part" -msgstr "" - -#: part/templates/part/category.html:355 -msgid "Create another part after this one" -msgstr "" - -#: part/templates/part/category.html:356 -msgid "Part created successfully" -msgstr "" - #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:407 -msgid "Duplicate Part" -msgstr "" - #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." @@ -5682,126 +6329,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:295 templates/js/translated/part.js:279 -msgid "Copy BOM" -msgstr "" - -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 -#: templates/js/translated/bom.js:1268 templates/js/translated/bom.js:1269 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 +#: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:796 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5836,13 +6481,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:998 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:999 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5864,7 +6509,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5874,7 +6519,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -5927,39 +6572,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:680 templates/js/translated/part.js:1026 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1166 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -5967,44 +6610,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1032 -#: templates/js/translated/part.js:1069 templates/js/translated/part.js:1875 -#: templates/js/translated/pricing.js:124 -#: templates/js/translated/pricing.js:762 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" -#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:78 -#: part/templates/part/prices.html:238 templates/js/translated/pricing.js:218 +#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6015,19 +6662,12 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" -#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:94 -#: part/templates/part/prices.html:262 +#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:87 +#: part/templates/part/prices.html:240 msgid "BOM Pricing" msgstr "" @@ -6059,11 +6699,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6079,74 +6735,75 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" -#: part/templates/part/prices.html:34 part/templates/part/prices.html:126 +#: part/templates/part/prices.html:34 part/templates/part/prices.html:116 msgid "Price Category" msgstr "" -#: part/templates/part/prices.html:35 part/templates/part/prices.html:127 +#: part/templates/part/prices.html:35 part/templates/part/prices.html:117 msgid "Minimum" msgstr "" -#: part/templates/part/prices.html:36 part/templates/part/prices.html:128 +#: part/templates/part/prices.html:36 part/templates/part/prices.html:118 msgid "Maximum" msgstr "" -#: part/templates/part/prices.html:49 part/templates/part/prices.html:185 +#: part/templates/part/prices.html:48 part/templates/part/prices.html:163 msgid "Internal Pricing" msgstr "" -#: part/templates/part/prices.html:64 part/templates/part/prices.html:217 +#: part/templates/part/prices.html:61 part/templates/part/prices.html:195 msgid "Purchase History" msgstr "" -#: part/templates/part/prices.html:103 part/templates/part/prices.html:286 +#: part/templates/part/prices.html:95 part/templates/part/prices.html:264 msgid "Variant Pricing" msgstr "" -#: part/templates/part/prices.html:111 +#: part/templates/part/prices.html:102 msgid "Overall Pricing" msgstr "" -#: part/templates/part/prices.html:155 part/templates/part/prices.html:338 +#: part/templates/part/prices.html:138 part/templates/part/prices.html:316 msgid "Sale History" msgstr "" -#: part/templates/part/prices.html:168 +#: part/templates/part/prices.html:146 msgid "Sale price data is not available for this part" msgstr "" -#: part/templates/part/prices.html:175 +#: part/templates/part/prices.html:153 msgid "Price range data is not available for this part." msgstr "" -#: part/templates/part/prices.html:186 part/templates/part/prices.html:218 -#: part/templates/part/prices.html:239 part/templates/part/prices.html:263 -#: part/templates/part/prices.html:287 part/templates/part/prices.html:310 -#: part/templates/part/prices.html:339 +#: part/templates/part/prices.html:164 part/templates/part/prices.html:196 +#: part/templates/part/prices.html:217 part/templates/part/prices.html:241 +#: part/templates/part/prices.html:265 part/templates/part/prices.html:288 +#: part/templates/part/prices.html:317 msgid "Jump to overview" msgstr "" -#: part/templates/part/prices.html:191 +#: part/templates/part/prices.html:169 msgid "Add Internal Price Break" msgstr "" -#: part/templates/part/prices.html:309 +#: part/templates/part/prices.html:287 msgid "Sale Pricing" msgstr "" -#: part/templates/part/prices.html:315 +#: part/templates/part/prices.html:293 msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:642 -#: templates/js/translated/part.js:1644 templates/js/translated/part.js:1646 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6196,45 +6853,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:210 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:262 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:517 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6263,6 +6915,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6274,15 +6927,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 -msgid "Inventree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "Provides native support for barcodes" +#: plugin/builtin/barcodes/inventree_barcode.py:28 +msgid "InvenTree Barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:29 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6357,19 +7010,23 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:158 +#: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 +msgid "Unvailable" +msgstr "" + +#: plugin/models.py:164 msgid "Sample plugin" msgstr "" -#: plugin/models.py:167 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:192 templates/InvenTree/settings/plugin_settings.html:10 +#: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" -#: plugin/models.py:257 +#: plugin/models.py:263 msgid "Method" msgstr "" @@ -6381,18 +7038,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:439 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:441 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:443 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6427,132 +7085,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6564,361 +7226,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:478 templates/js/translated/build.js:634 -#: templates/js/translated/build.js:1244 templates/js/translated/build.js:1745 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:121 templates/js/translated/order.js:3611 -#: templates/js/translated/order.js:3698 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2144 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2150 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:749 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:764 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:805 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:806 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:736 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:738 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:749 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:752 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:758 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:765 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:780 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:780 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:793 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:801 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:829 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1303 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1315 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1318 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1321 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1328 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1398 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1401 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1404 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1407 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1410 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1413 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1420 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1428 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1432 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1601 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2062 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2120 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2126 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2145 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2151 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2157 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2164 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2170 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -6926,128 +7653,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7072,7 +7795,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7084,15 +7807,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7105,7 +7828,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7114,15 +7837,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7131,11 +7854,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7175,125 +7898,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1768 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7305,47 +8036,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7355,11 +8090,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7368,11 +8098,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7392,10 +8126,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7412,7 +8142,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7539,7 +8270,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7555,8 +8286,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7594,7 +8325,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7612,7 +8342,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7630,7 +8360,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7641,20 +8372,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:40 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:58 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7663,7 +8402,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7698,7 +8437,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7711,10 +8450,6 @@ msgstr "" msgid "Sample" msgstr "" -#: templates/InvenTree/settings/plugin_details.html:47 -msgid "Unvailable" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7789,41 +8524,33 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:29 -msgid "Currency Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:35 -msgid "Update Now" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:44 -#: templates/InvenTree/settings/pricing.html:48 -msgid "Last Update" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:48 -msgid "Never" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:58 -msgid "Base Currency" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:63 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:65 -msgid "Rate" +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" -#: templates/InvenTree/settings/setting.html:37 +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7831,67 +8558,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:215 +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:237 -#: templates/InvenTree/settings/settings.html:362 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:238 -#: templates/InvenTree/settings/settings.html:363 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:278 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:323 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:335 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:339 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:400 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:414 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:422 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -7901,13 +8632,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -7915,29 +8644,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -7949,6 +8679,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -7956,8 +8690,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:33 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8107,6 +8841,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8172,8 +8910,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8242,7 +8980,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:649 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8301,7 +9039,7 @@ msgstr "" msgid "Reset My Password" msgstr "" -#: templates/account/password_reset.html:27 templates/account/signup.html:36 +#: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." msgstr "" @@ -8327,8 +9065,8 @@ msgstr "" msgid "Already have an account? Then please sign in." msgstr "" -#: templates/account/signup.html:27 -msgid "Or use a SSO-provider for signup" +#: templates/account/signup.html:28 +msgid "Use a SSO-provider for signup" msgstr "" #: templates/account/signup_closed.html:5 @@ -8410,11 +9148,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8422,32 +9160,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8469,7 +9208,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1630 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8483,214 +9222,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2726 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8706,10 +9437,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:659 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1217 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8735,243 +9466,251 @@ msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" #: templates/js/translated/bom.js:334 -msgid "Include Parameter Data" +msgid "Include Alternative Parts" msgstr "" #: templates/js/translated/bom.js:335 -msgid "Include part parameter data in exported BOM" +msgid "Include alternative parts in exported BOM" msgstr "" #: templates/js/translated/bom.js:340 -msgid "Include Stock Data" +msgid "Include Parameter Data" msgstr "" #: templates/js/translated/bom.js:341 -msgid "Include part stock data in exported BOM" +msgid "Include part parameter data in exported BOM" msgstr "" #: templates/js/translated/bom.js:346 -msgid "Include Manufacturer Data" +msgid "Include Stock Data" msgstr "" #: templates/js/translated/bom.js:347 -msgid "Include part manufacturer data in exported BOM" +msgid "Include part stock data in exported BOM" msgstr "" #: templates/js/translated/bom.js:352 -msgid "Include Supplier Data" +msgid "Include Manufacturer Data" msgstr "" #: templates/js/translated/bom.js:353 -msgid "Include part supplier data in exported BOM" +msgid "Include part manufacturer data in exported BOM" msgstr "" #: templates/js/translated/bom.js:358 -msgid "Include Pricing Data" +msgid "Include Supplier Data" msgstr "" #: templates/js/translated/bom.js:359 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:364 +msgid "Include Pricing Data" +msgstr "" + +#: templates/js/translated/bom.js:365 msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:550 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:604 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:615 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:660 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:661 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:723 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:739 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:868 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:878 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:882 templates/js/translated/build.js:1845 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:972 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1023 templates/js/translated/bom.js:1261 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1095 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1100 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1138 templates/js/translated/build.js:1917 -#: templates/js/translated/order.js:3932 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1921 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1923 -#: templates/js/translated/part.js:1061 templates/js/translated/part.js:1843 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/build.js:1925 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1172 templates/js/translated/build.js:1908 -#: templates/js/translated/build.js:1995 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1232 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1234 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1236 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1238 templates/js/translated/bom.js:1434 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1240 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1345 templates/js/translated/build.js:1689 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1613 templates/js/translated/build.js:1828 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1639 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:95 +#: templates/js/translated/build.js:96 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:138 +#: templates/js/translated/build.js:139 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:171 +#: templates/js/translated/build.js:172 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:180 +#: templates/js/translated/build.js:181 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:186 +#: templates/js/translated/build.js:187 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:193 +#: templates/js/translated/build.js:194 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:246 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:253 +#: templates/js/translated/build.js:254 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:258 +#: templates/js/translated/build.js:259 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:276 +#: templates/js/translated/build.js:277 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:317 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:319 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:329 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:329 +#: templates/js/translated/build.js:330 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:337 +#: templates/js/translated/build.js:338 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:338 +#: templates/js/translated/build.js:339 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:345 +#: templates/js/translated/build.js:346 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:376 +#: templates/js/translated/build.js:377 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:387 +#: templates/js/translated/build.js:388 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Complete build output" msgstr "" @@ -8979,577 +9718,594 @@ msgstr "" msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:465 templates/js/translated/build.js:621 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:520 templates/js/translated/build.js:676 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:542 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:689 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:779 +#: templates/js/translated/build.js:780 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:816 +#: templates/js/translated/build.js:817 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1204 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1275 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1282 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1304 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1309 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1785 templates/js/translated/build.js:2781 -#: templates/js/translated/order.js:3646 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1787 templates/js/translated/build.js:2782 -#: templates/js/translated/order.js:3647 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1805 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1815 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1877 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1913 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2003 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2007 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2010 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2049 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1045 templates/js/translated/order.js:3173 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2099 templates/js/translated/order.js:3122 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2178 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3188 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2221 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2232 templates/js/translated/order.js:3285 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2304 templates/js/translated/order.js:3362 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2401 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2404 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2433 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2574 templates/js/translated/part.js:1737 -#: templates/js/translated/part.js:2284 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2588 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2616 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2652 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2758 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:576 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:862 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:664 -#: templates/js/translated/part.js:1018 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:668 -#: templates/js/translated/part.js:1022 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1141 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1183 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1184 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1201 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1213 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1056 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1057 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1112 -#: templates/js/translated/pricing.js:423 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1128 -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1145 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1174 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1180 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1181 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:675 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:776 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1269 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1706 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1922 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2175 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2631 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2631 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2643 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:28 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:434 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:324 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9558,795 +10314,384 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:97 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:102 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:142 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:162 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:218 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:222 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:254 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:284 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:301 templates/js/translated/order.js:413 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:307 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:312 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:313 templates/js/translated/order.js:427 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:336 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:341 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:347 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:370 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:375 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:426 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:450 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:455 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:509 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:534 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:559 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:620 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:627 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:628 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:635 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:636 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:653 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:670 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:995 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1046 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1071 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1080 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1098 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1131 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1271 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1290 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1467 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1468 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1488 templates/js/translated/order.js:1601 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1494 templates/js/translated/order.js:1612 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1509 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1520 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1584 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1677 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1678 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1680 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1703 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1704 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:1982 templates/js/translated/part.js:1254 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2009 templates/js/translated/order.js:2817 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2059 templates/js/translated/order.js:2882 -#: templates/js/translated/order.js:3023 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2162 templates/js/translated/order.js:4083 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2179 templates/js/translated/order.js:4105 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2192 templates/js/translated/order.js:4116 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2235 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2262 templates/js/translated/order.js:3835 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2317 templates/js/translated/part.js:1356 -#: templates/js/translated/part.js:1408 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2348 templates/js/translated/order.js:2535 -#: templates/js/translated/order.js:3860 templates/js/translated/order.js:4351 -#: templates/js/translated/pricing.js:260 -#: templates/js/translated/pricing.js:329 -#: templates/js/translated/pricing.js:545 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2358 templates/js/translated/order.js:2545 -#: templates/js/translated/order.js:3870 templates/js/translated/order.js:4361 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2388 templates/js/translated/order.js:3900 -#: templates/js/translated/part.js:1392 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2447 templates/js/translated/part.js:1437 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2451 templates/js/translated/order.js:4037 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2452 templates/js/translated/order.js:4038 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2453 templates/js/translated/order.js:4042 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2582 templates/js/translated/order.js:4397 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2583 templates/js/translated/order.js:4398 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2584 templates/js/translated/order.js:4399 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4428 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2635 templates/js/translated/order.js:4449 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2646 templates/js/translated/order.js:4460 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2657 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2768 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2831 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2929 -msgid "Edit shipment" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" -#: templates/js/translated/order.js:2932 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2937 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2957 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:2974 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3008 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3018 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3042 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3052 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3221 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3272 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3273 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3481 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3560 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3577 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3578 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3623 templates/js/translated/order.js:3712 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3631 templates/js/translated/order.js:3721 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4021 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4027 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4034 templates/js/translated/order.js:4232 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4046 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4131 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4240 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4254 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4471 -msgid "No matching lines" -msgstr "" - -#: templates/js/translated/part.js:55 +#: templates/js/translated/part.js:56 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:59 +#: templates/js/translated/part.js:60 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:63 +#: templates/js/translated/part.js:64 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:67 -msgid "Supplier Options" -msgstr "" - -#: templates/js/translated/part.js:81 +#: templates/js/translated/part.js:87 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:171 -msgid "Create Initial Stock" -msgstr "" - -#: templates/js/translated/part.js:172 -msgid "Create an initial stock item for this part" -msgstr "" - -#: templates/js/translated/part.js:179 -msgid "Initial Stock Quantity" -msgstr "" - -#: templates/js/translated/part.js:180 -msgid "Specify initial stock quantity for this part" -msgstr "" - -#: templates/js/translated/part.js:187 -msgid "Select destination stock location" -msgstr "" - -#: templates/js/translated/part.js:205 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:206 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:214 -msgid "Add Supplier Data" -msgstr "" - -#: templates/js/translated/part.js:215 -msgid "Create initial supplier data for this part" -msgstr "" - -#: templates/js/translated/part.js:271 -msgid "Copy Image" -msgstr "" - -#: templates/js/translated/part.js:272 -msgid "Copy image from original part" -msgstr "" - -#: templates/js/translated/part.js:280 -msgid "Copy bill of materials from original part" -msgstr "" - -#: templates/js/translated/part.js:287 -msgid "Copy Parameters" -msgstr "" - -#: templates/js/translated/part.js:288 -msgid "Copy parameter data from original part" -msgstr "" - -#: templates/js/translated/part.js:301 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:316 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:332 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:345 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:350 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:363 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:368 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:397 +#: templates/js/translated/part.js:351 +msgid "Create Part" +msgstr "" + +#: templates/js/translated/part.js:353 +msgid "Create another part after this one" +msgstr "" + +#: templates/js/translated/part.js:354 +msgid "Part created successfully" +msgstr "" + +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:399 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:410 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:479 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:480 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:481 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:488 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:524 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:526 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:531 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:588 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1825 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:656 templates/js/translated/part.js:1010 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:660 templates/js/translated/part.js:1014 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:672 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:676 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:761 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:769 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:770 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:871 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:910 templates/js/translated/part.js:933 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:914 templates/js/translated/part.js:945 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1086 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1507 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1531 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1598 templates/js/translated/part.js:1936 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1792 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1823 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1847 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1851 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1960 templates/js/translated/part.js:2203 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2042 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2047 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2052 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2065 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2223 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2303 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2319 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2434 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2435 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2441 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2463 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2477 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2558 templates/js/translated/part.js:2559 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2561 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2567 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2617 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2623 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2719 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2735 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10354,831 +10699,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:54 +#: templates/js/translated/pricing.js:141 +msgid "Error fetching currency data" +msgstr "" + +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:196 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:305 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:361 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:362 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:480 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:502 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:602 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:624 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:713 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:753 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11190,19 +11976,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11214,10 +12000,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11238,18 +12020,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11297,10 +12071,6 @@ msgid "" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11365,55 +12135,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11433,50 +12199,50 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/fa/LC_MESSAGES/django.po b/InvenTree/locale/fa/LC_MESSAGES/django.po index 1fd297ee18..107c6bccd4 100644 --- a/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "جزئیات خطا را می توان در پنل مدیریت پیدا کرد" @@ -29,23 +33,26 @@ msgstr "جزئیات خطا را می توان در پنل مدیریت پیدا msgid "Enter date" msgstr "تاریخ را وارد کنید" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "یادداشت" @@ -58,23 +65,23 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی msgid "Provided value does not match required pattern: " msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "رمز عبور را وارد کنید" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "گذرواژه جدید را وارد کنید" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "تأیید کلمه‌ی عبور" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "گذرواژه جدید را تایید کنید" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "رمز عبور قدیمی" @@ -98,95 +105,95 @@ msgstr "آدرس ایمیل اصلی ارائه شده معتبر نیست." msgid "The provided email domain is not approved." msgstr "دامنه ایمیل ارائه شده تایید نشده است." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "فایل‌های داده" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "فایل را برای بارگذاری انتخاب کنید" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "این نوع فایل پشتیبانی نمی‌شود" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "حجم فایل خیلی بزرگ است" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "هیچ ستونی در فایل یافت نشد" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "هیچ ردیف داده ای در فایل یافت نشد" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "هیچ ردیف داده ای ارائه نشده است" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "هیچ ستون داده ای ارائه نشده است" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "ستون مورد نیاز وجود ندارد: \"{name}\"" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "ستون تکراری: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "آدرس اینترنتی" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "تایید" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po index 3064ab76fb..87f2a5c5eb 100644 --- a/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:25\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "L'utilisateur n'a pas la permission de voir ce modèle" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'administration" @@ -29,23 +33,26 @@ msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'admin msgid "Enter date" msgstr "Entrer la date" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Notes" @@ -58,23 +65,23 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle" msgid "Provided value does not match required pattern: " msgstr "La valeur fournie ne correspond pas au modèle requis : " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Entrer le mot de passe" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Entrer le nouveau mot de passe" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Confirmez le mot de passe" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Confirmer le nouveau mot de passe" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Ancien mot de passe" @@ -98,95 +105,95 @@ msgstr "L'adresse e-mail principale fournie n'est pas valide." msgid "The provided email domain is not approved." msgstr "Le domaine e-mail fourni n'est pas approuvé." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Le serveur a répondu avec une valeur de longueur de contenu invalide" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" -msgstr "Numéro de série dupliqué" +msgstr "Numéro de série en doublon" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Plage de groupe invalide : {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "La plage de groupe {g} dépasse la quantité autorisée ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Séquence de groupe invalide : {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Le nombre de numéros de série uniques ({s}) doit correspondre à la quantité ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Retirer les balises HTML de cette valeur" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Modèle mal formaté" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Clé de format inconnu spécifiée" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Clé de format requise manquante" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Le champ de référence ne peut pas être vide" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "La référence doit correspondre au modèle requis" @@ -194,566 +201,615 @@ msgstr "La référence doit correspondre au modèle requis" msgid "Reference number is too large" msgstr "Le numéro de référence est trop grand" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Fichier manquant" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Lien externe manquant" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Pièce jointe" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Lien" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Lien vers une url externe" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Commentaire" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Commentaire du fichier" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Utilisateur" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "date de chargement" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Le nom de fichier ne doit pas être vide" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Répertoire de pièce jointe invalide" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Le nom de fichier contient le caractère illégal '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Extension manquante du nom de fichier" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Une pièce jointe avec ce nom de fichier existe déjà" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Erreur lors du renommage du fichier" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "Les noms dupliqués ne peuvent pas exister sous le même parent" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Description" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "parent" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Chemin d'accès" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Données du code-barres" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Données de code-barres tierces" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Hash du code-barre" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Hachage unique des données du code-barres" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Devise" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Sélectionnez la devise à partir des options disponibles" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Nom du fichier" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Fichier de données" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Sélectionnez le fichier de données à envoyer" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Format de fichier non supporté" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Fichier trop volumineux" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Pas de colonnes trouvées dans le fichier" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Par de lignes de données trouvées dans le fichier" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Pas de lignes de données fournies" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Pas de colonne de données fournie" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Colonne requise manquante : {name}" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Colonne duliquée : '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tchèque" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Danois" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Allemand" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Grec" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Anglais" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Espagnol" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Espagnol (Mexique)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Perse" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Français" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hébreu" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Hongrois" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italien" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japonais" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Coréen" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Néerlandais" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norvégien" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polonais" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugais" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugais (Brésilien)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Russe" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Slovénien" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Suédois" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thaïlandais" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turc" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamien" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Chinois" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Échec de la vérification du processus d'arrière-plan" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Backend d'email non configuré" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Échec des contrôles de santé du système" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "En attente" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Placé" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Terminé" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Annulé" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Perdu" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Retourné" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "En Cours" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Expédié" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Attention requise" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Endommagé" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Détruit" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Rejeté" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "En quarantaine" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Ancienne entrée de suivi de stock" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Article en stock créé" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Article de stock modifié" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Numéro de série attribué" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Stock comptabilisé" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Stock ajouté manuellement" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Stock supprimé manuellement" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Emplacement modifié" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Installé dans l'assemblage" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Retiré de l'assemblage" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Composant installé" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Composant retiré" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Séparer de l'élément parent" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Fractionner l'élément enfant" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Articles de stock fusionnés" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Converti en variante" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Envoyé au client" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Retourné par le client" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "La sortie de l'ordre de construction a été créée" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Sortie de l'ordre de construction terminée" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Consommé par ordre de construction" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Reçu contre bon de commande" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Fabrication" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "Retour" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "L'IPN doit correspondre au modèle de regex {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "La valeur de surplus ne doit pas être négative" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Le surplus ne doit pas dépasser 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Valeur invalide pour le dépassement" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Modifier les informations utilisateur" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Définir le mot de passe" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Les mots de passe doivent correspondre" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Mot de passe incorrect" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Informations système" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "À propos d'InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Choix invalide pour la fabrication parente" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Choix invalide pour la fabrication parente" msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Choix invalide pour la fabrication parente" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Référence" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Brève description de la fabrication" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Fabrication parente" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder associé a cette fabrication" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Pièce" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Commande de vente à laquelle cette construction est allouée" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "achevé par" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Émis par" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Responsable" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Utilisateur responsable de cette commande de construction" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Notes de construction supplémentaires" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "L'article du stock sélectionné n'a pas été trouvé dans la BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Assemblage" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Construction à laquelle allouer des pièces" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Quantité" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Installer dans" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "La pièce en sortie ne correspond pas à la pièce de l'ordre de construction" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantité entière requise, car la facture de matériaux contient des pièces à puce" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Affecter automatiquement les éléments requis avec les numéros de série correspondants" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Emplacement" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "État" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "Compléter les sorties si le stock n'a pas été entièrement alloué" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "Supprimer le stock alloué" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "Soustraire tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "Supprimer toutes les sorties de construction qui n'ont pas été complétées" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Comment voulez-vous gérer les articles en stock supplémentaires assignés à l'ordre de construction" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter les articles de stock qui n'ont pas été complètement alloués à cette ordre de production" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepter que tous les ordres de production n'aient pas encore été achevés" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "La sortie de la construction doit pointer vers la même construction" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de construction" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "La sortie de construction doit être spécifiée pour l'allocation des pièces suivies" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La sortie de la construction ne peut pas être spécifiée pour l'allocation des pièces non suivies" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Cet article de stock a déjà été alloué à cette sortie de construction" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Emplacement de stock où les pièces doivent être fournies (laissez vide pour les prendre à partir de n'importe quel emplacement)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Les articles de stock à plusieurs emplacements peuvent être utilisés de manière interchangeable" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Actions de code-barres" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "Afficher le QR Code" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "Délier le code-barre" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "Lier le code-barre" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Actions d'impression" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Imprimer le rapport d'ordre de construction" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Modifier construction/ordre de construction" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Modifier l'assemblage" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Annuler l'assemblage" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "Dupliquer la construction" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Supprimer l'assemblage" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Compléter l'assemblage" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Description de la construction" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Aucune sortie de construction n'a été créée pour cet ordre de construction" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Cet ordre de construction est allouée à la commande de vente %(link)s" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Cet ordre de construction est un enfant de l'ordre de construction %(link)s" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "L'ordre de construction est prêt à être marqué comme terminé" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "L'ordre de construction ne peut pas être achevé car il reste des outputs en suspens" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "Le nombre de constructions requis n'a pas encore été atteint" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Le stock n'a pas été entièrement alloué à cet ordre de construction" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Date Cible" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Cette construction était due le %(target)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "En retard" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Terminé" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Commandes" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Émis par" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "Priorité" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Supprimer l'ordre de construction" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Détails de la construction" @@ -1497,8 +1652,8 @@ msgstr "Stock d'origine" msgid "Stock can be taken from any available location." msgstr "Le stock peut être pris à partir de n'importe quel endroit disponible." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Destination" @@ -1510,21 +1665,23 @@ msgstr "Stockage de destination non défini" msgid "Allocated Parts" msgstr "Pièces allouées" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Lot" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Créé le" @@ -1544,7 +1701,7 @@ msgstr "Commandes de constructions filles" msgid "Allocate Stock to Build" msgstr "Allouer le stock à la construction" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Désallouer le stock" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Commander les pièces requises" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Commander des pièces" @@ -1627,52 +1785,42 @@ msgstr "Supprimer les sorties de construction sélectionnées" msgid "Delete outputs" msgstr "Supprimer les sorties" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Actions d'impression" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Imprimer les étiquettes" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Sorties de Construction terminées" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Pieces jointes" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Notes de construction" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "Allocation terminée" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "Tous les articles de stock non suivis ont été alloués" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Nouvel ordre de construction" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Imprimer les commandes de construction" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "Détails de la commande de construction" @@ -1685,23 +1833,24 @@ msgstr "Sorties incomplètes" msgid "Completed Outputs" msgstr "Sorties de Construction terminées" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Format de fichier non pris en charge : {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Erreur de lecture du fichier (encodage invalide)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Erreur de lecture du fichier (format invalide)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Erreur de lecture du fichier (dimension incorrecte)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Erreur de lecture du fichier (les données pourraient être corrompues)" @@ -1722,1274 +1871,1390 @@ msgstr "{name.title()} Fichier" msgid "Select {name} file to upload" msgstr "Sélectionner le fichier {name} à uploader" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "Mise à jour" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "Date de la dernière mise à jour" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Pas de groupe" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "Un domaine vide n'est pas autorisé." -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Nom de domaine invalide : {domain}" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Nom de la société" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Nom de société interne" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "URL de base" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Devise par défaut" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Autoriser le téléchargement d'images distantes et de fichiers à partir d'URLs externes" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "Taille maximale autorisée pour le téléchargement de l'image distante" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permettre de remplacer l'agent utilisateur utilisé pour télécharger des images et des fichiers à partir d'URL externe (laisser vide pour la valeur par défaut)" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "Confirmation requise" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "Exiger une confirmation explicite de l’utilisateur pour certaines actions." -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "Profondeur de l'arborescence" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondeur de l'arborescence par défaut. Les niveaux plus profonds peuvent être chargés au fur et à mesure qu'ils sont nécessaires." -#: common/models.py:966 -msgid "Automatic Backup" -msgstr "Backup automatique" - -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" -msgstr "Activer le backup automatique de la base de données et des fichiers médias" - -#: common/models.py:973 -msgid "Days Between Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:974 -msgid "Specify number of days between automated backup events" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "Supprimer les anciennes tâches" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "Les résultats de la tâche en arrière-plan seront supprimés après le nombre de jours spécifié" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "Supprimer les logs d'erreurs" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "Les logs d'erreur seront supprimés après le nombre de jours spécifié" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "Supprimer les notifications" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "Les notifications de l'utilisateur seront supprimées après le nombre de jours spécifié" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Support des code-barres" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Activer le support du scanner de code-barres" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "Délai d'entrée du code-barres" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "Délai de traitement du code-barres" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "Prise en charge de la webcam code-barres" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "Regex IPN" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Autoriser les IPN dupliqués" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Permettre à plusieurs pièces de partager le même IPN" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Autoriser l'édition de l'IPN" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Copier les données de la pièce" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Copier les données des paramètres de la pièce" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Copier les données de test de la pièce" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Copier les templates de paramètres de catégorie" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Modèle" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Les pièces sont des templates par défaut" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Assemblage" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Les composantes peuvent être assemblées à partir d'autres composants par défaut" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Composant" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Les composantes peuvent être utilisées comme sous-composants par défaut" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Achetable" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Les pièces sont achetables par défaut" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Vendable" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Les pièces sont vendables par défaut" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Traçable" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Les pièces sont traçables par défaut" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtuelle" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Les pièces sont virtuelles par défaut" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Afficher l'import dans les vues" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Afficher l'assistant d'importation pour certaine vues de produits" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Afficher les pièces connexes" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Afficher les pièces connexes à une pièce" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "Stock initial" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "Permettre la création d'un stock initial lors de l'ajout d'une nouvelle pièce" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "Données initiales du fournisseur" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "Permettre la création des données initiales du fournisseur lors de l'ajout d'une nouvelle pièce" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Format d'affichage du nom de la pièce" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Format pour afficher le nom de la pièce" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "Icône de catégorie par défaut" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "Icône par défaut de la catégorie de la pièce (vide signifie aucune icône)" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "Décimales de tarification" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "Nombre de décimales à afficher lors du rendu des données de prix" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "Utiliser le prix fournisseur" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Inclure les réductions de prix dans le calcul du prix global" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "Remplacer l'historique des achats" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "La tarification historique des bons de commande remplace les réductions de prix des fournisseurs" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "Utiliser les prix des articles en stock" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "Utiliser les prix des données de stock saisies manuellement pour calculer les prix" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "Âge de tarification des articles de stock" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "Exclure les articles en stock datant de plus de ce nombre de jours des calculs de prix" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "Utiliser les prix variants" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "Inclure la tarification variante dans le calcul global des prix" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "Variantes actives uniquement" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "N'utiliser que des pièces de variante actives pour calculer le prix de la variante" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "Temps de reconstruction des prix" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "Nombre de jours avant la mise à jour automatique du prix de la pièce" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "jours" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "Backup automatique" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "Activer le backup automatique de la base de données et des fichiers médias" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "Les résultats de la tâche en arrière-plan seront supprimés après le nombre de jours spécifié" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "Les logs d'erreur seront supprimés après le nombre de jours spécifié" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "Les notifications de l'utilisateur seront supprimées après le nombre de jours spécifié" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Support des code-barres" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Activer le support du scanner de code-barres" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "Délai d'entrée du code-barres" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "Délai de traitement du code-barres" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "Prise en charge de la webcam code-barres" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "Regex IPN" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Autoriser les IPN dupliqués" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Permettre à plusieurs pièces de partager le même IPN" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Autoriser l'édition de l'IPN" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Copier les données de la pièce" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Copier les données des paramètres de la pièce" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Copier les données de test de la pièce" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Copier les templates de paramètres de catégorie" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Modèle" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Les pièces sont des templates par défaut" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Assemblage" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Les composantes peuvent être assemblées à partir d'autres composants par défaut" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Composant" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Les composantes peuvent être utilisées comme sous-composants par défaut" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Achetable" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Les pièces sont achetables par défaut" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Vendable" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Les pièces sont vendables par défaut" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Traçable" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Les pièces sont traçables par défaut" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtuelle" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Les pièces sont virtuelles par défaut" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Afficher l'import dans les vues" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Afficher l'assistant d'importation pour certaine vues de produits" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Afficher les pièces connexes" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Afficher les pièces connexes à une pièce" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "Stock initial" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "Permettre la création d'un stock initial lors de l'ajout d'une nouvelle pièce" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "Données initiales du fournisseur" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "Permettre la création des données initiales du fournisseur lors de l'ajout d'une nouvelle pièce" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Format d'affichage du nom de la pièce" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Format pour afficher le nom de la pièce" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "Icône de catégorie par défaut" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "Icône par défaut de la catégorie de la pièce (vide signifie aucune icône)" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "Utiliser le prix fournisseur" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "Inclure les réductions de prix dans le calcul du prix global" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "Remplacer l'historique des achats" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "La tarification historique des bons de commande remplace les réductions de prix des fournisseurs" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "Utiliser les prix des articles en stock" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "Utiliser les prix des données de stock saisies manuellement pour calculer les prix" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "Âge de tarification des articles de stock" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "Exclure les articles en stock datant de plus de ce nombre de jours des calculs de prix" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "Utiliser les prix variants" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "Inclure la tarification variante dans le calcul global des prix" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "Variantes actives uniquement" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "N'utiliser que des pièces de variante actives pour calculer le prix de la variante" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "Nombre de jours avant la mise à jour automatique du prix de la pièce" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Prix internes" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" -msgstr "" +msgstr "Si disponible, les prix internes remplacent les calculs de la fourchette de prix" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Résolution DPI lors de la génération de fichiers image pour fournir aux plugins d'impression d'étiquettes" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Taille de la page" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "Activer les rapports de test" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "Activer la génération de rapports de test" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "Joindre des rapports de test" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Lors de l'impression d'un rapport de test, joignez une copie du rapport de test à l'article en stock associé" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "Les numéros de série pour les articles en stock doivent être uniques au niveau global" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "Remplir automatiquement les Numéros de Série" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "Remplir automatiquement les numéros de série dans les formulaires" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" -msgstr "" +msgstr "Détermine le comportement par défaut lorsqu'un article de stock est épuisé" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "Modèle pour générer des codes par défaut pour les articles en stock" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" -msgstr "" +msgstr "Délai de péremption du stock" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" -msgstr "" +msgstr "Nombre de jours pendant lesquels les articles en stock sont considérés comme périmés avant d'expirer" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" -msgstr "" +msgstr "Construction de stock expirée" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "Activer le contrôle de la propriété sur les emplacements de stock et les articles" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "Icône par défaut de l'emplacement du stock (vide signifie aucune icône)" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "Modèle requis pour générer le champ de référence de l'ordre de construction" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "Modèle requis pour générer le champ de référence du bon de commande" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "Activer la création d'expédition par défaut avec les bons de commandes" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" -msgstr "" +msgstr "Modifier les commandes de vente terminées" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +msgstr "Autoriser la modification des commandes de vente après avoir été expédiées ou complétées" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "Modèle requis pour générer le champ de référence de bon de commande" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "Modifier les bons de commande terminés" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +msgstr "Autoriser la modification des bons de commande après avoir été expédiés ou complétés" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Activer la fonction \"Mot de passe oublié\" sur les pages de connexion" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Activer l'auto-inscription pour les utilisateurs sur les pages de connexion" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activer l'auto-inscription via SSO pour les utilisateurs sur les pages de connexion" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "Email requis" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "Remplir automatiquement les détails de l'utilisateur à partir des données de compte SSO" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "Courriel en double" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mot de passe" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "Restreindre l'inscription à certains domaines (séparés par des virgules, commence par @)" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "Groupe auquel les nouveaux utilisateurs sont assignés lors de l'inscription" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Vérifier que tous les plugins sont installés au démarrage - activer dans les environnements conteneurs" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "Vérifier les signatures du plugin" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "Vérifier et afficher les signatures des plugins" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "Fonctionnalité d'inventaire" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "Activer la fonctionnalité d'inventaire pour enregistrer les niveaux de stock et le calcul de la valeur du stock" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "Période de l'inventaire automatique" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "Nombre de jours entre l'enregistrement automatique des stocks (définir à zéro pour désactiver)" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "Les rapports d'inventaire seront supprimés après le nombre de jours spécifié" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "Pas d'imprimante (Exporter vers PDF)" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "Afficher les composants suivis" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "Afficher les composants suivis sur l'écran d'accueil" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "Afficher les catégories suivies" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "Afficher les catégories de pièces suivies sur la page d'accueil" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Afficher les derniers composants sur la page d'accueil" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "Nombre de composants récents" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "Nombre de pièces récentes à afficher sur la page d'index" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "Afficher les listes de matériaux non validées" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "Afficher les listes de matériaux en attente de validation sur la page d'accueil" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Afficher les articles de stock récemment modifiés sur la page d'accueil" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "Compte de stock récent" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "Nombre d'éléments de stock récents à afficher sur la page d'index" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Afficher le stock faible" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Afficher les articles en stock bas sur la page d'accueil" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Afficher le stock épuisé" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Afficher les stocks épuisés sur la page d'accueil" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Afficher le stock nécessaire" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Afficher les pièces en stock nécessaires pour les assemblages sur la page d'accueil" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Afficher le stock expiré" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Afficher les pièces en stock expirées sur la page d'accueil" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "Afficher le stock périmé" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" -msgstr "" +msgstr "Afficher les articles de stock périmés sur la page d'accueil" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" -msgstr "" +msgstr "Afficher les constructions en attente" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" -msgstr "" +msgstr "Afficher les constructions en attente sur la page d'accueil" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" -msgstr "" +msgstr "Afficher les constructions en retard" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" -msgstr "" +msgstr "Afficher les constructions en retard sur la page d'accueil" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" -msgstr "" +msgstr "Afficher les commandes en suspens" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" -msgstr "" +msgstr "Afficher les commandes en suspens sur la page d'accueil" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" -msgstr "" +msgstr "Afficher les commandes en retard" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" -msgstr "" +msgstr "Afficher les commandes en retard sur la page d'accueil" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" -msgstr "" +msgstr "Afficher les envois en suspens" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" -msgstr "" +msgstr "Afficher les envois en suspens sur la page d'accueil" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" -msgstr "" +msgstr "Afficher les envois en retard" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" -msgstr "" +msgstr "Afficher les envois en retard sur la page d'accueil" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" -msgstr "" +msgstr "Afficher les nouvelles" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" -msgstr "" +msgstr "Afficher les nouvelles sur la page d'accueil" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" -msgstr "" +msgstr "Affichage du libellé en ligne" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "Afficher les étiquettes PDF dans le navigateur, au lieu de les télécharger en tant que fichier" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "Imprimante d'étiquettes par défaut" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "Configurer quelle imprimante d'étiquette doit être sélectionnée par défaut" + +#: common/models.py:1857 msgid "Inline report display" -msgstr "" +msgstr "Affichage du rapport en ligne" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "Afficher les rapports PDF dans le navigateur, au lieu de les télécharger en tant que fichier" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" -msgstr "" +msgstr "Rechercher de pièces" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" +msgstr "Afficher les pièces dans la fenêtre d'aperçu de la recherche" + +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" -msgstr "" - -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" -msgstr "" +msgstr "Afficher les pièces du fournisseur dans la fenêtre de prévisualisation de la recherche" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "Rechercher les pièces du fabricant" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" -msgstr "" +msgstr "Afficher les pièces du fabricant dans la fenêtre de prévisualisation de recherche" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" -msgstr "" +msgstr "Masquer les pièces inactives" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" -msgstr "" +msgstr "Exclure les pièces inactives de la fenêtre de prévisualisation de recherche" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" -msgstr "" +msgstr "Rechercher des catégories" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" -msgstr "" +msgstr "Afficher les catégories de pièces dans la fenêtre de prévisualisation de recherche" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "Rechercher dans le stock" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "Afficher les pièces en stock dans la fenêtre d'aperçu de la recherche" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "Cacher les pièces indisponibles" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" -msgstr "" +msgstr "Exclure les articles en stock qui ne sont pas disponibles de la fenêtre de prévisualisation de recherche" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" -msgstr "" +msgstr "Chercher des Emplacements" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" -msgstr "" +msgstr "Afficher les emplacements dans la fenêtre d'aperçu de la recherche" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" -msgstr "" +msgstr "Rechercher les entreprises" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" -msgstr "" +msgstr "Afficher les entreprises dans la fenêtre de prévisualisation de recherche" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" -msgstr "" +msgstr "Rechercher les commandes de construction" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" -msgstr "" +msgstr "Afficher les commandes de construction dans la fenêtre de prévisualisation de recherche" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" -msgstr "" +msgstr "Rechercher des bons de commande" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" -msgstr "" +msgstr "Afficher les bons de commande dans la fenêtre de prévisualisation de recherche" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" -msgstr "" +msgstr "Exclure les bons de commande inactifs" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" -msgstr "" +msgstr "Exclure les commandes d’achat inactives de la fenêtre de prévisualisation de recherche" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" -msgstr "" +msgstr "Rechercher les bons de commande" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" -msgstr "" +msgstr "Afficher les bons de commande dans la fenêtre de prévisualisation de la recherche" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" -msgstr "" +msgstr "Exclure les bons de commande inactives" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" -msgstr "" +msgstr "Exclure les bons de commande inactifs de la fenêtre de prévisualisation de recherche" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "Barre de navigation fixe" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "La position de la barre de navigation est fixée en haut de l'écran" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "Format de date" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "Format préféré pour l'affichage des dates" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "Résultats de l'aperçu de la recherche" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "Nombre de résultats à afficher dans chaque section de la fenêtre de prévisualisation de recherche" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "Recherche Regex" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "Afficher la quantité dans les formulaires" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "Afficher la quantité disponible dans certains formulaires" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "La touche Echap ferme les formulaires" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "Utilisez la touche Echap pour fermer les formulaires modaux" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "Barre de navigation fixe" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "La position de la barre de navigation est fixée en haut de l'écran" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "Format de date" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "Format préféré pour l'affichage des dates" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "Planification des pièces" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "Afficher les informations de planification des pièces" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "Inventaire des pièces" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "Longueur de la chaîne dans les Tableau" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "Limite de longueur maximale pour les chaînes affichées dans les vues de la table" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Prix" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Actif" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" -msgstr "" +msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "Jeton" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" -msgstr "" +msgstr "Jeton d'accès" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "ID message" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "Hôte" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "Entête" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "Corps" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" -msgstr "" +msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" -msgstr "" +msgstr "Id" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" -msgstr "" +msgstr "Titre" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" -msgstr "" +msgstr "Publié" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "Auteur" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" -msgstr "" +msgstr "Résumé" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" -msgstr "" +msgstr "Lu" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" -msgstr "" +msgstr "Cette nouvelle a-t-elle été lue ?" #: common/notifications.py:294 #, python-brace-format @@ -3000,7 +3265,7 @@ msgstr "Nouveau {verbose_name}" msgid "A new order has been created and assigned to you" msgstr "Une nouvelle commande a été créée et vous a été assignée" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "Articles reçus" @@ -3008,24 +3273,28 @@ msgstr "Articles reçus" msgid "Items have been received against a purchase order" msgstr "Des articles d'un bon de commande ont été reçus" -#: common/notifications.py:416 -msgid "Error raised by plugin" +#: common/notifications.py:311 +msgid "Items have been received against a return order" msgstr "" +#: common/notifications.py:423 +msgid "Error raised by plugin" +msgstr "Erreur déclenchée par le plugin" + #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Téléverser un fichier" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "" +msgstr "Champs Correspondants" #: common/views.py:87 msgid "Match Items" @@ -3033,7 +3302,7 @@ msgstr "Articles correspondants" #: common/views.py:420 msgid "Fields matching failed" -msgstr "" +msgstr "Les champs correspondants ont échoué" #: common/views.py:481 msgid "Parts imported" @@ -3060,7 +3329,7 @@ msgstr "Description de la société" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Site web" @@ -3074,18 +3343,19 @@ msgstr "Adresse" #: company/models.py:116 msgid "Company address" -msgstr "" +msgstr "Adresse de l'entreprise" #: company/models.py:119 msgid "Phone number" -msgstr "" +msgstr "Numéro de téléphone" #: company/models.py:120 msgid "Contact phone number" -msgstr "" +msgstr "Numéro de téléphone de contact" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "E-mail" @@ -3094,8 +3364,11 @@ msgid "Contact email address" msgstr "Adresse e-mail de contact" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "" +msgstr "Contact" #: company/models.py:127 msgid "Point of contact" @@ -3105,13 +3378,13 @@ msgstr "Point de contact" msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" -msgstr "" +msgstr "Image" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" -msgstr "" +msgstr "Notes de l'entreprise" #: company/models.py:145 msgid "is customer" @@ -3137,242 +3410,243 @@ msgstr "est fabricant" msgid "Does this company manufacture parts?" msgstr "Cette entreprise fabrique-t-elle des pièces?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Devise" - #: company/models.py:156 msgid "Default currency used for this company" -msgstr "" +msgstr "Devise par défaut utilisée pour cette entreprise" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Fabricant" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Sélectionner un fabricant" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Valeur" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Unités" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Fournisseur" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "Lien de la pièce du fournisseur externe" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "Description de la pièce du fournisseur" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Note" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "coût de base" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "Frais minimums (par exemple frais de stock)" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Conditionnement" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "Conditionnement de l'article" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "Nombre de paquet" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "Nombre d'unités fournies dans un seul paquet" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "plusieurs" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "Commande multiple" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Disponible" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "Quantité disponible auprès du fournisseur" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Code Devise" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Société" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Fabricant" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Sélectionner un fabricant" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Pièces du fabricant" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Nom du paramètre" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Valeur" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Valeur du paramètre" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Unités" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Unités du paramètre" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "La pièce du fabricant liée doit faire référence à la même pièce de base" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Fournisseur" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Sélectionner un fournisseur" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "SKU" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "Unité de gestion des stocks des fournisseurs" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "Sélectionner un fabricant" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "Lien de la pièce du fournisseur externe" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "Description de la pièce du fournisseur" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Note" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "coût de base" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "Frais minimums (par exemple frais de stock)" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Conditionnement" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "Conditionnement de l'article" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "Nombre de paquet" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "Nombre d'unités fournies dans un seul paquet" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "plusieurs" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "Commande multiple" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Disponible" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "Quantité disponible auprès du fournisseur" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "Disponibilité mise à jour" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "Date de dernière mise à jour des données de disponibilité" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Devise par défaut utilisée pour ce fournisseur" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Créer une commande d'achat" #: company/templates/company/company_base.html:28 msgid "Company actions" -msgstr "" +msgstr "Actions de l'entreprise" #: company/templates/company/company_base.html:33 msgid "Edit company information" msgstr "Éditer les informations sur la société" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Editer la société" @@ -3398,16 +3672,19 @@ msgstr "Télécharger l'image depuis l'URL" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "" +msgstr "Supprimer image" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Client" @@ -3420,132 +3697,162 @@ msgid "Phone" msgstr "Téléphone" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" -msgstr "" +msgstr "Supprimer l'image" #: company/templates/company/company_base.html:207 msgid "Remove associated image from this company" -msgstr "" +msgstr "Supprimer l'image associée de cette entreprise" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" -msgstr "" +msgstr "Supprimer" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Charger une image" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Télécharger une image" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Pièce fournisseur" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Créer une nouvelle pièce fournisseur" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Nouvelle pièce fournisseur" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Commander des composants" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Supprimer la pièce" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Supprimer les pièces" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Pièces du fabricant" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Créer une nouvelle pièce de fabricant" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Nouvelle pièce de fabricant" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Stock fournisseur" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Commandes d'achat" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Créer une commande d'achat" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Nouvelle commande achat" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Ventes" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Créer un nouvel ordre de vente" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Nouvelle commande de vente" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "Stock affecté" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Liste des Fournisseurs" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Fabricants" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Article de la commande" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Modifier la pièce du fabricant" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Supprimer la pièce de fabricant" @@ -3582,36 +3889,36 @@ msgstr "Aucune information sur le fabricant disponible" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Fournisseurs" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Supprimer les pièces du fournisseur" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Supprimer" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paramètres" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Nouveau paramètre" @@ -3619,8 +3926,8 @@ msgstr "Nouveau paramètre" msgid "Delete parameters" msgstr "Supprimer les paramètres" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Ajouter un paramètre" @@ -3636,172 +3943,121 @@ msgstr "Pièce fournisseur" msgid "Supplied Stock Items" msgstr "Articles en stock fournis" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "Articles en stock assignés" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Pièce fournisseur" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Actions de code-barres" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "Afficher le QR Code" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "Délier le code-barre" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" -msgstr "" +msgstr "Actions de la pièce du fournisseur" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Commander un composant" #: company/templates/company/supplier_part.html:61 #: company/templates/company/supplier_part.html:62 msgid "Update Availability" -msgstr "" +msgstr "Disponibilité de la mise à jour" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" -msgstr "" +msgstr "Modifier la pièce du fournisseur" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" -msgstr "" +msgstr "Dupliquer la pièce du fournisseur" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "" +msgstr "Supprimer la pièce du fournisseur" #: company/templates/company/supplier_part.html:75 msgid "Delete Supplier Part" -msgstr "" +msgstr "Supprimer la pièce du fournisseur" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" -msgstr "" +msgstr "Aucune information de fournisseur disponible" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" -msgstr "" +msgstr "Stock de pièces du fournisseur" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" -msgstr "" +msgstr "Créer un nouvel article de stock" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" -msgstr "" +msgstr "Nouvel article de stock" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" -msgstr "" +msgstr "Commandes de pièces du fournisseur" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Information sur les prix" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" +msgstr "Ajouter un prix de rupture" + +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" -msgstr "" +msgstr "Lier le code-barres à la pièce du fournisseur" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" -msgstr "" +msgstr "Mettre à jour la disponibilité des pièces" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Commandes" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Tarif" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Éléments en stock" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Prix de la pièce du fournisseur" + #: company/views.py:33 msgid "New Supplier" msgstr "Nouveau Fournisseur" @@ -3819,7 +4075,7 @@ msgstr "Clients" msgid "New Customer" msgstr "Nouveaux Clients" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Entreprises" @@ -3827,519 +4083,604 @@ msgstr "Entreprises" msgid "New Company" msgstr "Nouvelle Entreprise" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" -msgstr "" +msgstr "Nom de l'étiquette" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" -msgstr "" - -#: label/models.py:116 -msgid "Label" -msgstr "" +msgstr "Description de l’étiquette" #: label/models.py:117 -msgid "Label template file" -msgstr "" +msgid "Label" +msgstr "Étiquette" -#: label/models.py:123 report/models.py:254 +#: label/models.py:118 +msgid "Label template file" +msgstr "Fichier de modèle d'étiquette" + +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Activé" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" -msgstr "" - -#: label/models.py:129 -msgid "Width [mm]" -msgstr "" +msgstr "Le modèle d'étiquette est activé" #: label/models.py:130 -msgid "Label width, specified in mm" -msgstr "" +msgid "Width [mm]" +msgstr "Largeur [mm]" -#: label/models.py:136 +#: label/models.py:131 +msgid "Label width, specified in mm" +msgstr "Largeur de l'étiquette, spécifiée en mm" + +#: label/models.py:137 msgid "Height [mm]" msgstr "Hauteur [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" -msgstr "" +msgstr "Hauteur de l'étiquette, spécifiée en mm" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" -msgstr "" +msgstr "Modèle de nom de fichier" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" -msgstr "" +msgstr "Modèle pour la génération des noms de fichiers d'étiquette" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," -msgstr "" +msgstr "Filtres de requête (liste de paires clé=valeur séparées par des virgules)," -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filtres" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" -msgstr "" +msgstr "Filtres de requête (liste de paires clé=valeur séparées par des virgules" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" -msgstr "" +msgstr "Filtres de requêtes de pièces (valeurs de paires clé=valeur séparées par des virgules)" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" -msgstr "" +msgstr "Aucun bon de commande correspondant n'a été trouvé" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" +msgstr "Inconnu" + +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:83 -msgid "Order description" -msgstr "Description de la commande" +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:93 -msgid "Created By" -msgstr "Créé par" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "Notes de commande" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "reçu par" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "Date d'émission" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "Date d'émission de la commande" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Date de livraison cible" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Date prévue pour la livraison de la commande. La commande sera en retard après cette date." -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Créé par" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "Utilisateur ou groupe responsable de cette commande" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Notes de commande" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Référence de la commande" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Statut de la commande d'achat" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Société de laquelle les articles sont commandés" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "Référence du fournisseur" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "Code de référence de la commande fournisseur" + +#: order/models.py:366 +msgid "received by" +msgstr "reçu par" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Date d'émission" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Date d'émission de la commande" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" -msgstr "" +msgstr "La quantité doit être un nombre positif" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" -msgstr "" +msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "expédié par" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "La commande ne peut pas être terminée car aucune pièce n'a été assignée" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "Seule une commande en attente peut être marquée comme terminée" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "La commande ne peut pas être terminée car il y a des envois incomplets" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "Contexte" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" -msgstr "" +msgstr "Prix unitaire" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" -msgstr "" +msgstr "supprimé" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "Commande" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "Reçu" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" -msgstr "" +msgstr "Prix d'achat unitaire" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" -msgstr "" +msgstr "Où l'Acheteur veut-il stocker cet article ?" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" -msgstr "" +msgstr "La pièce virtuelle ne peut pas être affectée à une commande" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "Seules les pièces vendues peuvent être attribuées à une commande" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" -msgstr "" +msgstr "Prix de vente unitaire" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" -msgstr "" +msgstr "Quantité expédiée" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" -msgstr "" +msgstr "Date d'expédition" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" -msgstr "" +msgstr "Vérifié par" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" -msgstr "" +msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "Envoi" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" -msgstr "" +msgstr "Numéro d'expédition" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" -msgstr "" +msgstr "Notes d'expédition" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" -msgstr "" +msgstr "N° de suivi" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" -msgstr "" +msgstr "Information de suivi des colis" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" -msgstr "" - -#: order/models.py:1277 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1295 -msgid "Shipment has already been sent" -msgstr "" - -#: order/models.py:1298 -msgid "Shipment has no allocated stock items" -msgstr "" - -#: order/models.py:1401 order/models.py:1403 -msgid "Stock item has not been assigned" -msgstr "" +msgstr "N° de facture" #: order/models.py:1407 +msgid "Reference number for associated invoice" +msgstr "Numéro de référence de la facture associée" + +#: order/models.py:1425 +msgid "Shipment has already been sent" +msgstr "Le colis a déjà été envoyé" + +#: order/models.py:1428 +msgid "Shipment has no allocated stock items" +msgstr "L'expédition n'a pas d'articles en stock alloués" + +#: order/models.py:1535 order/models.py:1537 +msgid "Stock item has not been assigned" +msgstr "L'article de stock n'a pas été assigné" + +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "Ligne" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "Article" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" -msgstr "Devise *" +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "Entrez les numéros de série pour les articles de stock entrants" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "Champ d'identifiant unique" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "Code-barres" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "Une quantité entière doit être fournie pour les pièces tracables" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "Aucune correspondance trouvée pour les numéros de série suivants" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "Les numéros de série suivants sont déjà alloués" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Modifier la commande" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Annuler la commande" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "Recevoir objet" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "Réception d'articles" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Marquer la commande comme complète" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "Finaliser la commande" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "Référence de commande" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "Description de la commande" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Statut de la commande" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incomplet" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "Dupliquer la sélection" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Supprimer la ligne" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "Articles de la commande d'achat" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "Notes de commande" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "Expéditions en attente" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "Prix introuvable" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "ID de composant" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Révision" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "En Commande" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Composantes" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Catégorie de composant" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "L'IPN doit correspondre au modèle de regex {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" -msgstr "Description du composant" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Catégorie" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "Date" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "Requis" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "Données" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "Valeur par Défaut" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Surplus" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "Validée" + +#: part/models.py:3615 +msgid "This BOM item has been validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "Supprimer l'élément" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Modifier la catégorie" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Modifier la catégorie" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Supprimer la catégorie" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Supprimer la catégorie" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Composantes (incluant sous-catégories)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Nouvelle catégorie" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Actualiser" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "Prise d'inventaire" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "Fabricants de composants" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "Sélectionner un format de fichier" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Impression étiquette" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "Dernier numéro de série" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "Rechercher un numéro de série" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "Calculer" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Stock" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Tarif" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "Tester le modèle" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "Base de données inconnue" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "{title} v{version}" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "Contributeurs d'InvenTree" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" -msgstr "L'extension `{plg_name}` n'est pas compatible avec la version actuelle d'InvenTree {version.inventreeVersion()} !" - -#: plugin/registry.py:446 +#: plugin/registry.py:452 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "Aucun objet valide n'a été fourni au modèle" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "Nom du modèle" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "Filtres de composants" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "Extrait " -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "Elément" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "Requis pour" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Numéro de série" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Numéro de série" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "Résultat" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "Numéro de série" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "Propriétaire" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "Sélectionner un propriétaire" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "La quantité doit être de 1 pour un article avec un numéro de série" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "Le numéro de série ne peut pas être défini si la quantité est supérieure à 1" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "Propriétaire" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "Sélectionner un propriétaire" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "La quantité doit être de 1 pour un article avec un numéro de série" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "Le numéro de série ne peut pas être défini si la quantité est supérieure à 1" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "Les numéros de série doivent être une liste de nombres entiers" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "Les numéros de série existent déja : {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "Les numéros de série existent déjà" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "Les numéros de série ne peuvent pas être assignés à cette pièce" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Les numéros de série existent déjà" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "Cet article de stock est sérialisé - il a un numéro de série unique et la quantité ne peut pas être ajustée." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "page précédente" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "Accéder au numéro de série précédent" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "Accéder au numéro de série suivant" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "Code QR de l'article en stock" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "Lier le code-barres à l'article de stock" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "Sélectionner la quantité à sérialiser et les numéros de série uniques." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Autorisation refusée" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "Vous avez été déconnecté•e d'InvenTree." -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "Se connecter" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "Supprimer les notifications" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "Notifications en attente" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "Paramètres des Étiquettes" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "Paramètres de Connexion" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "Paramètres" @@ -7741,8 +8359,9 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "Paramètres de Notification" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "Paramètres de notification" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "Paramètres des Extensions" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "Extensions" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "Paramètres des Rapports" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "Aucune valeur définie" @@ -7926,71 +8557,71 @@ msgstr "Aucune valeur définie" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,43 +8631,42 @@ msgid "User Settings" msgstr "Paramètres Utilisateur" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Paramètres du Compte" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Paramètres d'Affichage" +msgid "Display" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Paramètres de Recherche" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Rechercher" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "Rapports" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Paramètres Globaux" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "Serveur" + +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "Catégories" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Paramètres du Compte" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "Changer le mot de passe" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "Modifier" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Paramètres d'Affichage" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Paramètres de Thème" @@ -8271,9 +8909,9 @@ msgstr "Projet collaboratif de Traduction d'InvenTree" msgid "Home Page Settings" msgstr "Paramètres de la Page d'Accueil" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "Paramètres de notification" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Paramètres de Recherche" #: templates/about.html:9 msgid "InvenTree Version" @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Confirmer" @@ -8509,11 +9147,11 @@ msgstr "Entrer un token généré par l'application :" msgid "Verify" msgstr "Vérifier" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "Ajouter un lien" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "Ajouter une pièce jointe" @@ -8521,32 +9159,33 @@ msgstr "Ajouter une pièce jointe" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "Identifiant du code-barres" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "Redémarrage du serveur nécessaire" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "Une option de configuration a été modifiée, ce qui nécessite un redémarrage du serveur" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "Contactez votre administrateur système pour plus d'informations" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "Quantité requise" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "Aucune réponse" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "Aucune réponse du serveur InvenTree" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "Erreur 400: Mauvaise requête" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "La requête de l'API a retourné le code d'erreur 400" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "Erreur 401: non authentifié" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "Informations d’authentification non fournies" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "Erreur 403: Permission refusée" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "Vous n'avez pas les autorisations requises pour accéder à cette fonction" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "Erreur 404: Ressource introuvable" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "La ressource demandée n'a pas pu être trouvée sur le serveur" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "Erreur 405: Méthode non autorisée" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "Méthode HTTP non autorisée à l'adresse URL" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "Erreur 408: Délai dépassé" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "Délai de connexion dépassé lors de la demande de données depuis le serveur" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "Code d'erreur non géré" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "Code d’erreur" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "Aucune pièce jointe trouvée" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "Modifier la pièce jointe" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "Date d'upload" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "Modifier la pièce jointe" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "Supprimer la pièce jointe" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "Saisir les données du code-barres" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "Code-barres" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "Saisir les notes optionnelles pour le transfert de stock" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "Saisir des notes" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "Erreur serveur" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "Réponse inconnue du serveur" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "Réponse du serveur invalide" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Scanner le code-barres" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "Aucune URL dans la réponse" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "Délier" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "Supprimer l'article de stock" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "Article de stock déjà scanné" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "Article de stock déjà à cet emplacement" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "Article de stock ajouté" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "Vérifier dans l'emplacement" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "Le code-barres ne correspond pas à un emplacement valide" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "Données de la rangée" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "Prochain numéro de série disponible" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "Dernier numéro de série" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "Commander des stocks" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "Pas d'informations sur l'utilisateur" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "Composantes fournies" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "Composantes fabriquées" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "Sélectionner imprimante" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Annuler" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "ID de commande" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Référence de commande" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Commandé" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "Commande en retard" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "Livré au client" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "Allouer des numéros de série" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Acheter du stock" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Calculer le prix" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "Allouer des numéros de série" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "Options de duplication de pièces" msgid "Add Part Category" msgstr "Ajouter une catégorie de pièce" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "Composant créé avec succès" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "Modifier la pièce" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "Pièce modifiée" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "Créer une variante de pièce" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "Stock bas" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "Pièce traçable" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "Pièce virtuelle" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "Pièce vendable" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Aucune variante trouvée" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "Aucune pièce trouvée" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Aucune catégorie" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Afficher sous forme de liste" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Afficher sous forme de grille" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Afficher sous forme d'arborescence" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "Modifier le résultat du test" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "Supprimer le résultat du test" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "Le plugin a été installé" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "Référence de commande" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "Commande en retard" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "éléments sélectionnés" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "Sélectionner un template de reporting" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "Livré au client" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "Allouer des numéros de série" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "Acheter du stock" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "Calculer le prix" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "Allouer des numéros de série" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Entrez les numéros de série pour le nouveau stock (ou laisser vide)" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "Trouver un numéro de série" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "Entrer le numéro de série" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "Entrer un numéro de série" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "Aucun numéro de série correspondant" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "Plus d'un résultat correspondant trouvé" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "Confirmer l'assignation de stock" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "Assigner le stock au client" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "Attention : l'opération de fusion est irréversible" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "Certaines informations seront perdues lors de la fusion des articles en stock" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "L'historique des transactions de stock sera supprimé pour les éléments fusionnés" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "Les informations sur la pièce du fournisseur seront supprimées pour les éléments fusionnés" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "Confirmer la fusion de l'article en stock" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "Fusionner les articles en stock" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "Transférer le stock" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "Transférer" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "Compter le stock" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "Compter" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "Supprimer du stock" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "Supprimer" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "Ajouter du stock" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "Ajouter" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "Supprimer le stock" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "La quantité ne peut pas être ajustée pour un stock sérialisé" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "Spécifiez la quantité du stock" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "Vous devez sélectionner au moins un article en stock disponible" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "RÉUSSI" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "ÉCHEC" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "AUCUN RÉSULTAT" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "Ajouter un résultat de test" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "Aucun résultat de test trouvé" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "Date du test" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "En production" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "Article en stock installé dans un autre article en stock" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "Assigné à une commande de vente" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "Aucun emplacement de stock défini" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "L'article de stock est en production" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "L'article en stock a été assigné à une commande de vente" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "L'article en stock a été assigné à un client" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "L'article de stock sérialisé a été alloué" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "L'article de stock a été complètement alloué" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "L'article de stock a été partiellement alloué" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "L'article en stock a été installé dans un autre article" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "L'article en stock a expiré" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "L'article en stock va bientôt expirer" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "L'article de stock a été rejeté" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "L'article de stock est perdu" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "L'article de stock est détruit" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "Epuisé" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "Pièce de fournisseur non précisée" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "Aucun article de stock ne correspond à la requête" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "Définir l'état du stock" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "Sélectionner le code de statut" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "Le code de statut doit être sélectionné" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "Détails" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "L'emplacement n'existe plus" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "La commande d'achat n'existe plus" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "Le client n'existe plus" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "L'article de stock n'existe plus" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "Ajouté" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "Supprimé" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "Pièce traçable" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "Validée" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "Inclure les sous-emplacements" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "Inclure les emplacements" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "Inclure les sous-catégories" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "A un numéro de série" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "Numéro de série PGE" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "Numéro de série supérieur ou égal à" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "Numéro de série PPE" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "Numéro de série inférieur ou égal à" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "Numéro de série" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Code de lot" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "Pièces actives" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "Afficher le stock pour les pièces actives" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "La pièce est un assemblage" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "Est alloué" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "L'élément a été alloué" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "Le stock est disponible pour utilisation" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "Afficher les articles de stock qui sont installés dans un autre article" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "Afficher les articles qui ont été assignés à un client" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "État du stock" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "A un prix d'achat" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "Afficher les articles de stock qui ont un prix d'achat défini" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "Afficher les articles de stock qui ont expiré" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "Afficher le stock qui est proche de l'expiration" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "État de la construction" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "Assigné à moi" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "État de la commande" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "En suspens" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "Assigné à moi" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "Pièce traçable" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "Inclure les sous-emplacements" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "Inclure les emplacements" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "Inclure les sous-catégories" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "A un numéro de série" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "Numéro de série PGE" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "Numéro de série supérieur ou égal à" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "Numéro de série PPE" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "Numéro de série inférieur ou égal à" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "Numéro de série" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "Code de lot" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "Pièces actives" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "Afficher le stock pour les pièces actives" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "La pièce est un assemblage" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "Est alloué" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "L'élément a été alloué" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "Le stock est disponible pour utilisation" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "Afficher les articles de stock qui sont installés dans un autre article" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "Afficher les articles qui ont été assignés à un client" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "État du stock" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "A un prix d'achat" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "Afficher les articles de stock qui ont un prix d'achat défini" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "Afficher les articles de stock qui ont expiré" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "Afficher le stock qui est proche de l'expiration" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "État de la construction" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "Inclure les pièces des sous-catégories" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "Afficher les pièces actives" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "A un IPN" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "La pièce a un numéro de pièce interne" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "Achetable" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Affichage du calendrier" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Affichage en liste" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "Chargement des données" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "résultats par page" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "Afficher toutes les lignes" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Afficher" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "à" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "de" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "lignes" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Rechercher" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Aucun résultat correspondant n'a été trouvé" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "Masquer/Afficher la pagination" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Colonnes" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "Tout" @@ -11261,19 +11975,19 @@ msgstr "Acheter" msgid "Sell" msgstr "Ventes" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Se déconnecter" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Données QR non fournies" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "Échec de connexion au réseau social" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "Serveur" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Imprimer un rapport de test" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "Fusionner les éléments de stock sélectionnés" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "Fusionner le stock" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Commander les éléments sélectionnés" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "Changer l'état du stock" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "Changer l'état du stock" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "Supprimer les éléments sélectionnés" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "Utilisateurs" msgid "Select which users are assigned to this group" msgstr "Sélectionner quels utilisateurs sont assignés à ce groupe" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "Les utilisateurs suivants sont membres de plusieurs groupes:" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "Informations personnelles" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Droits" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "Dates importantes" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Droit défini" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Groupe" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Vue" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Droit de voir des éléments" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Droit d'ajouter des éléments" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Modifier" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Droit de modifier des élément" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Droit de supprimer des éléments" diff --git a/InvenTree/locale/he/LC_MESSAGES/django.po b/InvenTree/locale/he/LC_MESSAGES/django.po index 4d1e435670..5e4a6a68d8 100644 --- a/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -29,23 +33,26 @@ msgstr "" msgid "Enter date" msgstr "הזן תאריך סיום" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "" @@ -58,23 +65,23 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "הכנס סיסמה" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "הכנס סיסמה חדשה" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "אישור סיסמה" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "אשר סיסמה חדשה" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "קובץ חסר" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "קובץ מצורף" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "בחר קובץ לצירוף" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "קישור" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "קישור חיצוני" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "הערה" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "הערת קובץ" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "משתמש" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "תאריך העלאה" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "חובה למלא שם קובץ" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "תיקיית קובץ שגויה" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "שם הקובץ מכיל תו '{c}' שאינו חוקי" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "שגיאה בשינוי שם פריט" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "שם" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "תיאור" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "מקור" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "שם קובץ" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "גרמנית" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "יוונית" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "אנגלית" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "ספרדית" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "ספרדית (מקסיקנית)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "צרפתית" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "עברית" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "איטלקית" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "יפנית" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "קוריאנית" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "הולנדית" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "נורווגית" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "פולנית" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "רוסית" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "שוודית" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "תאילנדית" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "טורקית" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "ווייטנאמית" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "סינית" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "בהמתנה" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "מוקם" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "הושלם" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "מבוטל" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "אבד" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "הוחזר" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "נשלח" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "מצב טוב" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "דרושה תשומת לב" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "פגום" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "הרוס" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "נדחה" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "מיקום שונה" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "נשלח ללקוח" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "הוחזר מלקוח" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "ייצור" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "ערוך מידע אודות המשתמש" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "הגדר סיסמא" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "הסיסמאות מוכרחות להיות תואמות" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "מידע אודות המערכת" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "מקט" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "תיאור קצר אודות הבנייה" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "מקור הבנייה" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "רכיב" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "כמות" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "אשר" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/hu/LC_MESSAGES/django.po b/InvenTree/locale/hu/LC_MESSAGES/django.po index efb072e7e6..8f5e7276d9 100644 --- a/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-07 09:21\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Nincs jogosultságod az adatok megtekintéséhez" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "A hiba részleteit megtalálod az admin panelen" @@ -29,23 +33,26 @@ msgstr "A hiba részleteit megtalálod az admin panelen" msgid "Enter date" msgstr "Dátum megadása" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Megjegyzések" @@ -58,23 +65,23 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti" msgid "Provided value does not match required pattern: " msgstr "A megadott érték nem felel meg a szükséges mintának: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Jelszó megadása" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Új jelszó megadása" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Jelszó megerősítése" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Új jelszó megerősítése" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Régi jelszó" @@ -98,95 +105,95 @@ msgstr "A megadott elsődleges email cím nem valós." msgid "The provided email domain is not approved." msgstr "A megadott email domain nincs jóváhagyva." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Duplikált sorozatszám" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Érvénytelen csoport tartomány: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Több lett megadva {g} mint amennyi szükséges lenne ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Érvénytelen csoport szekvencia: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "A megadott számú egyedi sorozatszám ({s}) meg kell egyezzen a darabszámmal ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Helytelenül formázott minta" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Ismeretlen formátum kulcs lett megadva" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Hiányzó formátum kulcs" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Az azonosító mező nem lehet üres" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Az azonosítónak egyeznie kell a mintával" @@ -194,566 +201,615 @@ msgstr "Az azonosítónak egyeznie kell a mintával" msgid "Reference number is too large" msgstr "Azonosító szám túl nagy" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Hiányzó fájl" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Hiányzó külső link" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Melléklet" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Válaszd ki a mellekelni kívánt fájlt" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link külső URL-re" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Megjegyzés" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Leírás, bővebb infó" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Felhasználó" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "feltöltés dátuma" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "A fájlnév nem lehet üres" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Érvénytelen melléklet mappa" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Fájlnévben érvénytelen karakter van '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Fájlnév kiterjesztése hiányzik" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Ilyen fájlnévvel már létezik melléklet" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Hiba a fájl átnevezésekor" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Név" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Leírás" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "szülő" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Elérési út" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Vonalkód adat" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Harmadik féltől származó vonalkód adat" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Vonalkód hash" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Egyedi vonalkód hash" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Pénznem" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Válassz pénznemet a lehetőségek közül" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Fájlnév" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Adat fájl" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Fájl kiválasztása feltöltéshez" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Nem támogatott fájltípus" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Fájl túl nagy" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Nem találhatók oszlopok a fájlban" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Nincsenek adatsorok a fájlban" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Nincs adatsor megadva" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Nincs adat oszlop megadva" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Szükséges oszlop hiányzik: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplikált oszlop: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Cseh" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Dán" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Német" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Görög" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Angol" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spanyol (Mexikói)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Fárszi/Perzsa" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francia" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Héber" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Magyar" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Olasz" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japán" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreai" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Holland" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norvég" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Lengyel" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugál" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugál (Brazíliai)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Orosz" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Szlovén" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Svéd" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Tháj" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Török" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnámi" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Kínai" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Háttér folyamat ellenőrzés sikertelen" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Email backend nincs beállítva" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InvenTree rendszer állapotának ellenőrzése sikertelen" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Függőben" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Kiküldve" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Kész" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Törölve" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Elveszett" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Visszaküldve" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "Folyamatban" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Kiszállítva" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "Rendben" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Ellenőrizendő" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Sérült" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Megsemmisült" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Elutasított" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "Karanténban" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Örökölt készlet követési bejegyzés" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Készlet tétel létrehozva" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Szerkeszett készlet tétel" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Hozzárendelt sorozatszám" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Készlet leleltározva" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Készlet manuálisan hozzáadva" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Készlet manuálisan elvéve" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Hely megváltozott" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Gyártmányba beépült" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Gyártmányból eltávolítva" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Beépült összetevő tétel" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Eltávolított összetevő tétel" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Szülő tételből szétválasztva" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Szétválasztott gyermek tétel" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Összevont készlet tétel" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Alkatrészváltozattá alakítva" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" -msgstr "Vevőnek elküldve" +msgstr "Vevőnek kiszállítva" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Vevőtől visszaérkezett" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Gyártási utasítás kimenete elkészült" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Gyártási utasítás kimenete kész" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Gyártásra felhasználva" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "Vevői rendelésre kiszállítva" + +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" msgstr "Megrendelésre érkezett" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "Visszavéve" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Folyamatban" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "Visszavétel" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "Javítás" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "Visszatérítés" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "Csere" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "Elutasított" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN mezőnek egyeznie kell a '{pat}' mintával" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Túlszállítás nem lehet negatív" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Túlszállítás nem lehet több mint 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Érvénytelen érték a túlszállításra" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Felhasználói információ módosítása" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Jelszó beállítása" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "A jelszavaknak egyeznie kell" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Rossz jelszó lett megadva" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Rendszerinformáció" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Verzió információk" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Hibás választás a szülő gyártásra" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,584 +818,625 @@ msgstr "Hibás választás a szülő gyártásra" msgid "Build Order" msgstr "Gyártási utasítás" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Hibás választás a szülő gyártásra" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Azonosító" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Gyártás rövid leírása" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Szülő gyártás" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Alkatrész" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Vevői rendelés amihez ez a gyártás hozzá van rendelve" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Válassz helyet ahonnan készletet vegyünk el ehhez a gyártáshoz (hagyd üresen ha bárhonnan)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Válassz helyet ahol a kész tételek tárolva lesznek" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Létrehozás dátuma" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cél dátum a gyártás befejezéséhez. Ez után késettnek számít majd." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Elkészítés dátuma" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "elkészítette" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Kiállította" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Felhasználó aki ezt a gyártási utasítást kiállította" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Felelős" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Felhasználó aki felelős ezért a gyártási utasításért" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Felhasználó vagy csoport aki felelős ezért a gyártásért" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Külső link" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" -msgstr "Extra gyártási megjegyzések" +msgstr "Egyéb gyártási megjegyzések" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "A {build} gyártási utasítás elkészült" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gyártási tételnek meg kell adnia a gyártási kimenetet, mivel a fő darab egyedi követésre kötelezett" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Kiválasztott készlet tétel nem található az alkatrészjegyzékben" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Gyártás" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Gyártás amihez készletet foglaljunk" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Gyártási kimenet nem egyezik a szülő gyártással" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Kimeneti alkatrész nem egyezik a gyártási utasításban lévő alkatrésszel" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Egész számú mennyiség szükséges, mivel az alkatrészjegyzék egyedi követésre kötelezett alkatrészeket tartalmaz" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Szükséges tételek automatikus hozzárendelése a megfelelő sorozatszámokkal" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Hely" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Állapot" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "Lefoglalt készlet levonása" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "Az összes lefoglalt tétel levonása a készletről" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "Hogyan kezeljük az gyártáshoz rendelt extra készletet" +msgstr "Hogyan kezeljük az gyártáshoz rendelt egyéb készletet" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Fogadd el hogy a készlet tételek nincsenek teljesen lefoglalva ehhez a gyártási utastáshoz" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Fogadd el hogy a szükséges számú gyártási kimenet nem lett elérve" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "A gyártási kimenetnek ugyanarra a gyártásra kell mutatnia" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási utasítás" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "Gyártási kimenetet meg kell adni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Gyártási kimenetet nem lehet megadni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Ez a készlet tétel már le lett foglalva ehhez a gyártási kimenethez" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Készlet hely ahonnan az alkatrészek származnak (hagyd üresen ha bárhonnan)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Készlet tételek kizárása erről a kiválasztott helyről" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "A különböző helyeken lévő készlet egyenrangúan felhasználható" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" @@ -1357,135 +1454,193 @@ msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Vonalkód műveletek" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "QR kód megjelenítése" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "Vonalkód leválasztása" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "Vonalkód hozzárendelése" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Nyomtatási műveletek" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Gyártási riport nyomtatása" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Gyártási műveletek" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Gyártás szerkesztése" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Gyártás törlése" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "Gyártás másolása" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Gyártás törlése" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Gyártás befejezése" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Gyártás leírása" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Ehhez a gyártási utasításhoz nem készült kimenet" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Hozzárendelve a %(link)s vevői rendeléshez" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Ez gyártási utasítás a %(link)s gyártási utasítás gyermeke" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "Gyártási utasítás elkészültnek jelölhető" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Befejezetlen gyártási kimenetek vannak" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "Szükséges gyártási mennyiség még nincs meg" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Még nincs lefoglalva a szükséges készlet" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Cél dátum" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Ez a gyártás %(target)s-n volt esedékes" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Késésben" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Kész" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Vevői rendelés" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Kiállította" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "Prioritás" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Gyártási utasítás törlése" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "Gyártási utasítás QR kódja" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "Vonalkód gyártáshoz rendelése" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Gyártás részletei" @@ -1498,8 +1653,8 @@ msgstr "Készlet forrás" msgid "Stock can be taken from any available location." msgstr "Készlet bármely rendelkezésre álló helyről felhasználható." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Cél" @@ -1511,21 +1666,23 @@ msgstr "A cél hely nincs megadva" msgid "Allocated Parts" msgstr "Lefoglalt alkatrészek" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Batch" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Létrehozva" @@ -1545,7 +1702,7 @@ msgstr "Alárendelt gyártások" msgid "Allocate Stock to Build" msgstr "Készlet foglalása gyártáshoz" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Készlet felszabadítása" @@ -1574,9 +1731,10 @@ msgid "Order required parts" msgstr "Szükséges alkatrészek rendelése" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Alkatrész rendelés" @@ -1628,52 +1786,42 @@ msgstr "Kiválasztott gyártási kimenetek törlése" msgid "Delete outputs" msgstr "Kimenetek törlése" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Nyomtatási műveletek" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Címke nyomtatása" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Befejezett gyártási kimenetek" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Mellékletek" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Gyártási megjegyzések" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "Lefoglalás kész" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "A szükséges készlet már mind le lett foglalva" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Új gyártási utasítás" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Gyártási utasítások nyomtatása" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "Gyártási utasítás részletei" @@ -1686,23 +1834,24 @@ msgstr "Befejezetlen kimenetek" msgid "Completed Outputs" msgstr "Befejezett kimenetek" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Nem támogatott fájl formátum: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Fájl beolvasási hiba (hibás encoding)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Fájl beolvasási hiba (hibás formátum)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Fájl beolvasási hiba (hibás dimenzió)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Fájl beolvasási hiba (sérült lehet)" @@ -1723,1272 +1872,1388 @@ msgstr "{name.title()} Fájl" msgid "Select {name} file to upload" msgstr "{name} fájl kiválasztása feltöltéshez" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "Frissítve" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "Legutóbbi frissítés időpontja" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Nincs csoport" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "Üres domain nem engedélyezett." -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Érvénytelen domain név: {domain}" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "Egy olyan beállítás megváltozott ami a kiszolgáló újraindítását igényli" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Példány név használata" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Cég neve" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Belső cégnév" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Kiindulási URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Képek és fájlok letöltésének engedélyezése külső URL-ről" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "A külső URL-ről letöltéshez használt user-agent felülbírálásának engedélyezése (hagyd üresen az alapértelmezéshez)" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "Megerősítés igénylése" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "Kérjen felhasználói megerősítést bizonyos műveletekhez" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "Fa mélység" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Alapértelmezett mélység a fa nézetekben. A mélyebb szintek betöltődnek ha szükségesek." -#: common/models.py:966 -msgid "Automatic Backup" -msgstr "Automatikus biztonsági mentés" +#: common/models.py:988 +msgid "Update Check Inverval" +msgstr "Frissítés keresés gyakorisága" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" -msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" +msgstr "Milyen gyakran ellenőrizze van-e új frissítés (0=soha)" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "Biztonsági mentések közti napok" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "Hány naponta készüljön automatikus biztonsági mentés" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "Régi feladatok törlése" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "Háttérfolyamat eredmények törlése megadott nap eltelte után" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "Hibanapló törlése" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "Értesítések törlése" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "Felhasználói értesítések törlése megadott nap eltelte után" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Vonalkód támogatás" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Vonalkód olvasó engedélyezése" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "Vonalkód beadási késleltetés" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "Webkamerás vonalkód olvasás" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "IPN reguláris kifejezés" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Többször is előforduló IPN engedélyezése" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Azonos IPN használható legyen több alkatrész esetén is" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "IPN szerkesztésének engedélyezése" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Alkatrészjegyzék adatok másolása" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Alkatrész paraméterek másolása" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Alkatrész teszt adatok másolása" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Kategória paraméter sablonok másolása" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Sablon" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Alkatrészek alapból sablon alkatrészek legyenek" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Gyártmány" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Összetevő" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Beszerezhető" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Alkatrészek alapból beszerezhetők legyenek" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Értékesíthető" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Alkatrészek alapból eladhatók legyenek" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Követésre kötelezett" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Alkatrészek alapból követésre kötelezettek legyenek" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtuális" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Alkatrészek alapból virtuálisak legyenek" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Importálás megjelenítése a nézetekben" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Import segéd megjelenítése néhány alkatrész nézetben" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Kapcsolódó alkatrészek megjelenítése" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "Kezdeti készlet adatok" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "Kezdeti beszállítói adatok" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "Kezdeti beszállítói adatok létrehozása új alkatrész felvételekor" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Alkatrész név megjelenítés formátuma" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Formátum az alkatrész név megjelenítéséhez" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "Alkatrész kategória alapértelmezett ikon" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "Áraknál használt tizedesjegyek száma" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "Tizedejegyek száma az árak megjelenítésekor" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "Beszállítói árazás használata" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Beszállítói ársávok megjelenítése az általános árkalkulációkban" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "Beszerzési előzmények felülbírálása" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "Beszerzési árelőzmények felülírják a beszállítói ársávokat" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "Készlet tétel ár használata" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "A kézzel bevitt készlet tétel árak használata az árszámításokhoz" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "Készlet tétel ár kora" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "Az ennyi napnál régebbi készlet tételek kizárása az árszámításból" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "Alkatrészváltozat árak használata" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "Csak az aktív változatokat" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "Ár újraszámítás ideje" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "Árak automatikus frissítése ennyi nap után" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "nap" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "Automatikus biztonsági mentés" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "Automata biztonsági mentés gyakorisága" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "Hány naponta készüljön automatikus biztonsági mentés" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "Feladat törlési gyakoriság" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "Háttérfolyamat eredmények törlése megadott nap eltelte után" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "Hibanapló törlési gyakoriság" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "Értesítés törlési gyakoriság" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "Felhasználói értesítések törlése megadott nap eltelte után" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Vonalkód támogatás" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Vonalkód olvasó engedélyezése" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "Vonalkód beadási késleltetés" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "Webkamerás vonalkód olvasás" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "Alkatrész változatok" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "Alkatrész változat vagy verziószám tulajdonság használata" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "IPN reguláris kifejezés" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Többször is előforduló IPN engedélyezése" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Azonos IPN használható legyen több alkatrészre is" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "IPN szerkesztésének engedélyezése" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Alkatrészjegyzék adatok másolása" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Alkatrész paraméterek másolása" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Alkatrész teszt adatok másolása" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Kategória paraméter sablonok másolása" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Sablon" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Alkatrészek alapból sablon alkatrészek legyenek" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Gyártmány" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Összetevő" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Beszerezhető" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Alkatrészek alapból beszerezhetők legyenek" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Értékesíthető" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Alkatrészek alapból eladhatók legyenek" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Követésre kötelezett" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Alkatrészek alapból követésre kötelezettek legyenek" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtuális" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Alkatrészek alapból virtuálisak legyenek" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Importálás megjelenítése a nézetekben" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Import segéd megjelenítése néhány alkatrész nézetben" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Kapcsolódó alkatrészek megjelenítése" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "Kezdeti készlet adatok" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "Kezdeti beszállítói adatok" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "Kezdeti beszállítói adatok létrehozása új alkatrész felvételekor" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Alkatrész név megjelenítés formátuma" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Formátum az alkatrész név megjelenítéséhez" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "Alkatrész kategória alapértelmezett ikon" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "Áraknál használt tizedesjegyek min. száma" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "Tizedejegyek minimális száma az árak megjelenítésekor" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "Áraknál használt tizedesjegyek max. száma" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "Tizedejegyek maximális száma az árak megjelenítésekor" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "Beszállítói árazás használata" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "Beszállítói ársávok megjelenítése az általános árkalkulációkban" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "Beszerzési előzmények felülbírálása" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "Beszerzési árelőzmények felülírják a beszállítói ársávokat" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "Készlet tétel ár használata" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "A kézzel bevitt készlet tétel árak használata az árszámításokhoz" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "Készlet tétel ár kora" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "Az ennyi napnál régebbi készlet tételek kizárása az árszámításból" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "Alkatrészváltozat árak használata" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "Csak az aktív változatokat" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "Árazás újraszámítás gyakoriság" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "Árak automatikus frissítése ennyi nap után" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Belső árak" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "Ha elérhetőek az árkalkulációkban a belső árak lesznek alapul véve" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Képek felbontása amik átadásra kerülnek címkenyomtató pluginoknak" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Debug mód" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Lapméret" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "Teszt riportok engedélyezése" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "Teszt riportok előállításának engedélyezése" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "Teszt riportok hozzáadása" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Teszt riport nyomtatáskor egy másolat hozzáadása a készlet tételhez" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "A sorozatszámoknak egyedinek kell lennie a teljes készletre vonatkozóan" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "Sorozatszámok automatikus kitöltése" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "Sorozatszámok automatikus kitöltése a formokon" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "Sablon a készlet tételekhez alapértelmezett batch kódok előállításához" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "Napok száma amennyivel a lejárat előtt a készlet tételeket állottnak vesszük" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "Tuajdonosok kezelésének engedélyezése a készlet helyekre és tételekre" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "Szükséges minta a gyártási utasítás azonosító mező előállításához" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "Visszavétel engedélyezése" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "Visszavételi utasítások engedélyezése a felületen" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "Visszavételi utasítás azonosító minta" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "Szükséges minta a visszavételi utasítás azonosító mező előállításához" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "Befejezett visszavételi utasítás szerkesztése" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "Visszavételi utasítások szerkesztésének engedélyezése befejezés után" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Vevői rendelések szerkesztésének engedélyezése szállítás vagy befejezés után" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "Szükséges minta a beszerzési rendelés azonosító mező előállításához" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Beszérzési rendelések szerkesztésének engedélyezése kiküldés vagy befejezés után" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése a bejelentkező oldalon" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése SSO-n keresztül a bejelentkező oldalon" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "Email szükséges" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "Email kétszer" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "Regisztráláskor kétszer kérdezze a felhasználó email címét" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "Ezekről a domain-ekről a regisztráció tiltása (vesszővel elválasztva, @-el kezdve)" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "Csoport amihez a frissen regisztrált felhasználók hozzá lesznek rendelve" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Ellenőrizze induláskor hogy minden plugin telepítve van - engedélyezd konténer környezetben (docker)" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "Plugin aláírások ellenőrzése" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "Pluginok aláírásainak ellenőrzése és megjelenítése" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "Háttérben futó feladatok hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "Leltár funkció" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "Leltár funkció engedélyezése a készlet mennyiség és érték számításhoz" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "Automatikus leltár időpontja" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "Hány naponta történjen automatikus leltár (nulla egyenlő tiltva)" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "Riport törlési gyakoriság" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "Régi leltár riportok törlése hány naponta történjen" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "Nincs nyomtató (nyomtatás PDF-be)" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "Értesítésre beállított alkatrészek megjelenítése" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "Alkatrész értesítések megjelenítése a főoldalon" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "Értesítésre beállított kategóriák megjelenítése" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "Alkatrész kategória értesítések megjelenítése a főoldalon" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Legújabb alkatrészek megjelenítése" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Legújabb alkatrészek megjelenítése a főoldalon" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "Legfrissebb alkatrész szám" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "Főoldalon megjelenítendő legújabb alkatrészek" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "Jóváhagyás nélküli alkatrészjegyzékek megjelenítése" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "Jóváhagyásra váró alkatrészjegyzékek megjelenítése a főoldalon" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Legfrissebb készlet változások megjelenítése" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Legutóbb megváltozott alkatrészek megjelenítése a főoldalon" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "Legfrissebb készlet mennyiség" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "Főoldalon megjelenítendő legújabb készlet tételek száma" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Alacsony készlet megjelenítése" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Alacsony készletek megjelenítése a főoldalon" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Kimerült készlet megjelenítése" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Kimerült készletek megjelenítése a főoldalon" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Gyártáshoz szükséges készlet megjelenítése" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Gyártáshoz szükséges készletek megjelenítése a főoldalon" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Lejárt készlet megjelenítése" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Lejárt készletek megjelenítése a főoldalon" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "Állott készlet megjelenítése" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "Álló készletek megjelenítése a főoldalon" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "Függő gyártások megjelenítése" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "Folyamatban lévő gyártások megjelenítése a főoldalon" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "Késésben lévő gyártások megjelenítése" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "Késésben lévő gyártások megjelenítése a főoldalon" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "Kintlévő beszerzési rendelések megjelenítése" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "Kintlévő beszerzési rendelések megjelenítése a főoldalon" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "Késésben lévő megrendelések megjelenítése" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "Késésben lévő megrendelések megjelenítése a főoldalon" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "Függő vevői rendelések megjelenítése" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "Függő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "Késésben lévő vevői rendelések megjelenítése" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "Késésben lévő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "Hírek megjelenítése" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "Hírek megjelenítése a főoldalon" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "Beágyazott címke megjelenítés" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF címkék megjelenítése a böngészőben letöltés helyett" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "Alapértelmezett címkenyomtató" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "Melyik címkenyomtató legyen az alapértelmezett" + +#: common/models.py:1857 msgid "Inline report display" msgstr "Beágyazott riport megjelenítés" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF riport megjelenítése a böngészőben letöltés helyett" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "Alkatrészek keresése" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "Alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "Beszállítói alkatrészek keresése" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "Beszállítói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "Gyártói alkatrészek keresése" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "Gyártói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "Inaktív alkatrészek kihagyása a keresési előnézet találataiból" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "Kategóriák keresése" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "Alkatrész kategóriák megjelenítése a keresési előnézetben" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "Készlet keresése" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "Készlet tételek megjelenítése a keresési előnézetben" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "Nem elérhető készlet tételek elrejtése" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nem elérhető készlet kihagyása a keresési előnézet találataiból" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "Helyek keresése" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "Készlet helyek megjelenítése a keresési előnézetben" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "Cégek keresése" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "Cégek megjelenítése a keresési előnézetben" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "Gyártási utasítások keresése" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "Gyártási utasítások megjelenítése a keresés előnézet ablakban" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "Beszerzési rendelések keresése" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "Beszerzési rendelések megjelenítése a keresési előnézetben" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktív beszerzési rendelések kihagyása" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktív beszerzési rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "Vevői rendelések keresése" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "Vevői rendelések megjelenítése a keresési előnézetben" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "Inaktív vevői rendelések kihagyása" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktív vevői rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:1841 +#: common/models.py:1962 +msgid "Search Return Orders" +msgstr "Visszavételi utasítások keresése" + +#: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "Visszavételi utasítások megjelenítése a keresés előnézet ablakban" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "Inaktív visszavételi utasítások kihagyása" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "Inaktív visszavételi utasítások kihagyása a keresési előnézet találataiból" + +#: common/models.py:1976 msgid "Search Preview Results" msgstr "Keresési előnézet eredményei" -#: common/models.py:1842 +#: common/models.py:1977 msgid "Number of results to show in each section of the search preview window" msgstr "A keresési előnézetben megjelenítendő eredmények száma szekciónként" -#: common/models.py:1848 +#: common/models.py:1983 +msgid "Regex Search" +msgstr "Regex keresés" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "Reguláris kifejezések engedélyezése a keresésekben" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "Teljes szó keresés" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "A keresések csak teljes szóra egyező találatokat adjanak" + +#: common/models.py:1997 msgid "Show Quantity in Forms" msgstr "Mennyiség megjelenítése a formokon" -#: common/models.py:1849 +#: common/models.py:1998 msgid "Display available part quantity in some forms" msgstr "Rendelkezésre álló alkatrész mennyiség megjelenítése néhány formon" -#: common/models.py:1855 +#: common/models.py:2004 msgid "Escape Key Closes Forms" msgstr "ESC billentyű zárja be a formot" -#: common/models.py:1856 +#: common/models.py:2005 msgid "Use the escape key to close modal forms" msgstr "ESC billentyű használata a modális formok bezárásához" -#: common/models.py:1862 +#: common/models.py:2011 msgid "Fixed Navbar" msgstr "Rögzített menüsor" -#: common/models.py:1863 +#: common/models.py:2012 msgid "The navbar position is fixed to the top of the screen" msgstr "A menü pozíciója mindig rögzítve a lap tetején" -#: common/models.py:1869 +#: common/models.py:2018 msgid "Date Format" msgstr "Dátum formátum" -#: common/models.py:1870 +#: common/models.py:2019 msgid "Preferred format for displaying dates" msgstr "Preferált dátum formátum a dátumok kijelzésekor" -#: common/models.py:1884 part/templates/part/detail.html:41 +#: common/models.py:2033 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Alkatrész ütemezés" -#: common/models.py:1885 +#: common/models.py:2034 msgid "Display part scheduling information" msgstr "Alkatrész ütemezési információk megjelenítése" -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 +#: common/models.py:2040 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Alkatrész leltár" -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "Alkatrész leltározási információk megjelenítése" +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "Alkatrész leltár információk megjelenítése (ha a leltár funkció engedélyezett)" -#: common/models.py:1898 +#: common/models.py:2047 msgid "Table String Length" msgstr "Táblázati szöveg hossz" -#: common/models.py:1899 +#: common/models.py:2048 msgid "Maximimum length limit for strings displayed in table views" msgstr "Maximális szöveg hossz ami megjelenhet a táblázatokban" -#: common/models.py:1963 +#: common/models.py:2103 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Ár" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Aktív" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "Token" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "Titok" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "Fejléc" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "Törzs" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "Id" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "Cím" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "Közzétéve" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "Szerző" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "Elolvasva" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "Elolvasva?" @@ -3001,7 +3266,7 @@ msgstr "Új {verbose_name}" msgid "A new order has been created and assigned to you" msgstr "Egy új megrendelés létrehozva, és hozzád rendelve" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "Készlet érkezett" @@ -3009,21 +3274,25 @@ msgstr "Készlet érkezett" msgid "Items have been received against a purchase order" msgstr "Készlet érkezett egy beszerzési megrendeléshez" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "Készlet érkezett vissza egy visszavételi utasításhoz" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "Plugin hiba" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Fájl feltöltése" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "Mezők egyeztetése" @@ -3061,7 +3330,7 @@ msgstr "A cég leírása" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Weboldal" @@ -3087,6 +3356,7 @@ msgstr "Kapcsolattartó telefonszáma" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "Email" @@ -3095,8 +3365,11 @@ msgid "Contact email address" msgstr "Kapcsolattartó email címe" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "Kapcsolattartó" +msgstr "Névjegy" #: company/models.py:127 msgid "Point of contact" @@ -3106,11 +3379,11 @@ msgstr "Kapcsolattartó" msgid "Link to external company information" msgstr "Link a külső céginformációhoz" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Kép" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Cég megjegyzések" @@ -3138,229 +3411,230 @@ msgstr "gyártó-e" msgid "Does this company manufacture parts?" msgstr "Gyárt ez a cég alkatrészeket?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Pénznem" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Cég által használt alapértelmezett pénznem" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Kiindulási alkatrész" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Válassz alkatrészt" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Gyártó" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Gyártó kiválasztása" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "MPN" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Gyártói cikkszám" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "URL link a gyártói alkatrészhez" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "Gyártói alkatrész leírása" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Gyártói alkatrész" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Paraméter neve" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Érték" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Paraméter értéke" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Mértékegységek" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Paraméter mértékegység" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Beszállító" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Beszállító kiválasztása" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "SKU" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "Beszállítói cikkszám" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "Gyártói alkatrész kiválasztása" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "URL link a beszállítói alkatrészhez" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "Beszállítói alkatrész leírása" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Megjegyzés" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "alap költség" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "Minimális díj (pl. tárolási díj)" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Csomagolás" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "Alkatrész csomagolás" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "Csomagolási mennyiség" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "Egy csomagban lévő mennyiség" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "többszörös" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "Többszörös rendelés" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Elérhető" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "Beszállítónál elérhető mennyiség" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "Elérhetőség frissítve" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "Utolsó elérhetőségi adat frissítés" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "Beszállító által használt alapértelmezett pénznem" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Pénznem kódja" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Cég" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Kiindulási alkatrész" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Válassz alkatrészt" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Gyártó" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Gyártó kiválasztása" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "MPN" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Gyártói cikkszám" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "URL link a gyártói alkatrészhez" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "Gyártói alkatrész leírása" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Gyártói alkatrész" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Paraméter neve" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Érték" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Paraméter értéke" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Mértékegység" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Paraméter mértékegység" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Beszállító" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Beszállító kiválasztása" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "SKU" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "Beszállítói cikkszám" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "Gyártói alkatrész kiválasztása" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "URL link a beszállítói alkatrészhez" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "Beszállítói alkatrész leírása" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Megjegyzés" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "alap költség" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "Minimális díj (pl. tárolási díj)" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Csomagolás" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "Alkatrész csomagolás" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "Csomagolási mennyiség" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "Egy csomagban lévő mennyiség" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "többszörös" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "Többszörös rendelés" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Elérhető" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "Beszállítónál elérhető mennyiség" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "Elérhetőség frissítve" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "Utolsó elérhetőségi adat frissítés" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Beszállító által használt alapértelmezett pénznem" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Beszerzési rendelés létrehozása" @@ -3373,7 +3647,7 @@ msgid "Edit company information" msgstr "Cég adatainak szerkesztése" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Cég szerkesztése" @@ -3401,14 +3675,17 @@ msgstr "Kép letöltése URL-ről" msgid "Delete image" msgstr "Kép törlése" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Vevő" @@ -3421,7 +3698,7 @@ msgid "Phone" msgstr "Telefonszám" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "Kép eltávolítása" @@ -3430,123 +3707,153 @@ msgid "Remove associated image from this company" msgstr "Céghez rendelt kép eltávolítása" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "Törlés" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Kép feltöltése" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Kép letöltése" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Beszállítói alkatrészek" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Új beszállítói alkatrész létrehozása" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Új beszállítói alkatrész" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Alkatrész rendelés" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Alkatrész törlés" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Alkatrész törlés" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Gyártói alkatrészek" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Új gyártói alkatrész létrehozása" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Új gyártói alkatrész" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Beszállítói készlet" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Beszerzési rendelések" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Beszerzési rendelés létrehozása" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Új beszerzési rendelés" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Vevői rendelések" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Vevői rendelés létrehozása" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Új vevői rendelés" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "Hozzárendelt készlet" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "Visszavételi utasítások" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "Visszavételi utasítás létrehozása" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "Új visszavételi utasítás" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "Cég névjegyek" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "Névjegy hozzáadása" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Beszállítók listája" @@ -3557,18 +3864,18 @@ msgid "Manufacturers" msgstr "Gyártók" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Alkatrész rendelés" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Gyártói alkatrész szerkesztése" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Gyártói alkatrész törlése" @@ -3583,36 +3890,36 @@ msgstr "Nincs elérhető gyártói információ" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Beszállítók" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Beszállítói alkatrész törlése" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Törlés" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paraméterek" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Új paraméter" @@ -3620,8 +3927,8 @@ msgstr "Új paraméter" msgid "Delete parameters" msgstr "Paraméterek törlése" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Paraméter hozzáadása" @@ -3637,55 +3944,31 @@ msgstr "Szállított alkatrészek" msgid "Supplied Stock Items" msgstr "Szállított készlet tételek" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "Hozzárendelt készlet tételek" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "Névjegyek" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Beszállítói alkatrész" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Vonalkód műveletek" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "QR kód megjelenítése" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "Vonalkód leválasztása" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "Vonalkód hozzárendelése" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "Beszállítói alkatrész műveletek" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Alkatrész rendelése" @@ -3696,13 +3979,13 @@ msgstr "Elérhetőség frissítése" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "Beszállítói alkatrész szerkesztése" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "Beszállítói alkatrész másolása" @@ -3714,95 +3997,68 @@ msgstr "Beszállítói alkatrész törlése" msgid "Delete Supplier Part" msgstr "Beszállítói alkatrész törlése" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "Vonalkód azonosító" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "Nincs elérhető beszállítói információ" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "Beszállítói készlet" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "Új készlet tétel létrehozása" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "Új készlet tétel" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "Beszállítói alkatrész rendelések" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Árinformációk" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "Ársáv hozzáadása" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "Beszállítói alkatrész QR kód" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "Vonalkód hozzárendelése a beszállítói alkatrészhez" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "Alkatrész elérhetőség frissítése" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Készlet" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Rendelések" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "Beszállító alkatrész árazás" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Árazás" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Készlet tételek" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Beszállító alkatrész árazás" + #: company/views.py:33 msgid "New Supplier" msgstr "Új beszállító" @@ -3820,7 +4076,7 @@ msgstr "Vevők" msgid "New Customer" msgstr "Új vevő" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Cégek" @@ -3828,519 +4084,604 @@ msgstr "Cégek" msgid "New Company" msgstr "Új cég" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "Készlet tétel QR kódja" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "Címke neve" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Címke leírása" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "Címke" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "Címke sablon fájl" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Engedélyezve" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "Címke sablon engedélyezve" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Szélesség [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "Címke szélessége, mm-ben" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Magasság [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "Címke magassága, mm-ben" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "Fájlnév minta" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "Minta a címke fájlnevek előállításához" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "Lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)," -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Szűrők" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "Lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "Alkatrész lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "Nincs egyező beszerzési rendelés" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "Ismeretlen" -#: order/models.py:83 -msgid "Order description" -msgstr "Rendelés leírása" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Teljes ár" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "A rendelés teljes ára" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Link külső weboldalra" -#: order/models.py:93 -msgid "Created By" -msgstr "Készítette" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek" - -#: order/models.py:105 -msgid "Order notes" -msgstr "Rendelés jegyzetek" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "Rendelés azonosító" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "Beszerzési rendelés állapota" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "Cég akitől a tételek beszerzésre kerülnek" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "Beszállítói azonosító" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "Beszállítói rendelés azonosító kód" - -#: order/models.py:275 -msgid "received by" -msgstr "érkeztette" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "Kiállítás dátuma" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "Kiállítás dátuma" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Várható beérkezés" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Várt teljesítési dátuma a megrendelésnek. Ezután már késésben lévőnek számít majd." -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Készítette" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "Kapcsolattartó ehhez a rendeléshez" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Rendelés jegyzetek" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Rendelés azonosító" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Beszerzési rendelés állapota" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Cég akitől a tételek beszerzésre kerülnek" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "Beszállítói azonosító" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "Beszállítói rendelés azonosító kód" + +#: order/models.py:366 +msgid "received by" +msgstr "érkeztette" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Kiállítás dátuma" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Kiállítás dátuma" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "Az alkatrész beszállítója meg kell egyezzen a beszerzési rendelés beszállítójával" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "Cég akinek a tételek értékesítésre kerülnek" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "Cél dátum a rendelés teljesítéséhez. Ez után számít majd késettnek." - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "szállította" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "A rendelés nem teljesíthető mivel nincs hozzárendelve alkatrész" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "Csak függő rendelés jelölhető késznek" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "A rendelés nem jelölhető késznek mivel függő szállítmányok vannak" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "A rendelés nem jelölhető késznek mivel nem teljesített sortételek vannak" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Cél dátuma ennek a sortételnek (hagyd üresen a rendelés céldátum használatához)" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "Kontextus" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "törölve" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "Rendelés" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "Mit szeretne a vevő hol tároljuk ezt az alkatrészt?" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtuális alkatrészt nem lehet vevői rendeléshez adni" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "Csak értékesíthető alkatrészeket lehet vevői rendeléshez adni" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "Szállítmány megjegyzései" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "Nem foglalható készlet egy másik fajta alkatrész sortételéhez" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "Nem foglalható készlet egy olyan sorhoz amiben nincs alkatrész" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "Sor" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "Tétel" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/serializers.py:63 -msgid "Price currency" -msgstr "Pénznem" +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "Visszavételi utasítás azonosító" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "Cég akitől a tételek visszavételre kerülnek" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "Visszavételi utasítás állapota" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "Csak szériaszámos tételek rendelhetők visszaszállítási utasításhoz" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "Visszavételi utasítás" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "Visszavételi dátum" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "Mikor lett visszavéve a tétel" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "Kimenetel" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "Sortétel végső kimenetele" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "Sortétel visszaküldésének vagy javításának költsége" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "Rendelés lezárása teljesítetlen sortételek esetén is" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "A beszállítónak egyeznie kell a beszerzési rendelésben lévővel" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "Egyedi azonosító mező" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "Vonalkód" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "Beolvasott vonalkód" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "A következő sorozatszámok már ki lettek osztva" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "Visszavételi utasítás sortétel" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "Sortétel nem egyezik a visszavételi utasítással" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "A sortétel már beérkezett" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "Csak folyamatban lévő megrendelés tételeit lehet bevételezni" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "Sortétel pénzneme" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "Késésben lévő beszerzés" @@ -4359,102 +4700,123 @@ msgstr "Késésben lévő vevői rendelés" msgid "Sales order {so} is now overdue" msgstr "A {so} vevői rendelés most már késésben van" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "Beszerzési rendelés nyomtatása" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Rendelés exportálása fájlba" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "Rendelés műveletek" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Rendelés szerkesztése" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Rendelés törlése" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Rendelés másolása" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" -msgstr "Megrendelés elküldése" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" +msgstr "Rendelés kiküldése" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "Érkezett tételek bevételezése" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "Bevételezés" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Rendelés teljesítettnek jelölése" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "Rendelés befejezése" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" -msgstr "Rendelési azonosító" +msgstr "Rendelés azonosítója" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "Rendelés leírása" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Rendelés állapota" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "Nincs elérhető beszállítói információ" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Kész sortételek" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Hiányos" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Kiküldve" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "Teljes költség" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "A teljes költség nem számolható" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "Beszerzési rendelés QR kódja" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "Vonalkód hozzáadása a beszerzési rendeléshez" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4504,11 +4866,13 @@ msgstr "Kijelöltek másolása" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Sor törlése" @@ -4550,9 +4914,11 @@ msgid "Step %(step)s of %(count)s" msgstr "%(step)s/%(count)s. lépés" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "Sortételek" @@ -4565,290 +4931,329 @@ msgid "Purchase Order Items" msgstr "Beszerzési rendelés tételei" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "Sortétel hozzáadása" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" -msgstr "Kiválasztott tételek bevételezése" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "Sortételek bevételezése" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "Sortételek törlése" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "Egyéb tételek" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "Egyéb tétel hozzáadása" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "Érkezett tételek" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "Rendelés megjegyzések" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" -msgstr "Sortétel hozzáadása" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" +msgstr "Visszavételi riport nyomtatása" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "Rendelés riportok nyomtatása" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "Vevői rendelés nyomtatása" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "Csomagolási lista nyomtatása" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "Függő szállítmányok kiszállítása" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "Vevői rendelés befejezése, minden kiszállítva" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "Ehhez a vevői rendeléshez nincs minden alkatrész lefoglalva" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "Vevői azonosító" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "Teljes költség" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "Visszavételi utasítás QR kódja" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "Vonalkód visszavételi utasításhoz rendelése" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "Visszavétel részletei" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "Vevői rendelés nyomtatása" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "Tételek kiszállítása" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "Vevői rendelés befejezése, minden kiszállítva" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "Ehhez a vevői rendeléshez nincs minden alkatrész lefoglalva" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" -msgstr "Vevői rendelés szerkesztése" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "Vevő rendelés QR kódja" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" +msgstr "Vonalkód hozzáadása a vevői rendeléshez" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "Vevői rendelés tételek" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "Függő szállítmányok" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "Műveletek" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "Új szállítmány" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "Beszállítói alkatrészek egyeztetése" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "Vevő rendelés nem találhtó" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "Nem található ár" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "A {part} egységára {price}-ra módosítva" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "A {part} alkatrész módosított egységára {price} mennyisége pedig {qty}" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "Alkatrész ID" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "Alkatrész neve" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "Alkatrész leírása" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "IPN" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Változat" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Kulcsszavak" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "Kategória ID" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "Kategória neve" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "Alapértelmezett készlethely ID" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "Alapértelmezett beszállító ID" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "Minimális készlet" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "Készleten" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "Rendelve" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "Felhasználva ebben" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "Lefoglalva" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "Gyártásban" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "Szülő ID" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "Szülő neve" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "Kategória elérési út" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Alkatrészek" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "Alkatrészjegyzék szint" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "Alkatrészjegyzék tétel ID" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "Szülő IPN" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "Alkatrész IPN" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "Minimum ár" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "Maximum ár" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "Beérkező beszerzési rendelés" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "Kimenő vevői rendelés" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "Gyártással előállított készlet" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "A gyártási utasításhoz szükséges készlet" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "Érvényes" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "Ennek az opciónak ki kll lennie választva" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Alapértelmezett hely" @@ -4856,815 +5261,940 @@ msgstr "Alapértelmezett hely" msgid "Total Stock" msgstr "Teljes készlet" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Elérhető készlet" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "Add meg a mennyiséget az árszámításhoz" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "Szerkezeti" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "A szerkezeti alkatrész kategóriákhoz nem lehet direktben alkatrészeket hozzáadni, csak az alkategóriáikhoz." - -#: part/models.py:128 -msgid "Default keywords" -msgstr "Alapértelmezett kulcsszavak" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "Ikon" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "Ikon (opcionális)" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "Nem lehet az alkatrészkategóriát szerkezeti kategóriává tenni, mert már vannak itt alkatrészek!" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Alkatrész kategória" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "Szerkezeti" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "A szerkezeti alkatrész kategóriákhoz nem lehet direktben alkatrészeket hozzáadni, csak az alkategóriáikhoz." + +#: part/models.py:133 +msgid "Default keywords" +msgstr "Alapértelmezett kulcsszavak" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "Ikon" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "Ikon (opcionális)" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "Nem lehet az alkatrészkategóriát szerkezeti kategóriává tenni, mert már vannak itt alkatrészek!" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "Hibás választás a szülő alkatrészre" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "A '{p1}' alkatrész a '{p2}' alkatrészjegyzékében már szerepel (rekurzív)" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN mezőnek egyeznie kell a '{pat}' mintával" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "Létezik már készlet tétel ilyen a sorozatszámmal" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" -msgstr "Azonos IPN nem engedélyezett az alkatrész beállításokban" +msgstr "Azonos IPN nem engedélyezett az alkatrészekre, már létezik ilyen" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "Ilyen nevű, IPN-ű és reviziójú alkatrész már létezik." -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/models.py:834 -msgid "Part description" -msgstr "Alkatrész leírása" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredményekben" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Kategória" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "Alkatrész változat vagy verziószám (pl. szín, hossz, revízió, stb.)" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "Alapértelmezett beszállító" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "Alapértelmezett beszállítói alkatrész" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "Lejárati idő (napban) ennek az alkatrésznek a készleteire" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "Gyártható-e ez az alkatrész más alkatrészekből?" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "Felhasználható-e ez az alkatrész más alkatrészek gyártásához?" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "Kell-e külön követni az egyes példányait ennek az alkatrésznek?" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "Rendelhető-e ez az alkatrész egy külső beszállítótól?" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "Értékesíthető-e önmagában ez az alkatrész a vevőknek?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ez egy virtuális nem megfogható alkatrész, pl. szoftver vagy licenc?" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "Alkatrész megjegyzések" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "Felhasználó aki felelős ezért az alkatrészért" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "Utolsó leltár" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "Tételszám" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "Egyedi készlet tételek száma a leltárkor" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "Dátum" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "További megjegyzések" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "Leltározta" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "Minimum készlet érték" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "Becsült minimum raktárkészlet érték" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "Maximum készlet érték" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "Becsült maximum raktárkészlet érték" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "Riport" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "Leltár riport fájl (generált)" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "Alkatrész szám" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "Leltározott alkatrészek száma" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "Felhasználó aki a leltár riportot kérte" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "Teszt sablont csak követésre kötelezett alkatrészhez lehet csinálni" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "Erre az alkatrészre már létezik teszt ilyen névvel" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "Kötelező" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően érték legyen rendelve?" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően fájl melléklet legyen rendelve?" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "Paraméter neve" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "Paraméter mértékegysége" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "Paraméter leírása" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "Szülő alkatrész" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "Paraméter sablon" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "Adat" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "Paraméter értéke" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "Alapértelmezett érték" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "Alkatrész ID vagy alkatrész név" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "Egyedi alkatrész ID értéke" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "Alkatrész IPN érték" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "Szint" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "Alkatrészjegyzék szint" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "Opcionális" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "Fogyóeszköz" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ez az alkatrészjegyzék tétel fogyóeszköz (készlete nincs követve a gyártásban)" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Többlet" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Becsült gyártási veszteség (abszolút vagy százalékos)" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "Örökölt" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "Jóváhagyva" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "Ez a BOM tétel jóvá lett hagyva" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "Öröklődött" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ezt az alkatrészjegyzék tételt az alkatrész változatok alkatrészjegyzékei is öröklik" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "Változatok" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Alkatrészváltozatok készlet tételei használhatók ehhez az alkatrészjegyzék tételhez" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "A mennyiség egész szám kell legyen a követésre kötelezett alkatrészek esetén" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "A helyettesítő alkatrész nem lehet ugyanaz mint a fő alkatrész" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "1.rész" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "2.rész" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva." -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "Válassz beszállítót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "Kategória paraméterek másolása" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "Leltár riport korlátozása bizonyos alkatrészre és variánsra" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "Leltár riport korlátozása bizonyos alkatrész kategóriára és az alatta lévőkre" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "Leltár riport korlátozása bizonyos készlethelyre és az alatta lévőkre" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "Riport létrehozása" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "Riport fájl létrehozása a számított leltár adatokkal" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "Alaktrészek frissítése" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "Megadott alkatrészek frissítése a számított leltár adatokkal" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "Leltár funkció nincs engedélyezve" + +#: part/serializers.py:964 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "Meglévő alkatrészjegyzék tételek törlése a másolás előtt" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "Sablon alkatrészektől örökölt alkatrészjegyzék tételek használata" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "Meglévő alkatrészjegyzék törlése" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "Meglévő alkatrészjegyzék tételek törlése a feltöltés előtt" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "Nincs megadva alkatrész oszlop" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "Több egyező alkatrész is található" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "Nincs egyező alkatrész" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "Az alkatrész nem lett összetevőként jelölve" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "Mennyiség nincs megadva" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "Érvénytelen mennyiség" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "Legalább egy alkatrészjegyzék tétel szükséges" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "Alacsony készlet értesítés" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "A {part.name} alkatrész rendelkezésre álló készlete a megadott minimum alá csökkent" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "Teljes mennyiség" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "Teljes költség min" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "Teljes költség max" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "Leltár riport rendelkezésre áll" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "Egy új leltár riport készen áll a letöltésre" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "Nincs jogosultságod az alkatrészjegyzék szerkesztéséhez." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" -msgstr "A %(part)s alkatrészhez tartozó alkatrészjegyzék megváltozott és jóvá kell hagyni.
" +msgid "The BOM this part has been changed, and must be validated" +msgstr "" #: part/templates/part/bom.html:17 #, python-format @@ -5676,7 +6206,7 @@ msgstr "A %(part)s alkatrészhez tartozó alkatrészjegyzéket utoljár msgid "The BOM for %(part)s has not been validated." msgstr "A %(part)s alkatrészhez tartozó alkatrészjegyzék még nincs jóváhagyva." -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "Alkatrészjegyzék műveletek" @@ -5684,85 +6214,85 @@ msgstr "Alkatrészjegyzék műveletek" msgid "Delete Items" msgstr "Tételek törlése" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "Alkatrész kategória leltározása" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "Értesítések beállítva erre a kategóriára" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "Értesítések kérése erre a kategóriára" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "Kategória műveletek" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Kategória szerkesztése" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Kategória szerkesztése" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Kategória törlése" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Kategória törlése" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "Legfelső szintű alkatrész kategória" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alkategóriák" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Alkatrészek száma (alkategóriákkal együtt)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "Alkatrész létrehozása" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "Új alkatrész" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "Opciók" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "Kategória beállítása" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "Kategória beállítása" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "Címkék nyomtatása" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Alkatrész paraméterek" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "Alkatrész kategória létrehozása" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Új kategória" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "Alkatrész kategória létrehozása" @@ -5799,122 +6329,124 @@ msgid "Refresh scheduling data" msgstr "Ütemezési adatok frissítése" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Frissítés" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "Leltár információ hozzáadása" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "Leltár" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "Alkatrész teszt sablonok" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "Teszt sablon hozzáadása" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "Vevői rendeléshez foglalások" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "Alkatrész megjegyzések" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "Alkatrész változatok" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "Új változat létrehozása" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "Új változat" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "Paraméter hozzáadása" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Kapcsolódó alkatrészek" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "Kapcsolódó hozzáadása" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Alkatrészjegyzék" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "Exportálási műveletek" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Alkatrészjegyzék exportálása" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "Alkatrészjegyzék riport nyomtatása" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "Alkatrészjegyzék feltöltése" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "Alkatrészjegyzék jóváhagyása" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "Alkatrészjegyzék tétel hozzáadása" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "Gyártmányok" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "Alkatrész gyártások" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "Gyártáshoz foglalások" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "Alkatrész beszállítók" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "Alkatrész gyártók" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "Gyártói alkatrészek törlése" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "Kapcsolódó alkatrész" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "Kapcsolódó alkatrész hozzáadása" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "Teszt eredmény sablon hozzáadása" @@ -5949,13 +6481,13 @@ msgstr "Alkatrész import sablon letöltése" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "Formátum" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "Fájlfomátum kiválasztása" @@ -5977,7 +6509,7 @@ msgstr "Vonalkód leválasztása" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Címke nyomtatása" @@ -5987,7 +6519,7 @@ msgstr "Árinformációk megjelenítése" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Készlet műveletek" @@ -6040,39 +6572,37 @@ msgid "Part can be sold to customers" msgstr "Vevő által rendelhető, eladható" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "Az alkatrész nem aktív" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "Inaktív" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "Virtuális (nem kézzelfogható alkatrész)" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "Inaktív" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "Alkatrész részletei" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "Ez az alkatrész egy változata a %(link)s alkatrésznek" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "Gyártáshoz lefoglalva" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "Vevő rendeléshez lefoglalva" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "Gyártható" @@ -6080,44 +6610,48 @@ msgstr "Gyártható" msgid "Minimum stock level" msgstr "Minimális készlet" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "Ártartomány" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "Legutolsó sorozatszám" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "Sorozatszámra keresés" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "Alkatrész QR kódja" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "Vonalkód hozzárendelése az alkatrészhez" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "Számítás" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "Alkatrészhez rendelt kép eltávolítása" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "Nincs egyező kép" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "Részletek elrejtése" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "Beszállítói ár" @@ -6128,13 +6662,6 @@ msgstr "Beszállítói ár" msgid "Unit Cost" msgstr "Egység költség" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "Teljes költség" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "Nincs beszállítói árinfomáció" @@ -6172,11 +6699,27 @@ msgstr "Ütemezett mennyiség" msgid "Variants" msgstr "Változatok" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Készlet" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Árazás" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "Ütemezés" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "Teszt sablonok" @@ -6192,11 +6735,11 @@ msgstr "Ár áttekintés" msgid "Refresh Part Pricing" msgstr "Árazás frissítése" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "Utoljára módosítva" @@ -6259,8 +6802,8 @@ msgstr "Eladási ár" msgid "Add Sell Price Break" msgstr "Eladási ársáv hozzáadása" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "Nincs készlet" @@ -6310,45 +6853,40 @@ msgid "Create new part variant" msgstr "Alkatrész változat létrehozása" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." -msgstr "Új változat létrehozása a '%(full_name)s' sablonból." +msgid "Create a new variant part from this template" +msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "Ismeretlen adatbázis" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "{title} v{version}" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "Azonosítók egyeztetése" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "A(z) {name} alkatrész nem importálható, nincs kategória hozzárendelve" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "Alkatrész QR kódja" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "Válassz képet az alkatrészhez" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "Alkatrész képe frissítve" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "Az alkatrész képe nem található" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "Alkatrész árak" @@ -6377,6 +6915,7 @@ msgid "Match found for barcode data" msgstr "Egyezés vonalkódra" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "Ez a vonalkód már egy másik tételé" @@ -6388,15 +6927,15 @@ msgstr "Nincs találat a megadott értékre" msgid "Label printing failed" msgstr "Címkenyomtatás sikertelen" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "InventTree vonalkódok" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "Alapvető vonalkód támogatást ad" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "InvenTree fejlesztők" @@ -6499,19 +7038,20 @@ msgstr "Nincs szerző" msgid "No date found" msgstr "Nincs dátum" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" -msgstr "A {plg_name} plugin nem kompatibilis az aktuális applikáció verzióval {version.inventreeVersion()}!" - -#: plugin/registry.py:446 +#: plugin/registry.py:452 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" -msgstr "A pluginhoz minimum {plg_i.MIN_VERSION} verzió kell" +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" -msgstr "A pluginhoz maximum {plg_i.MAX_VERSION} verzió kell" +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" +msgstr "" #: plugin/samples/integration/sample.py:39 msgid "Enable PO" @@ -6545,132 +7085,136 @@ msgstr "Választás beállításai" msgid "A setting with multiple choices" msgstr "Egy beállítás több választási lehetőséggel" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "Forrás URL" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "Csomag forrása - ez lehet egy registry vagy VCS útvonal" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "Csomag neve" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "Plugin csomag neve - verzió megjelölést is tartalmazhat" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "Bővítmény telepítésének megerősítése" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "Ez telepíti ezt a plugint az aktuális példányra. A példány karbantartási módba megy." -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "Tlepítés nincs megerősítve" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "Vagy csomag nevet vagy URL-t meg kell adni" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "Nincs érvényes objektum megadva a sablonhoz" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "A '{template}' sablon fájl hiányzik vagy nem érhető el" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "Teszt riport" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "Sablon neve" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "Riport sablon fájl" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "Riport sablon leírása" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "Riport verziószáma (automatikusan nő)" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "Minta a riport fájlnevek előállításához" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "Riport sablon engedélyezve" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "Készlet lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "Beépített tesztekkel együtt" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "Gyártmányba beépített készlet tételek teszt eredményeivel együtt" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "Gyártás szűrők" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "Gyártás lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "Alkatrész szűrők" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "Alkatrész lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "Megrendelés lekérdezés szűrők" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "Vevő rendelés lekérdezés szűrők" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "Visszavételi utasítás lekérdezés szűrők" + +#: report/models.py:573 msgid "Snippet" msgstr "Részlet" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "Riport részlet fájl" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "Részlet fájl leírása" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "Eszköz" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "Riport asset fájl" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "Asset fájl leírása" @@ -6682,361 +7226,426 @@ msgstr "Szükséges alapanyagok" msgid "Required For" msgstr "Szükséges ehhez" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "Beszállító törölve lett" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Egységár" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "Egyéb tételek" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Összesen" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Sorozatszám" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "Készlet tétel teszt riport" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Sorozatszám" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "Teszt eredmények" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "Teszt" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "Eredmény" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Sikeres" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Sikertelen" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "Nincs eredmény (szükséges)" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "Nincs eredmény" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Beépített tételek" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "Sorozatszám" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "Hely ID" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "Hely neve" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "Hely elérési út" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "Készlet tétel ID" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "Státuszkód" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "Beszállítói cikkszám" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "Beszállító ID" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "Beszállító neve" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "Vevő ID" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "Gyártás ID" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "Vevői rendelés ID" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "Vevői rendelés azonosító" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "Felülvizsgálat szükséges" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "Törlés ha kimerül" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "Lejárati dátum" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "Külső hely" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "Tulajdonos" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "Tulajdonos kiválasztása" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "A szerkezeti raktári helyekre nem lehet direktben raktározni, csak az al-helyekre." - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "Nem lehet ezt a raktári helyet szerkezetivé tenni, mert már vannak itt tételek!" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "A alkatrész típus ('{pf}') {pe} kell legyen" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "Mennyiség 1 kell legyen a sorozatszámmal rendelkező tételnél" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "Nem lehet sorozatszámot megadni ha a mennyiség több mint egy" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "A tétel nem tartozhat saját magához" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "A tételnek kell legyen gyártási azonosítója ha az is_bulding igaz" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "Gyártási azonosító nem ugyanarra az alkatrész objektumra mutat" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "Szülő készlet tétel" - -#: stock/models.py:658 -msgid "Base part" -msgstr "Kiindulási alkatrész" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételhez" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Készlethelyek" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "Tulajdonos" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "Tulajdonos kiválasztása" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "A szerkezeti raktári helyekre nem lehet direktben raktározni, csak az al-helyekre." + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "Külső" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "Ez egy külső készlethely" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "Nem lehet ezt a raktári helyet szerkezetivé tenni, mert már vannak itt tételek!" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "A alkatrész típus ('{pf}') {pe} kell legyen" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "Mennyiség 1 kell legyen a sorozatszámmal rendelkező tételnél" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "Nem lehet sorozatszámot megadni ha a mennyiség több mint egy" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "A tétel nem tartozhat saját magához" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "A tételnek kell legyen gyártási azonosítója ha az is_bulding igaz" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "Gyártási azonosító nem ugyanarra az alkatrész objektumra mutat" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Szülő készlet tétel" + +#: stock/models.py:670 +msgid "Base part" +msgstr "Kiindulási alkatrész" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételhez" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "A csomagolása ennek a készlet tételnek itt van tárolva" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "Ez a tétel be van építve egy másik tételbe?" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Készlet tétel lejárati dátuma. A készlet lejártnak tekinthető ezután a dátum után" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "Készlet tétel megjegyzések" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "Egy egység beszerzési ára a beszerzés időpontjában" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "A mennyiség nem lépheti túl a készletet ({n})" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "A sorozatszám egész számok listája kell legyen" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "Ezek a sorozatszámok már léteznek: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "A sorozatszámok már léteznek" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "A készlet tétel ugyanarra a beszállítói alkatrészre kell vonatkozzon" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "Készlet tétel nem mozgatható mivel nincs készleten" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "Teszt neve" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "Tesztek megjegyzései" @@ -7044,128 +7653,124 @@ msgstr "Tesztek megjegyzései" msgid "Serial number is too large" msgstr "Szériaszám túl nagy" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "Beszerzési ára ennek a készlet tételnek" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "Add meg hány készlet tételt lássunk el sorozatszámmal" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "A mennyiség nem lépheti túl a rendelkezésre álló készletet ({q})" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "A sorozatszámok már léteznek" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "Cél hely a visszatérő tételeknek" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "Különböző beszállítói alkatrészekből származó készletek összevonásának engedélyezése" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "Különböző állapotú készletek összevonásának engedélyezése" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" @@ -7190,7 +7795,7 @@ msgstr "Teszt adatok" msgid "Test Report" msgstr "Teszt riport" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "Teszt adatok törlése" @@ -7202,15 +7807,15 @@ msgstr "Teszt adatok hozzáadása" msgid "Installed Stock Items" msgstr "Beépített készlet tételek" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "Készlet tétel beépítése" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "Készlet tétel összes teszt eredményének törlése" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "Teszt eredmény hozzáadása" @@ -7223,7 +7828,7 @@ msgid "Scan to Location" msgstr "Áthelyezés kódolvasással" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "Nyomtatási műveletek" @@ -7232,15 +7837,15 @@ msgid "Stock adjustment actions" msgstr "Készlet módosítási műveletek" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "Leltározás" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "Készlet növelése" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "Készlet csökkentése" @@ -7249,11 +7854,11 @@ msgid "Serialize stock" msgstr "Sorozatszámok előállítása" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "Készlet áthelyezése" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "Vevőhöz rendelése" @@ -7293,125 +7898,133 @@ msgstr "Készlet tétel szerkesztése" msgid "Delete stock item" msgstr "Készlet tétel törlése" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "Szülő tétel" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "Nincs beállítva gyártó" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "Úgytűnik nem vagy ennek a tételnek a tulajdonosa. Ezt így nem tudod módosítani." -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "Csak olvasható" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "Ez a készlet tétel nem elérhető" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "Ez a készlet tétel éppen gyártás alatt van és itt még nem szerkeszthető." -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "A tétel szerkesztése most csak a gyártási nézetből lehetséges." -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "Ez a készlet tétel nem felelt meg az összes szükséges teszten" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "Foglalva ehhez a vevői rendeléshez" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "Foglalva ehhez a gyártási utasításhoz" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "Ez a készlet tétel egyedi követésre kötelezett - egyedi sorozatszámmal rendelkezik így a mennyiség nem módosítható." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "Ez a készlet tétel egyedi követésre kötelezett. Egyedi sorozatszámmal rendelkezik így a mennyiség nem módosítható" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "előző oldal" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "Menj az előző sorozatszámhoz" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "követkető oldal" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "Menj a következő sorozatszámhoz" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "Elérhető mennyiség" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "Nincs beállítva hely" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "Tesztek" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "Ez a készlet tétel nem felelt meg az összes szükséges teszten" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Ez a készlet tétel lejárt %(item.expiry_date)s-n" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "Lejárt" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "Ez a készlet tétel lejár %(item.expiry_date)s-n" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "Állott" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "Még nem volt leltározva" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "Készlet állapot szerkesztése" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "Készlet tétel QR kódja" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "Vonalkód hozzárendelése a készlet tételhez" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "Válassz a lenti alkatrész változatok közül" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "Figyelem" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "Ez a művelet nem vonható vissza könnyen" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "Készlet tétel konvertálása" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "Visszavétel készletre" @@ -7423,47 +8036,51 @@ msgstr "Sorszámozott készletek létrehozása ebből a készlet tételből." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Válassz mennyiséget és egyedi sorozatszámokat a sorozatszámozáshoz." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "Készlethely leltározása" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "Készlet hely keresése" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "Készlet bevételezése erre a helyre" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "Készlet vonalkódok beolvasása" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "Készlet tároló bevételezése erre a helyre" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "Tároló vonalkód beolvasása" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Hely műveletek" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Hely szerkesztése" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Hely törlése" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "Legfelső szintű készlet hely" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "Hely tulajdonosa" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Úgytűnik nem vagy ennek a készlethelynek a tulajdonosa. Ezt így nem tudod módosítani." @@ -7473,11 +8090,6 @@ msgstr "Úgytűnik nem vagy ennek a készlethelynek a tulajdonosa. Ezt így nem msgid "Sublocations" msgstr "Alhelyek" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Készlethelyek" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "Új készlet hely létrehozása" @@ -7486,11 +8098,15 @@ msgstr "Új készlet hely létrehozása" msgid "New Location" msgstr "Új hely" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "Készlet tároló bevételezve erre a helyre" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "Készlet hely QR kódja" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "Vonalkód hozzárendelése a készlet helyhez" @@ -7510,10 +8126,6 @@ msgstr "Foglalások" msgid "Child Items" msgstr "Gyermek tételek" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "Készlet hely QR kódja" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Hozzáférés megtagadva" @@ -7530,7 +8142,8 @@ msgstr "Hitelesítési hiba" msgid "You have been logged out from InvenTree." msgstr "Kijelentkeztél az InvenTreeből." -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "Bejelentkezés" @@ -7639,6 +8252,12 @@ msgstr "Jelenlegi hírek" msgid "Notification History" msgstr "Értesítések előzményei" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "Értesítések törlése" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "Függő értesítések" @@ -7651,7 +8270,7 @@ msgstr "Mind megjelölése olvasottként" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "Értesítések" @@ -7667,8 +8286,8 @@ msgstr "Nem található régebbi értesítés" msgid "Delete all read notifications" msgstr "Olvasott értesítések törlése" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "Értesítés törlése" @@ -7706,7 +8325,6 @@ msgid "Label Settings" msgstr "Címke beállítások" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "Belépési beállítások" @@ -7724,7 +8342,7 @@ msgid "Single Sign On" msgstr "Single Sign On (SSO)" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "Beállítások" @@ -7742,8 +8360,9 @@ msgid "Open in new tab" msgstr "Megnyitás új fülön" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "Globális értesítési beállítások" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "Értesítési beállítások" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -7753,20 +8372,28 @@ msgstr "URL kompatibilis név (Slug)" msgid "Part Settings" msgstr "Alkatrész beállítások" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Alkatrész importálás" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Alkatrész importálása" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "Alkatrész paraméter sablonok" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "Leltár beállítások" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "Leltár riportok" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "Plugin beállítások" @@ -7775,7 +8402,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "Az alábbi beállítások módosításához a kiszolgáló azonnali újraindítása szükséges. Aktív használat közben ne változtass ezeken." #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "Pluginok" @@ -7810,7 +8437,7 @@ msgid "Stage" msgstr "Szakasz" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "Üzenet" @@ -7897,28 +8524,32 @@ msgstr "Beszerzési rendelés beállításai" msgid "Pricing Settings" msgstr "Árazási beállítások" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Árfolyamok" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Frissítés most" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Utolsó frissítés" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Soha" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "Riport beállítások" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "Visszavételi utasítás bellításai" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "Nincsenek értékek" @@ -7927,71 +8558,71 @@ msgstr "Nincsenek értékek" msgid "Edit setting" msgstr "Beállítások módosítása" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "Plugin beállítások módosítása" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "Értesítési beállítások szerkesztése" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "Általános beállítások szerkesztése" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "Felhasználói beállítások szerkesztése" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "Arány" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "Nincs kategória paraméter sablon" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "Sablon szerkesztése" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "Sablon törlése" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "Kategória paraméter sablon létrehozása" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "Kategória paraméter sablon törlése" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "Kategória paraméter sablon létrehozása" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "Nincs alkatrész paraméter sablon" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "Azonosító" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "Alkatrész paraméter sablon létrehozása" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "Alkatrész paraméter sablon módosítása" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "Az összes erre a sablonra hivatkozó paraméter is törlésre kerül" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "Alkatrész paraméter sablon törlése" @@ -8001,43 +8632,42 @@ msgid "User Settings" msgstr "Felhasználói beállítások" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Fiókbeállítások" +msgid "Account" +msgstr "Felhasználó" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Megjelenítési beállítások" +msgid "Display" +msgstr "Megjelenítés" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "Főoldal" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Keresési beállítások" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Keresés" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "Címke nyomtatás" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "Riportolás" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Általános beállítások" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" -msgstr "Kiszolgáló konfiguráció" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "Kiszolgáló" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "Címkék" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "Kategóriák" @@ -8049,6 +8679,10 @@ msgstr "Vevő rendelés beállításai" msgid "Stock Settings" msgstr "Készlet beállítások" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Fiókbeállítások" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8056,8 +8690,8 @@ msgid "Change Password" msgstr "Jelszó módosítása" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "Szerkesztés" @@ -8207,6 +8841,10 @@ msgstr "%(time)s óta" msgid "Do you really want to remove the selected email address?" msgstr "Biztosan törölni szeretnéd a kiválasztott email címet?" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Megjelenítési beállítások" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Téma beállítások" @@ -8272,9 +8910,9 @@ msgstr "InvenTree fordítási projekt" msgid "Home Page Settings" msgstr "Főoldal beállításai" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "Értesítési beállítások" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Keresési beállítások" #: templates/about.html:9 msgid "InvenTree Version" @@ -8342,7 +8980,7 @@ msgstr "Email cím megerősítése" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Erősítsd meg hogy a %(email)s email a %(user_display)s felhasználó email címe." -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Megerősítés" @@ -8510,11 +9148,11 @@ msgstr "Írd be az app által létrehozott tokent:" msgid "Verify" msgstr "Ellenőrzés" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "Link hozzáadása" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "Melléklet hozzáadása" @@ -8522,32 +9160,33 @@ msgstr "Melléklet hozzáadása" msgid "Delete selected attachments" msgstr "Kiválasztott mellékletek törlése" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "Mellékletek törlése" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "Vonalkód azonosító" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "Kiszolgáló újraindítása szükséges" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "Egy olyan konfigurációs opció megváltozott ami a kiszolgáló újraindítását igényli" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "Vedd fel a kapcsolatot a rendszergazdával további információkért" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "Sorok becsukása" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "Klikk a következő linkre a rendelés megjelenítéséhez" @@ -8569,7 +9208,7 @@ msgid "The following parts are low on required stock" msgstr "A következő alkatrészek szükséges készlete alacsony" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "Szükséges mennyiség" @@ -8583,214 +9222,206 @@ msgid "Click on the following link to view this part" msgstr "Klikk a következő linkre az alkatrész megjelenítéséhez" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "Minimum mennyiség" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "Sorok kinyitása" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "Nincs válasz" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "Nincs válasz az InvenTree kiszolgálótól" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "Error 400: Rossz kérelem" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "Az API kérelem 400-as hibakódot adott vissza" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "Error 401: Nincs hitelesítve" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "Hitelesítési adatok nem lettek megadva" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "Error 403: Hozzáférés megtagadva" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "Nincs meg a szükséges jogosultságod, hogy elérd ezt a funkciót" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "Error 404: Erőforrás nem található" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "A kért erőforrás nem található a kiszolgálón" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "Error 405: Metódus nincs engedélyezve" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "HTTP metódus nincs engedélyezve ezen az URL-n" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "Error 408: Időtúllépés" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "Időtúllépés a kiszolgálótól való adatlekérés közben" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "Nem kezelt hibakód" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "Hiba kód" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "Az összes kijelölt melléklet törlésre kerül" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "Nem találhatók mellékletek" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "Melléklet szerkesztése" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "Feltöltés dátuma" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "Melléklet szerkesztése" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "Melléklet törlése" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "Vonalkód beolvasása ide a kódolvasó használatával" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "Add meg a vonalkódot" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "Vonalkód" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "Vonalkód beolvasása webkamerával" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "Megjegyzések a készlet áthelyezéshez" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "Írd be a megjegyzéseket" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "Kiszolgálóhiba" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "Ismeretlen válasz a kiszolgálótól" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "Érvénytelen válasz a szervertől" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "Vonalkód beolvasása" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Vonalkód beolvasása" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "Nincs URL a válaszban" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "Ez törli a vonalkód hozzárendelést" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "Leválasztás" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "Készlet tétel törlése" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "Készlet bevételezése adott helyre" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "Készlet tétel vonalkód beolvasása, amit bevételezzünk erre a helyre" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "Bevételezés" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "Nincs vonalkód beolvasva" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "Készlet tétel már beolvasva" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "Készlet tétel már ezen a helyen van" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "Hozzáadott készlet tétel" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "Vonalkód nem egyezik egy ismert készlet tétellel sem" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "Készlet tároló bevételezése adott helyre" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "Készlet tároló vonalkód beolvasása, amit bevételezzünk erre a helyre" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "Készlet áthelyezése a leolvasott helyre" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "A vonalkód nem egyezik egy ismert hellyel sem" @@ -8806,10 +9437,10 @@ msgstr "Sor adatok mutatása" msgid "Row Data" msgstr "Sor adat" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Bezárás" @@ -8882,122 +9513,122 @@ msgstr "Ár adatokkal együtt" msgid "Include part pricing data in exported BOM" msgstr "Ár adatok megjelenítése az exportált alkatrészjegyzékben" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "Helyettesítő alkatrész törlése" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "Válassz és adj hozzá új helyettesítő alkatrészt a lenti mezőben" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "Biztosan törölni akarod ezt a helyettesítő alkatrész hozzárendelést?" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "Helyettesítő alkatrész törlése" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "Helyettesítő hozzáadása" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "Alkatrészjegyzék tétel helyettesítők szerkesztése" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "Az összes kijelölt alkatrészjegyzék tétel törlésre kerül" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "Töröljük a kiválasztott alkatrészjegyzék tételeket?" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "Alkatrészjegyzék betöltése az al-gyártmányhoz" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "Vannak helyettesítők" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "Készletváltozatok engedélyezve" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "Helyettesítõk" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "Alkatrészjegyzék megtekintése" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "Alkatrészjegyzék árazása teljes" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "Alkatrészjegyzék árazása nem teljes" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "Nincsenek árak" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "Nincs szabad" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "Változatokkal és helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "Változatokkal együtt" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "Helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "Alkatrészjegyzék tétel jóváhagyása" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "Ez a sor jóvá lett hagyva" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "Helyettesítő alkatrészek szerkesztése" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "Alkatrészjegyzék tétel szerkesztése" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "Alkatrészjegyzék tétel törlése" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "Alkatrészjegyzék megtekintése" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "Nem találhatók alkatrészjegyzék tételek" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "Szükséges alkatrész" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "Örökölve a szülő alkatrészjegyzéktől" @@ -9041,13 +9672,13 @@ msgstr "Gyártási utasítás befejezetlen" msgid "Complete Build Order" msgstr "Gyártási utasítás befejezése" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "Következő szabad sorozatszám" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "Legutolsó sorozatszám" @@ -9083,35 +9714,35 @@ msgstr "Készlet felszabadítása a gyártási kimenetből" msgid "Complete build output" msgstr "Gyártási kimenet befejezése" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "Gyártási kimenet törlése" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "Biztosan szeretnéd a már lefoglalt készlet tételeket felszabadítani ebből a gyártási utasításból?" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "Készlet tételek felszabadítása" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "Gyártási kimenetek kiválasztása" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "Legalább egy gyártási kimenetet ki kell választani" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "Kimenet" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "Gyártási kimenetek befejezése" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "Gyártási kimenetek törlése" @@ -9123,541 +9754,558 @@ msgstr "Nincs gyártási utasításhoz történő foglalás" msgid "Location not specified" msgstr "Hely nincs megadva" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "Nem található aktív gyártási kimenet" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "Nincsenek követett alkatrészjegyzék tételek ehhez a gyártáshoz" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "Befejezett tesztek" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "Nincsenek szükséges tesztek ehhez a gyártáshoz" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "Foglalás szerkesztése" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "Foglalás törlése" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "Vannak helyettesítő alkatrészek" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "Szükséges/db" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "Nincs elegendő" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "Van elegendő" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "Gyártási készlet" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "Készlet rendelés" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "Kiválasztott alkatrészek" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "Legalább egy alkatrész választása szükséges a foglaláshoz" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "Minden alkatrész lefoglalva" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "Minden kiválasztott alkatrész teljesen lefoglalva" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "Válassz forrás helyet (vagy hagyd üresen ha bárhonnan)" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "Készlet foglalása a gyártási utasításhoz" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "Nincs egyező készlethely" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "Nincs egyező készlet" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "Automatikus készlet foglalás" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "A készlet automatikusan lefoglalásra kerül ehhez a gyártási utasításhoz, a következő feltételek szerint" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "Ha egy készlet hely meg van adva, akkor készlet csak arról a helyről lesz foglalva" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Ha a készlet helyettesíthetőnek minősül, akkor az első rendelkezésre álló helyről lesz lefoglalva" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Ha a helyettesítő készlet engedélyezve van, akkor ott az lesz használva ha az elsődleges alkatrésznek nincs készlete" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "Készlet tételek foglalása" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "Nincs a lekérdezéssel egyező gyártási utasítás" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "Kiválaszt" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "Gyártás késésben van" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "Haladás" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "Nincs felhasználói információ" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "csoport" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "Nincs lefoglalt alkatrész ehhez" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "Gyártó hozzáadása" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "Gyártói alkatrész hozzáadása" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "Gyártói alkatrész szerkesztése" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "Beszállító hozzáadása" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "Beszállítói alkatrész hozzáadása" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "Az összes kiválasztott beszállítói alkatrész törölve lesz" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "Beszállítói alkatrészek törlése" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "Új cég hozzáadása" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "Beszállított alkatrészek" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "Gyártott alkatrészek" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "Nem található céginformáció" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "Új névjegy létrehozása" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "Névjegy szerkesztése" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "A kiválasztott névjegyek törlésre kerülnek" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "Szerepkör" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "Névjegyek törlése" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "Nem található névjegy" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "Telefonszám" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "E-mail cím" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "Névjegy törlése" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "Az összes kijelölt gyártói alkatrész törlésre kerül" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "Gyártói alkatrészek törlése" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "Az összes kijelölt paraméter törlésre kerül" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Paraméterek törlése" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "Nincs gyártói alkatrész" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "Sablon alkatrész" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "Gyártmány alkatrész" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "Nem található paraméter" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "Paraméter szerkesztése" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "Paraméter törlése" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "Paraméter szerkesztése" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "Paraméter törlése" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "Nincs beszállítói alkatrész" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "Elérhetőség" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "Beszállítói alkatrész szerkesztése" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "Beszállítói alkatrész törlése" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "Ársáv törlése" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "Ársáv szerkesztése" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "Nincs ársáv információ" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "Utoljára módosítva" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "Ársáv szerkesztése" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "Ársáv törlése" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "igaz" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "hamis" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "Szűrők kiválasztása" -#: templates/js/translated/filters.js:292 -msgid "Download data" -msgstr "Adatok letöltése" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" +msgstr "Riport nyomtatása a kiválasztott tételekhez" -#: templates/js/translated/filters.js:295 -msgid "Reload data" -msgstr "Adatok frissítése" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" +msgstr "Címkék nyomtatása a kiválasztott tételekhez" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "Táblázat letöltése" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "Táblázat frissítése" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "Új szűrő hozzáadása" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "Összes szűrő törlése" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "Szűrő létrehozása" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "Művelet tiltva" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "Létrehozás nem engedélyezett" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "Módosítás nem engedélyezett" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "Törlés nem engedélyezett" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "Megtekintés nem engedélyezett" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "Form nyitva tartása" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "Adj meg egy érvényes számot" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Form hibák vannak" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "Nincs eredmény" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "Keresés" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "Bevitel törlése" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "Fájl oszlop" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "Mező név" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "Oszlopok kiválasztása" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "IGEN" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "NEM" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "Megjegyzések frissítve" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "Címkék nyomtatónak elküldve" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "Készlet tételek kiválasztása" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "Készlet tétel(eke)t ki kell választani a címkenyomtatás előtt" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "Nem található címke" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "Nem található címke a kiválasztott készlet tétel(ek)hez" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "Készlethely kiválasztása" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "Készlet hely(eke)t ki kell választani a címkenyomtatás előtt" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "Nem található címke a kiválasztott készlet hely(ek)hez" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "Alkatrész(eke)t ki kell választani a címkenyomtatás előtt" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "Nem található címke a kiválasztott alkatrész(ek)hez" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "Nyomtató kiválasztása" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "Exportálás PDF-be" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "kiválasztott készlet tételek" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "Címke sablon kiválasztása" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "Tételek kiválasztása" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "Nincs tétel kiválasztva a nyomtatáshoz" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "Nem található címke" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "Nem található címke sablon a kiválasztott tételekhez" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "Címkék nyomtatónak elküldve" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Mégsem" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Küldés" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "Form megnevezése" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "Várakozás a kiszolgálóra..." -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "Hibainformációk megjelenítése" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "Elfogadás" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "Adatok betöltése" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "Rossz válasz a kiszolgálótól" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "Űrlap adat hiányzik a kiszolgálótól kapott válaszban" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "Form adat küldési hiba" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "JSON válasz hiányzó form adatok" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "Error 400: Rossz kérelem" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "A kiszolgáló 400-as hibakódot adott vissza" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "Form adat lekérése sikertelen" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "Cég ID" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "Készlet ID" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "Rendelés ID" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "Szállítmány ID" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "Gyártói cikkszám" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "Nem találhatók hírek" @@ -9666,442 +10314,62 @@ msgstr "Nem találhatók hírek" msgid "Age" msgstr "Életkor" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "Értesítés" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "Megjelölés olvasatlanként" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "Megjelölés olvasottként" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "Nincs olvasatlan értesítés" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "Az értesítések itt fognak megjelenni" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" -msgstr "Ehhez a szállítmányhoz nincs készlet hozzárendelve" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" +msgstr "Egyéb tétel hozzáadása" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "A következő készlet tételek ki lesznek szállítva" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "Függő szállítmányok kiszállítása" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "Szállítmány megerősítése" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "Nincs függő szállítmány" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "A függő a szállítmányokhoz nincs készlet hozzárendelve" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "Kihagyás" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "Beszerzési rendelés befejezése" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "Rendelés befejezettnek jelölése?" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "Minden sortétel megérkezett" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem érkeztek be." - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "A rendelés befejezésével jelölésével annak adatai és sortételei a továbbiakban már nem lesznek szerkeszthetők." - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "Beszerzési rendelés törlése" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "Biztosan törölni szeretnéd ezt a beszerzési rendelést?" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "Ezt a beszerzési rendelést nem lehet törölni" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "Beszerzési rendelés kiküldése" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "A beszerzési rendelés kiküldése után annak sortételei a továbbiakban már nem lesznek szerkeszthetők." - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem teljesítettek." - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "Vevő rendelés törlése" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "A rendelés törlésével annak adatai a továbbiakban már nem lesznek szerkeszthetők." - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "Szállítmány létrehozása" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "Vevő hozzáadása" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "Vevői rendelés létrehozása" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "Válaszd ki a lemásolandó beszerzési rendelést" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "Sortételek másolása" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "Összes sortétel másolása a kiválasztott rendelésből" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "Egyéb tételek másolása" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "Összes egyéb tétel másolása a kiválasztott rendelésből" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Beszerzési rendelés szerkesztése" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "Másolási opciók" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "Rendelés exportálása" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "Legalább egy beszerezhető alkatrészt ki kell választani" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "Rendelendő mennyiség" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "Új beszállítói alkatrész" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "Új beszerzési rendelés" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "Hozzáadás beszerzési rendeléshez" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "Nincsenek egyező beszállítói alkatrészek" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "Nincsenek egyező beszerzési rendelések" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "Sortételek kiválasztása" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "Legalább egy sortételt ki kell választani" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "Batch kód hozzáadása" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "Sorozatszám hozzáadása" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "Beérkezett mennyiség" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "Érkező mennyiség" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "Készlet állapota" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Rendelési kód" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Megrendelve" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "Érkező mennyiség" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "Bevételezés megerősítése" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "Beszerzési rendelés tételeinek bevételezése" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "Nem található beszerzési rendelés" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "Rendelés késésben" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "Tételek" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "Sortétel másolása" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "Sortétel szerkesztése" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "Sortétel törlése" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "Nem találhatók sortételek" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "Összesen" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "Teljes mennyiség" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "Egységár" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Teljes ár" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "Ez a sortétel késésben van" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "Sortétel bevételezése" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "Sortétel másolása" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "Sortétel szerkesztése" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "Sortétel törlése" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "Sor másolása" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "Sor szerkesztése" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "Sor törlése" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "Sor másolása" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "Sor szerkesztése" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "Sor törlése" -#: templates/js/translated/order.js:2687 -msgid "No matching line" -msgstr "Nincs egyező sor" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" +msgstr "Nem találhatók sortételek" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "Nem található vevői rendelés" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" +msgstr "Sor másolása" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" -msgstr "Érvénytelen vevő" +#: templates/js/translated/order.js:345 +msgid "Edit line" +msgstr "Sor szerkesztése" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "Szállítmány szerkesztése" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "Szállítmány kiszállítása" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "Szállítmány törlése" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "Szállítmány szerkesztése" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "Szállítmány törlése" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "Nincs egyező szállímány" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "Szállítmány azonosító" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "Nincs kiszállítva" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "Nyomkövetés" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "Számla" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "Szállítmány hozzáadása" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Készlet foglalás megerősítése" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "Készlet foglalása a vevői rendeléshez" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "Nincs vevői rendeléshez történő foglalás" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "Készlet foglalások szerkesztése" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "Törlési művelet megerősítése" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "Készlet foglalások törlése" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "Vevőnek kiszállítva" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "Készlethely nincs megadva" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "Sorozatszámok kiosztása" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Készletrendelés" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Árszámítás" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "Nem törölhető mivel a tételek ki lettek szállítva" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "Nem törölhető mivel tételek vannak lefoglalva" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "Sorozatszámok kiosztása" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "Egységár módosítása" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "Nincs egyező sortétel" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" -msgstr "Nincsenek egyező sorok" +#: templates/js/translated/order.js:349 +msgid "Delete line" +msgstr "Sor törlése" #: templates/js/translated/part.js:56 msgid "Part Attributes" @@ -10119,302 +10387,311 @@ msgstr "Alkatrész másolási opciók" msgid "Add Part Category" msgstr "Alkatrész kategória hozzáadása" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "Kategória paraméterek másolása" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "Felsőbb szintű alkatrész kategória" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "Ikon (opcionális) - Az összes ikon felfedezése itt" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "Alkatrész kategória szerkesztése" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "Biztos hogy törölni szeretnéd ezt az alkatrész kategóriát?" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "Áthelyezés fentebbi kategóriába" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "Alkatrész kategória törlése" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "A kategóriában lévő alkatrészek kezelése" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "Alkategóriák kezelése" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "Alkatrész létrehozása" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "Új alkatrész létrehozása ez után" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "Alkatrész sikeresen létrehozva" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "Alkatrész szerkesztése" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "Alkatrész módosítva" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "Alkatrész változat létrehozása" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "Aktív alkatrész" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "Alkatrész nem törölhető mivel még aktív" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "Ezen alkatrész törlése nem vonható vissza" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "Ennek az alkatrésznek a teljes készlete törölve lesz" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "Ez az alkatrész minden alkatrészjegyzékből törölve lesz" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "Ehhez az alkatrészhez rendelt minden beszállítói és gyártói információ törölve lesz" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "Alkatrész törlése" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "Értesítések beállítva erre a tételre" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "Értesítések beállítva erre a tételre" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "Értesítések kérése erre a tételre" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "Értesítések letiltva erre a tételre" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "Az alkatrészjegyzék jóváhagyása minden sortételt jóvá fog hagyni" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "Alkatrészjegyzék jóváhagyása" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "Alkatrészjegyzék jóvá lett hagyva" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "Alkatrészjegyzék másolása" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "Alacsony készlet" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "Nincs szabad" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "Igény" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "Me" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "Követésre kötelezett alkatrész" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "Virtuális alkatrész" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "Értesítésre beállított alkatrész" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "Értékesíthető alkatrész" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" -msgstr "A készlet tétel mostanában nem volt ellenőrizve" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." +msgstr "Új leltár riport ütemezése." -#: templates/js/translated/part.js:744 -msgid "Update item" -msgstr "Tétel frissítése" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." +msgstr "Amint elkészül, az új leltár riport letölthető lesz." -#: templates/js/translated/part.js:745 -msgid "Delete item" -msgstr "Tétel törlése" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" +msgstr "Leltár riport létrehozása" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "Leltár riport beütemezve" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "Nincs elérhető leltár előzmény" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "Leltár bejegyzés szerkesztése" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "Leltár bejegyzés törlése" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Nincs több változat" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "Nem található beszerzési rendelés" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "Ez a sortétel késésben van" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "Sortétel bevételezése" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "Nincs alkatrész" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Nincs kategória" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "Nincs készlet" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "Gyártáshoz lefoglalva" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "Vevő rendeléshez lefoglalva" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Megjelenítés listaként" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Megjelenítés rácsnézetként" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "Kategória beállítása a kiválasztott alkatrészekhez" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "Alkatrész kategória beállítása" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "Alkatrész kategória kiválasztása" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "Kategória megadása kötelező" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Megjelenítés fában" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "Alkategóriák betöltése" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "Értesítésre beállított kategória" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "Nincs a lekérdezéssel egyező teszt sablon" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "Ez a teszt a szülő alkatrészhez lett felvéve" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "Teszt eredmény sablon szerkesztése" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "Teszt eredmény sablon törlése" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "Nincs megadva dátum" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "A megadott dátum a múltban van" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "Spekulatív" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "Az alkatrészhez nem áll rendelkezésre ütemezési információ" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "Hiba az alkatrész ütemezési információinak betöltésekor" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "Ütemezett készlet mennyiség" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "Minimum mennyiség" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "Minimális készlet" @@ -10422,835 +10699,1272 @@ msgstr "Minimális készlet" msgid "The Plugin was installed" msgstr "A plugin telepítve lett" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "Pénznem adatok lekérdezése sikertelen" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "Nincs alkatrészjegyzék infomáció" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "Nincs beszállítói árinfomáció" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "Nincsenek ársáv adatok" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "${human_name} szerkesztése" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "${human_name} törlése" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "Nincsenek beszerzési ár előzmények" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "Beszerzési ár előzmények" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "Nincsenek eladási ár előzmények" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "Eladási ár előzmények" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "Nincs alkatrészváltozat infomáció" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "Alkatrészváltozat" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "Válaszd ki a lemásolandó beszerzési rendelést" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "Sortételek másolása" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "Összes sortétel másolása a kiválasztott rendelésből" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "Egyéb tételek másolása" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "Összes egyéb tétel másolása a kiválasztott rendelésből" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "Beszerzési rendelés szerkesztése" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "Másolási opciók" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "Beszerzési rendelés befejezése" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "Rendelés befejezettnek jelölése?" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "Minden sortétel megérkezett" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem érkeztek be." + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "A rendelés befejezésével jelölésével annak adatai és sortételei a továbbiakban már nem lesznek szerkeszthetők." + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "Beszerzési rendelés törlése" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "Biztosan törölni szeretnéd ezt a beszerzési rendelést?" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "Ezt a beszerzési rendelést nem lehet törölni" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "A kiküldés után a sortételek már nem lesznek szerkeszthetők." + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "Beszerzési rendelés kiküldése" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "Legalább egy beszerezhető alkatrészt ki kell választani" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "Rendelendő mennyiség" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "Új beszállítói alkatrész" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "Új beszerzési rendelés" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "Hozzáadás beszerzési rendeléshez" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "Nincsenek egyező beszállítói alkatrészek" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "Nincsenek egyező beszerzési rendelések" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "Sortételek kiválasztása" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "Legalább egy sortételt ki kell választani" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "Beérkezett mennyiség" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "Érkező mennyiség" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "Készlet állapota" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "Vonalkód hozzáadása" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "Vonalkód eltávolítása" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "Add meg a helyet" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "Batch kód hozzáadása" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "Sorozatszám hozzáadása" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "Sorozatszámok" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "Rendelési kód" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "Érkező mennyiség" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "Bevételezés megerősítése" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "Beszerzési rendelés tételeinek bevételezése" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "Tétel vonalkód beolvasása" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "Beérkezett tétel vonalkódjának leolvasása (egyik meglévő készlet tétellel sem egyezhet)" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "Érvénytelen vonalkód adat" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "Rendelés késésben" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Tételek" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "Az összes kijelölt sortétel törlésre kerül" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "Töröljük a kiválasztott sortételeket?" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "Sortétel másolása" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "Sortétel szerkesztése" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "Sortétel törlése" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "Sortétel másolása" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "Sortétel szerkesztése" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "Sortétel törlése" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "kiválasztott tételek" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "Riport sablon kiválasztása" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "Teszt riport sablon kiválasztása" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "Készlet tétel(eke)t ki kell választani a riport nyomtatás előtt" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "Nem található riport" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" -msgstr "Nem található riport sablon a kiválasztott készlet tétel(ek)hez" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" +msgstr "Nem található riport sablon a kiválasztott tételekhez" -#: templates/js/translated/report.js:172 -msgid "Select Builds" -msgstr "Gyártások kiválasztása" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" +msgstr "Vevő hozzáadása" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" -msgstr "Gyártási utasítás(oka)t ki kell választani a riport nyomtatás előtt" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" +msgstr "Visszavételi utasítás létrehozása" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" -msgstr "Nem található riport sablon a kiválasztott gyártási utasítás(ok)hoz" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" +msgstr "Visszavételi utasítás szerkesztése" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" -msgstr "Alkatrész(eke)t ki kell választani a riport nyomtatás előtt" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" +msgstr "Visszavételi utasítás kiadása" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" -msgstr "Nem található riport sablon a kiválasztott alkatrész(ek)hez" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" +msgstr "Biztosan törölni szeretnéd ezt a visszavételi utasítást?" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" -msgstr "Beszerzési rendelések kiválasztása" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" +msgstr "Visszavételi utasítás törlése" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" -msgstr "Beszerzési megrendelés(eke)t ki kell választani a riport nyomtatás előtt" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" +msgstr "Visszavételi utasítás befejezése" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" -msgstr "Nem található riport sablon a kiválasztott megrendelés(ek)hez" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" +msgstr "Nem található visszavételi utasítás" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" -msgstr "Vevői rendelések kiválasztása" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "Érvénytelen vevő" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" -msgstr "Vevői rendelés(eke)t ki kell választani a riport nyomtatás előtt" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "Visszavételi utasítás tételeinek bevételezése" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "Nincs egyező sortétel" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "Tétel bevételezve" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "Vevői rendelés létrehozása" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "Vevői rendelés szerkesztése" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "Ehhez a szállítmányhoz nincs készlet hozzárendelve" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "A következő készlet tételek ki lesznek szállítva" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "Függő szállítmányok kiszállítása" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "Szállítmány megerősítése" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "Nincs függő szállítmány" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "A függő a szállítmányokhoz nincs készlet hozzárendelve" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "Függő szállítmányok kiszállítása" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "Kihagyás" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem teljesítettek." + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "Vissza lett igazolva ez a vevői rendelés?" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "Vevői rendelés visszaigazolása" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "Vevő rendelés törlése" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "A rendelés törlésével annak adatai a továbbiakban már nem lesznek szerkeszthetők." + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "Szállítmány létrehozása" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "Nem található vevői rendelés" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "Szállítmány szerkesztése" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "Szállítmány kiszállítása" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "Szállítmány törlése" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "Szállítmány szerkesztése" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "Szállítmány törlése" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "Nincs egyező szállímány" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "Szállítmány azonosító" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "Nincs kiszállítva" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "Nyomkövetés" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "Számla" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "Szállítmány hozzáadása" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Készlet foglalás megerősítése" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "Készlet foglalása a vevői rendeléshez" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "Nincs vevői rendeléshez történő foglalás" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "Készlet foglalások szerkesztése" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "Törlési művelet megerősítése" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "Készlet foglalások törlése" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "Vevőnek kiszállítva" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "Készlethely nincs megadva" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "Sorozatszámok kiosztása" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "Készletrendelés" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "Árszámítás" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "Nem törölhető mivel a tételek ki lettek szállítva" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "Nem törölhető mivel tételek vannak lefoglalva" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "Sorozatszámok kiosztása" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "Egységár módosítása" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "Nincs találat" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "Add meg a keresési lekérdezést" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "eredmény" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "eredmények" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "Eredmények összezárása" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "Eredmények eltávolítása" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "Készlet tétel sorszámozása" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "Készlet sorozatszámozás megerősítése" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "Felsőbb szintű készlet hely" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "Készlet hely szerkesztése" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "Új készlet hely" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "Biztosan törölni szeretnéd ezt a készlet helyet?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "Szülő készlet helyre mozgatás" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "Készlethely törlése" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "Műveletek az ezen a helyen lévő tételekhez" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "Műveletek az al-helyekhez" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "Ezt az alkatrészt nem lehet sorozatszámozni" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "Add meg a kezdeti mennyiséget ehhez a készlet tételhez" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Add meg az új készlet tételhez tartozó sorozatszámokat (vagy hagyd üresen)" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "Készlet tétel lemásolva" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "Készlet tétel másolása" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "Biztosan törölni szeretnéd ezt a készlet tételt?" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "Készlet tétel törlése" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "Készlet tétel szerkesztése" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "Készlet tétel létrehozva" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "Több készlet tétel létre lett hozva" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "Sorozatszám keresése" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "Sorozatszám megadása" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "Adj meg egy sorozatszámot" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "Nincs egyező sorozatszám" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "Több egyező eredmény is van" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "Készlet hozzárendelés jóváhagyása" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "Készlet vevőhöz rendelése" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "Figyelem: az összevonási művelet nem vonható vissza" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "Némi információ elveszik a készlet összevonás során" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "A készlettörténet törölve lesz az összevont tételeknél" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "A beszállítói alkatrész információk törlődnek az összevont tételeknél" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "Készlet összevonás megerősítése" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "Készlet tételek összevonása" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "Készlet áthelyezése" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "Áthelyezés" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "Leltározás" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "Mennyiség" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "Készlet csökkentése" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "Kivesz" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "Készlet növelése" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "Hozzáad" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség nem módosítható" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "Készlet mennyiség megadása" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "Készlet tételek kiválasztása" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "Ki kell választanod legalább egy rendelkezésre álló készlet tételt" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "Készlet módosítás jóváhagyása" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "SIKER" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "SIKERTELEN" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "NINCS EREDMÉNY" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "Teszt sikeres" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "Teszt eredmény hozzáadása" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "Nincs teszt eredmény" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "Teszt dátuma" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "Gyártásban" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "Beépítve készlet tételbe" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "Vevő rendeléshez hozzárendelve" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "Nincs hely megadva" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "Készlet tétel gyártás alatt" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "Egyedi követésre kötelezett készlet tétel lefoglalva" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "Készlet tétel teljes egészében lefoglalva" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "Készlet tétel részben lefoglalva" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "Készlet tétel beépítve egy másikba" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "Készlet tétel lejárt" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "Készlet tétel hamarosan lejár" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "Készlet tétel elutasítva" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "Készlet tétel elveszett" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "Készlet tétel megsemmisült" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "Kimerült" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "Beszállítói alkatrész nincs megadva" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "Készletérték" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "Nincs a lekérdezésnek megfelelő készlet tétel" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "Készlet állapot beállítása" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "Státuszkód kiválasztása" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "Státuszkódot ki kell választani" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "Alhelyek betöltése" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "Részletek" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "Alkatrész információ nem áll rendelkezésre" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "A hely már nem létezik" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "Beszerzési megrendelés már nem létezik" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "Vevői megrendelés már nem létezik" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "Visszavételi utasítás már nem létezik" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "Vevő már nem létezik" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "A készlet tétel már nem létezik" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "Hozzáadva" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "Eltávolítva" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "Nincsenek beépített tételek" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "Készlet tétel kiszedése" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "Válaszd ki a kiszedni való készlet tételt" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "Másik tétel beépítése ebbe a készlet tételbe" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "Készlet tételek csak akkor építhetők be ha teljesítik a következő kritériumokat" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "A készlet tétel egy olyan alkatrészre mutat ami alkatrészjegyzéke ennek a készlet tételnek" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "A készlet tétel jelenleg elérhető készleten" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "A készlet tétel még nem épült be egy másik tételbe" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "A készlet tétel követett vagy sorozatszámmal vagy batch kóddal" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "Válaszd ki a beépítendő alkatrészt" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "Követésre kötelezett" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "Gyártmány alkatrész" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "Van elérhető készlete" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "Jóváhagyva" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "Készlet változatok engedélyezése" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "Van árazás" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "Alhelyekkel együtt" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "Helyekkel együtt" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "Alkategóriákkal együtt" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "Értesítés beállítva" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "Sorozatszámos" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "Sorozatszám >=" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "Sorozatszám nagyobb vagy egyenlő mint" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "Sorozatszám <=" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "Sorozatszám kisebb vagy egyenlő mint" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "Sorozatszám" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Batch kód" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "Aktív alkatrész" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "Aktív alkatrészek készletének megjelenítése" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "Az alkatrész egy gyártmány" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "Lefoglalt" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "Az tétel lefoglalásra került" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "Felhasználható készlet" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "Alhelyeken lévő készlettel együtt" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "Kimerült készlet tételek megjelenítése" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "Készleten lévő tételek megjelenítése" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "Gyártásban" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "Gyártásban lévő tételek megjelenítése" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "Változatokkal együtt" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "Alkatrészváltozatok készletével együtt" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "Beépítve" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "Másik tételbe beépült tételek mutatása" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "Készlet tételek melyek hozzá vannak rendelve egy vevőhöz" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "Készlet állapota" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "Van batch kódja" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "Követett" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "Követett készlet tétel sorozatszámmal vagy batch kóddal" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "Van beszerzési ára" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "Beszerzési árral rendelkező készlet tételek megjelenítése" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "Lejárat előtt" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "Lejárat után" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "Lejárt készlet tételek megjelenítése" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "Hamarosan lejáró készlet tételek megjelenítése" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "Teszten megfelelt" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "Beépített tételekkel együtt" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "Gyártási állapot" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "Hozzám rendelt" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "Rendelés állapota" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "Kintlévő" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "Hozzám rendelt" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "Követésre kötelezett" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "Gyártmány alkatrész" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "Van elérhető készlete" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "Készlet változatok engedélyezése" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "Van árazás" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "Alhelyekkel együtt" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "Helyekkel együtt" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "Alkategóriákkal együtt" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "Értesítés beállítva" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "Sorozatszámos" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "Sorozatszám >=" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "Sorozatszám nagyobb vagy egyenlő mint" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "Sorozatszám <=" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "Sorozatszám kisebb vagy egyenlő mint" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "Sorozatszám" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "Batch kód" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "Aktív alkatrész" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "Aktív alkatrészek készletének megjelenítése" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "Az alkatrész egy gyártmány" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "Lefoglalt" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "Az tétel lefoglalásra került" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "Felhasználható készlet" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "Alhelyeken lévő készlettel együtt" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "Kimerült készlet tételek megjelenítése" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "Készleten lévő tételek megjelenítése" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "Gyártásban" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "Gyártásban lévő tételek megjelenítése" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "Változatokkal együtt" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "Alkatrészváltozatok készletével együtt" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "Beépítve" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "Másik tételbe beépült tételek mutatása" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "Készlet tételek melyek hozzá vannak rendelve egy vevőhöz" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "Készlet állapota" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "Van batch kódja" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "Követett" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "Követett készlet tétel sorozatszámmal vagy batch kóddal" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "Van beszerzési ára" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "Beszerzési árral rendelkező készlet tételek megjelenítése" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "Lejárat előtt" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "Lejárat után" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "Lejárt készlet tételek megjelenítése" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "Hamarosan lejáró készlet tételek megjelenítése" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "Teszten megfelelt" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "Beépített tételekkel együtt" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "Gyártási állapot" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "Alkategóriákkal együtt" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "Aktív alkatrészek megjelenítése" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "Elérhető" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "Van IPN-je" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "Van belső cikkszáma" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "Készleten" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "Beszerezhető" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "Volt leltár" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Naptár nézet megjelenítése" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Lista nézet megjenítése" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "Fa nézet megjelenítése" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "Sorok kinyitása" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "Sorok becsukása" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "Táblázat exportálása" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "Fájlfomátum kiválasztása" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "Adatok betöltése" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "sor oldalanként" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "Összes sor mutatása" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Látható" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "-" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "a" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "sorból," -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Keresés" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Nincs egyező eredmény" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "Lapozó elrejtése/megjelenítése" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "Átváltás" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Oszlopok" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "Összes" @@ -11262,19 +11976,19 @@ msgstr "Beszerzés" msgid "Sell" msgstr "Értékesítés" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "Értesítések megjelenítése" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "Új értesítések" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "Admin" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Kijelentkezés" @@ -11286,10 +12000,6 @@ msgstr "Mentés" msgid "Show all notifications and history" msgstr "Összes értesítés és előzmény megjelenítése" -#: templates/price_data.html:7 -msgid "No data" -msgstr "Nincs adat" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Nincs QR kód adat megadva" @@ -11310,18 +12020,10 @@ msgstr "Teljes találatok megjelenítése" msgid "Clear search" msgstr "Keresőmező törlése" -#: templates/search.html:16 -msgid "Filter results" -msgstr "Eredmények szűrése" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "Keresés menü bezárása" -#: templates/search.html:35 -msgid "No search results" -msgstr "Nincs találat" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "Közösségi háló bejelentkezési hiba" @@ -11368,10 +12070,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "A %(provider_name)s felhasználói fiókodat fogod használni a %(site_name)s belépéshez.
Kérlek töltsd ki az alábbi adatokat:" -#: templates/stats.html:9 -msgid "Server" -msgstr "Kiszolgáló" - #: templates/stats.html:13 msgid "Instance Name" msgstr "Példány neve" @@ -11436,55 +12134,51 @@ msgstr "Email beállítások hiányoznak" msgid "Barcode Actions" msgstr "Vonalkód műveletek" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Teszt riportok nyomtatása" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "Készlet opciók" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "Kiválasztott tételek mennyiségének növelése" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "Kiválasztott tételek mennyiségének csökkentése" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "Kiválasztott készlet tételek leltározása" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "Kiválasztott tételek áthelyezése" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "Kiválasztott tételek összevonása" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "Készlet összevonása" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Kiválasztott tételek megrendelése" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "Állapot módosítása" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "Készlet állapot módosítása" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "Kiválasztott tételek törlése" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "Készlet törlése" @@ -11504,51 +12198,51 @@ msgstr "Felhasználók" msgid "Select which users are assigned to this group" msgstr "Válaszd ki mely felhasználók tartoznak ehhez a csoporthoz" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "A kövekező felhasználók több csoportnak is tagjai:" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "Személyes adatok" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Jogosultságok" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "Fontos dátumok" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Jogosultságok" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Csoport" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Nézet" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Jogosultság tételek megtekintéséhez" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Jogosultság tételek hozzáadásához" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Módosítás" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Jogosultság tételek szerkesztéséhez" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Jogosultság tételek törléséhez" diff --git a/InvenTree/locale/id/LC_MESSAGES/django.po b/InvenTree/locale/id/LC_MESSAGES/django.po index 293de461c7..b188415ca3 100644 --- a/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -29,23 +33,26 @@ msgstr "" msgid "Enter date" msgstr "Masukkan tanggal" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Catatan" @@ -58,23 +65,23 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Masukkan sandi" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Masukkan kata sandi baru" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Konfirmasikan kata sandi" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Konfirmasi sandi baru" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Kata sandi lama" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Nomor seri kosong" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Jangkauan grup tidak valid: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Urutan grup tidak valid: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "File tidak ditemukan" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Lampiran" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Pilih file untuk dilampirkan" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Tautan" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Komentar" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Komentar file" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Pengguna" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "tanggal diunggah" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Nama file tidak boleh kosong" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Direktori lampiran tidak valid" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Nama file mengandung karakter yang tidak diperkenankan '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Nama file tidak memiliki ekstensi" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Lampiran dengan nama file ini sudah ada" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Kesalahan merubah nama file" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Keterangan" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "induk" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Direktori" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Data Barcode" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Data barcode pihak ketiga" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Barcode Hash" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Hash unik data barcode" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Nama File" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "File data" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Pilih file untuk diunggah" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Jenis file tidak didukung" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Ukuran file terlalu besar" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Tidak ditemukan kolom dalam file" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Tidak ditemukan barisan data dalam file" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Tidak ada barisan data tersedia" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Tidak ada kolom data tersedia" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Kolom yang diperlukan kurang: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Kolom duplikat: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Ceko" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Denmark" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Jerman" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Yunani" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Inggris" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spanyol" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spanyol (Meksiko)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Persia" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Perancis" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Ibrani" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Hungaria" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Itali" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Jepang" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Korea" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Belanda" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norwegia" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polandia" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugis" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugis (Brasil)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Rusia" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Swedia" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thai" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turki" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnam" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Cina" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Diletakkan" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Selesai" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Dibatalkan" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Hilang" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Dikembalikan" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Dikirim" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Butuh perhatian" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Rusak" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Hancur" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Ditolak" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Item stok dibuat" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Item stok diubah" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Nomor seri yang ditetapkan" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Stok terhitung" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Stok yang ditambahkan manual" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Stok yang dikurangi manual" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Lokasi berubah" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Dirakit ke" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Diambil dari" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Komponen terpasang" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Komponen terlepas" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Dipisah dari item induk" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Pisah item dari barang induk" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Stok item digabungkan" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Dikonversi ke variasi" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Terkirim ke pelanggan" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Dikembalikan pelanggan" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Output order produksi dibuat" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Order output produksi selesai" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Terpakai oleh order produksi" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Diterima dari order pembelian" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Produksi" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN harus sesuai dengan pola regex {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Nilai kelebihan tidak boleh negatif" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Kelebihan tidak boleh melebihi 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Nilai kelebihan tidak valid" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Ubah Informasi User" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Atur Kata Sandi" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Bidang kata sandi tidak cocok" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Kata sandi yang salah" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Informasi Sistem" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Tentang InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Pilihan produksi induk tidak valid" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Pilihan produksi induk tidak valid" msgid "Build Order" msgstr "Order Produksi" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Pilihan produksi induk tidak valid" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referensi" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Deskripsi singkat produksi" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Produksi Induk" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Produksi induk dari produksi ini" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Bagian" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Order penjualan yang teralokasikan ke pesanan ini" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Pengguna yang bertanggung jawab atas order ini" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Catatan tambahan produksi" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Item stok yang dipilih tidak ditemukan dalam daftar barang order" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Produksi" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Jumlah harus angka bulat karena terdapat bagian yang dapat dilacak dalam daftar barang" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Lokasi" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Status" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Terima bahwa jumlah hasil produksi yang diperlukan belum selesai" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Hasil produksi tidak dapat ditentukan untuk alokasi barang yang tidak terlacak" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Stok item ini telah dialokasikan ke hasil produksi ini" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokasi stok, dari mana bahan/bagian akan diambilkan (kosongkan untuk mengambil dari lokasi mana pun)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Cetak aksi" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Cetak laporan order produksi" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Aksi produksi" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Ubah Produksi" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Batalkan Produksi" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Hapus Produksi" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Selesaikan Produksi" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Deskripsi Produksi" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Tidak ada hasil pesanan yang dibuat oleh pesanan ini" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN harus sesuai dengan pola regex {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Konfirmasi" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po index f63a46c900..6ca5e83848 100644 --- a/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministrazione" @@ -29,23 +33,26 @@ msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministra msgid "Enter date" msgstr "Inserisci la data" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Note" @@ -58,23 +65,23 @@ msgstr "Il valore '{name}' non è nel formato del pattern" msgid "Provided value does not match required pattern: " msgstr "Il valore fornito non corrisponde al modello richiesto: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Inserire la password" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Inserire una nuova password" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Conferma la password" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Conferma la nuova password" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Vecchia password" @@ -98,95 +105,95 @@ msgstr "L'indirizzo email principale fornito non è valido." msgid "The provided email domain is not approved." msgstr "L'indirizzo di posta elettronica fornito non è approvato." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Seriale Duplicato" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Range gruppo: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "L'intervallo {g} supera la quantità consentita ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Sequenza gruppo non valida: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Il numero dei numeri seriali univoci ({s}) deve essere uguale alla quantità ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Rimuovi i tag HTML da questo valore" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Schema formattato impropriamente" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Formato chiave sconosciuta" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Formato chiave mancante" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Il campo di riferimento non può essere vuoto" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Il campo deve corrispondere al modello richiesto" @@ -194,566 +201,615 @@ msgstr "Il campo deve corrispondere al modello richiesto" msgid "Reference number is too large" msgstr "Numero di riferimento troppo grande" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "File mancante" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Link esterno mancante" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Allegato" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Seleziona file da allegare" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Collegamento" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link a URL esterno" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Commento" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Commento del file" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Utente" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "data caricamento" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Il nome del file non deve essere vuoto" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Directory allegati non valida" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Il nome del file contiene caratteri non validi '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Nome file estensione mancante" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Esiste già un allegato con questo nome di file" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Errore nella rinominazione del file" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Descrizione" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "genitore" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Percorso" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Dati del Codice a Barre" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Dati Codice a Barre applicazioni di terze parti" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Codice a Barre" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Codice univoco del codice a barre" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Valuta" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Selezionare la valuta dalle opzioni disponibili" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Nome del file" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "File dati" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Seleziona un file per il caricamento" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Formato file non supportato" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "File troppo grande" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Nessun colonna trovata nel file" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Nessuna riga di dati trovata nel file" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Nessun dato fornito" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Nessuna colonna di dati fornita" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Colonna richiesta mancante: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Colonna duplicata: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Ceco" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Danese" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Tedesco" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Greco" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Inglese" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spagnolo" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spagnolo (Messicano)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Persiano" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francese" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Ebraico" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Ungherese" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Giapponese" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Olandese" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norvegese" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polacco" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portoghese" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portoghese (Brasile)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Russo" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Sloveno" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Svedese" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thailandese" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turco" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Cinese" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Controllo in background non riuscito" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Server di posta non configurato" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Controlli di sistema InvenTree falliti" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "In attesa" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Inviato" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Completo" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Annullato" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Perso" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Reso" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Spedito" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Attenzione necessaria" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Danneggiato" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Distrutto" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Respinto" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "In quarantena" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Voce di tracciamento stock preesistente" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Elemento stock creato" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Elemento stock modificato" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Numero di serie assegnato" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Stock contato" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Stock aggiunto manualmente" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Stock rimosso manualmente" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Posizione cambiata" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Installato nell'assemblaggio" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Rimosso dall'assemblaggio" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Componente installato" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Elemento componente rimosso" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Diviso dall'elemento genitore" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Dividi elemento figlio" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Elemento stock raggruppato" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Convertito in variante" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Inviato al cliente" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Restituito dal cliente" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Genera l'output dell'ordine creato" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Build order output completato" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Impegnato dall'ordine di costruzione" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Ricevuto contro l'ordine di acquisto" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Produzione" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN deve corrispondere al modello regex {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Il sovra-valore non può essere negativo" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "L'eccesso non deve superare il 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Valore non valido per eccedenza" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Modifica informazioni utente" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Imposta Password" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Le password devono coincidere" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Password inserita non corretta" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Informazioni sistema" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Informazioni Su InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Scelta non valida per la produzione genitore" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Scelta non valida per la produzione genitore" msgid "Build Order" msgstr "Ordine di Produzione" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Scelta non valida per la produzione genitore" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Riferimento" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Breve descrizione della produzione" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Produzione Genitore" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Articolo" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data di completamento della produzione. Dopo tale data la produzione sarà in ritardo." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "Completato da" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Utente responsabile di questo ordine di generazione" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Note aggiuntive" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'elemento di compilazione deve specificare un output poiché la parte principale è contrassegnata come rintracciabile" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Articolo in giacenza selezionato non trovato nel BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Produzione" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Costruisci per allocare gli articoli" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Quantità" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Installa in" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantità totale richiesta, poiché la fattura dei materiali contiene articoli rintracciabili" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Posizione" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Stato" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completa l'output se le scorte non sono state interamente assegnate" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "Rimuovi Giacenze Allocate" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "Detrai qualsiasi scorta che è stata già assegnata a questa produzione" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Come si desidera gestire gli elementi extra giacenza assegnati all'ordine di produzione" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accetta che gli elementi in giacenza non sono stati completamente assegnati a questo ordine di produzione" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accetta che il numero richiesto di output di produzione non sia stato completato" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "L'output di produzione deve essere specificato per l'ubicazione delle parti tracciate" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "L'output di produzione non deve essere specificato per l'ubicazione delle parti non tracciate" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Questa giacenza di magazzino è già stato assegnato a questa produzione" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Posizione dello stock in cui le parti devono prelevate (lasciare vuoto per prelevare da qualsiasi luogo)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Gli elementi in magazzino in più sedi possono essere utilizzati in modo intercambiabile" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Azioni Barcode" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "Mostra QR Code" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "Scollega Codice a Barre" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "Collega Codice a Barre" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Azioni di stampa" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Stampa report ordine di produzione" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Azioni Produzione" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Modica Produzione" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Annulla Produzione" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "Duplica Produzione" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Elimina Produzione" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Completa Produzione" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Descrizione Produzione" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Nessun output di produzione è stato creato per questo ordine di produzione" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Questo ordine di produzione è assegnato all'ordine di vendita %(link)s" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Questo ordine di produzione è subordinato dell'ordine di produzione %(link)s" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "L'ordine di produzione è pronto per essere contrassegnato come completato" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "L'ordine di produzione non può essere completato poiché gli output rimangono in sospeso" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Lo stock non è stato completamente assegnato a questo ordine di produzione" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Data scadenza" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Questa produzione era in scadenza il %(target)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "In ritardo" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Completato" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Ordini di Vendita" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Inviato da" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "Priorità" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Elimina Ordine Build" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Dettagli della Produzione" @@ -1497,8 +1652,8 @@ msgstr "Risorse di magazzino" msgid "Stock can be taken from any available location." msgstr "Lo stock può essere prelevato da qualsiasi posizione disponibile." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Destinazione" @@ -1510,21 +1665,23 @@ msgstr "Posizione di destinazione non specificata" msgid "Allocated Parts" msgstr "Articoli Assegnati" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Lotto" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Creato" @@ -1544,7 +1701,7 @@ msgstr "Ordine di Produzione Subordinato" msgid "Allocate Stock to Build" msgstr "Assegna Scorte alla Produzione" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Scorte Non Assegnate" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Ordina articoli richiesti" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Ordine Articoli" @@ -1627,52 +1785,42 @@ msgstr "Cancella la produzione selezionata" msgid "Delete outputs" msgstr "Cancella l'output" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Azioni di stampa" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Stampa etichette" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Produzioni Completate" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Allegati" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Genera Note" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "Assegnazione Completa" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "Tutte le giacenze non tracciate sono state assegnate" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Nuovo Ordine di Produzione" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Stampa gli Ordini di Produzione" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "Dettagli Ordine di Produzione" @@ -1685,23 +1833,24 @@ msgstr "Output Incompleti" msgid "Completed Outputs" msgstr "Outputs Completati" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Formato file non supportato: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Errore nella lettura del file (codifica non valida)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Errore nella lettura del file (formato non valido)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Errore nella lettura del file (dimensione errata)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Errore di lettura del file (i dati potrebbero essere danneggiati)" @@ -1722,1307 +1871,1427 @@ msgstr "{name.title()} File" msgid "Select {name} file to upload" msgstr "Seleziona il file {name} da caricare" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "Aggiornato" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "Orario dell'ultimo aggiornamento" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Nessun gruppo" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "Un dominio vuoto non è consentito." -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Nome dominio non valido: {domain}" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Nome azienda" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "URL Base" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "Selezionare la valuta di base per i calcoli dei prezzi" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Consenti di sovrascrivere l'user-agent utilizzato per scaricare immagini e file da URL esterno (lasciare vuoto per il predefinito)" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "Richiesta conferma" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "Richiede una conferma esplicita dell'utente per una determinata azione." -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "Profondità livelli" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondità predefinita per la visualizzazione ad albero. I livelli più in alto possono essere caricati più lentamente quando necessari." -#: common/models.py:966 -msgid "Automatic Backup" -msgstr "Backup automatico" - -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" -msgstr "Abilita il backup automatico di database e file multimediali" - -#: common/models.py:973 -msgid "Days Between Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:974 -msgid "Specify number of days between automated backup events" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "Cancella le vecchie sessioni" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "I risultati delle attività in background verranno eliminati dopo un determinato numero di giorni" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "Elimina Log Degli Errori" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "I log di errore verranno eliminati dopo il numero specificato di giorni" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "Cancella Notifiche" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "Le notifiche dell'utente verranno eliminate dopo il numero di giorni specificato" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Supporto Codice A Barre" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Abilita supporto scanner codici a barre" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "Codice a barre inserito scaduto" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "Tempo di ritardo di elaborazione codice a barre" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "Codice a Barre Supporto Webcam" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "IPN Regex" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Consenti duplicati IPN" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Permetti a più articoli di condividere lo stesso IPN" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Permetti modifiche al part number interno (IPN)" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Copia I Dati Della distinta base dell'articolo" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Copia I Dati Parametro dell'articolo" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Copia i dati dei parametri di default quando si duplica un articolo" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Copia I Dati dell'Articolo Test" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Copia i dati di prova di default quando si duplica un articolo" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Copia Template Parametri Categoria" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Modello" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Gli articoli sono modelli per impostazione predefinita" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Assemblaggio" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Componente" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Acquistabile" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Gli articoli sono acquistabili per impostazione predefinita" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Vendibile" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Gli articoli sono acquistabili per impostazione predefinita" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Tracciabile" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Gli articoli sono tracciabili per impostazione predefinita" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtuale" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Gli articoli sono virtuali per impostazione predefinita" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Mostra l'importazione nelle viste" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Mostra articoli correlati" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Visualizza parti correlate per ogni articolo" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "Dati iniziali dello stock" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "Consentire la creazione di uno stock iniziale quando si aggiunge una nuova parte" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "Dati iniziali del fornitore" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "Consentire la creazione dei dati iniziali del fornitore quando si aggiunge una nuova parte" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Formato di visualizzazione del nome articolo" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Formato per visualizzare il nome dell'articolo" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "Icona predefinita Categoria Articolo" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "Prezzi Decimali" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "Numero di cifre decimali da visualizzare quando si visualizzano i dati dei prezzi" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "Usa Prezzi Fornitore" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "Ignora la Cronologia Acquisti" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "Cronologia dei prezzi dell'ordine di acquisto del fornitore superati con discontinuità di prezzo" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "Utilizzare i prezzi degli articoli in stock" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "Utilizzare i prezzi dei dati di magazzino inseriti manualmente per il calcolo dei prezzi" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "Età dei prezzi degli articoli in stock" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "Escludere dal calcolo dei prezzi gli articoli in giacenza più vecchi di questo numero di giorni" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "Utilizza Variazione di Prezzo" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "Solo Varianti Attive" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "Tempo di Riproduzione Prezzi" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "giorni" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "Backup automatico" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "Abilita il backup automatico di database e file multimediali" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "I risultati delle attività in background verranno eliminati dopo un determinato numero di giorni" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "I log di errore verranno eliminati dopo il numero specificato di giorni" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "Le notifiche dell'utente verranno eliminate dopo il numero di giorni specificato" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Supporto Codice A Barre" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Abilita supporto scanner codici a barre" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "Codice a barre inserito scaduto" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "Tempo di ritardo di elaborazione codice a barre" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "Codice a Barre Supporto Webcam" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "IPN Regex" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Consenti duplicati IPN" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Permetti a più articoli di condividere lo stesso IPN" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Permetti modifiche al part number interno (IPN)" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Copia I Dati Della distinta base dell'articolo" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Copia I Dati Parametro dell'articolo" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Copia i dati dei parametri di default quando si duplica un articolo" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Copia I Dati dell'Articolo Test" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Copia i dati di prova di default quando si duplica un articolo" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Copia Template Parametri Categoria" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Modello" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Gli articoli sono modelli per impostazione predefinita" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Assemblaggio" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Componente" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Acquistabile" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Gli articoli sono acquistabili per impostazione predefinita" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Vendibile" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Gli articoli sono acquistabili per impostazione predefinita" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Tracciabile" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Gli articoli sono tracciabili per impostazione predefinita" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtuale" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Gli articoli sono virtuali per impostazione predefinita" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Mostra l'importazione nelle viste" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Mostra articoli correlati" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Visualizza parti correlate per ogni articolo" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "Dati iniziali dello stock" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "Consentire la creazione di uno stock iniziale quando si aggiunge una nuova parte" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "Dati iniziali del fornitore" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "Consentire la creazione dei dati iniziali del fornitore quando si aggiunge una nuova parte" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Formato di visualizzazione del nome articolo" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Formato per visualizzare il nome dell'articolo" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "Icona predefinita Categoria Articolo" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "Usa Prezzi Fornitore" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "Ignora la Cronologia Acquisti" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "Cronologia dei prezzi dell'ordine di acquisto del fornitore superati con discontinuità di prezzo" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "Utilizzare i prezzi degli articoli in stock" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "Utilizzare i prezzi dei dati di magazzino inseriti manualmente per il calcolo dei prezzi" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "Età dei prezzi degli articoli in stock" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "Escludere dal calcolo dei prezzi gli articoli in giacenza più vecchi di questo numero di giorni" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "Utilizza Variazione di Prezzo" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "Solo Varianti Attive" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "Se disponibile, i prezzi interni sostituiscono i calcoli della fascia di prezzo" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Risoluzione DPI quando si generano file di immagine da fornire ai plugin di stampa per etichette" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "Abilita Rapporto di Prova" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "Abilita generazione di stampe di prova" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "Allega Rapporto di Prova" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Quando si stampa un rapporto di prova, allegare una copia del rapporto di prova all'elemento di magazzino associato" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "I numeri di serie per gli articoli di magazzino devono essere univoci" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "Auto Riempimento Numeri Seriali" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "Auto riempimento numeri nel modulo" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "Determina il comportamento predefinito quando un elemento stock è esaurito" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "Modello per la generazione di codici batch predefiniti per gli elementi stock" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di vendita dopo che sono stati spediti o completati" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di acquisto dopo che sono stati spediti o completati" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Abilita l'auto-registrazione tramite SSO per gli utenti nelle pagine di accesso" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "Email richiesta" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "Posta due volte" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "Al momento della registrazione chiedere due volte all'utente l'indirizzo di posta elettronica" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "Password due volte" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Al momento della registrazione chiedere agli utenti due volte l'inserimento della password" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "Limita la registrazione a determinati domini (separati da virgola, che cominciano con @)" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "Gruppo a cui i nuovi utenti vengono assegnati al momento della registrazione" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controlla che tutti i plugin siano installati all'avvio - abilita in ambienti contenitore" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "Controlla le firme del plugin" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "Controlla e mostra le firme per i plugin" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "Funzionalità Dell'Inventario" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "Abilita la funzionalità d'inventario per la registrazione dei livelli di magazzino e il calcolo del valore di magazzino" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "Inventario periodico automatico" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "Numero di giorni tra la registrazione automatica dell'inventario (imposta 0 per disabilitare)" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "I rapporti d'inventario verranno eliminati dopo il numero specificato di giorni" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "Nessuna stampante (Esporta in PDF)" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "Mostra articoli sottoscritti" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "Mostra gli articoli sottoscritti nella homepage" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Mostra gli ultimi articoli sulla homepage" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "Conteggio Ultimi Articoli" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "Numero di articoli da visualizzare sulla pagina indice" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "Mostra distinta base non convalidata" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "Mostra le distinte base che attendono la convalida sulla homepage" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Mostra le modifiche recenti alle giacenze" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Mostra le giacenze modificate di recente nella homepage" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "Recente Conteggio Giacenze" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "Numero di giacenze recenti da visualizzare sulla pagina indice" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Mostra disponibilità scarsa delle giacenze" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Mostra disponibilità scarsa degli articoli sulla homepage" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Mostra scorte esaurite" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Mostra disponibilità scarsa delle scorte degli articoli sulla homepage" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Mostra scorte necessarie" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Mostra le scorte degli articoli necessari per la produzione sulla homepage" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Mostra scorte esaurite" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Mostra gli articoli stock scaduti nella home page" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "Mostra scorte obsolete" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "Mostra gli elementi obsoleti esistenti sulla home page" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "Mostra produzioni in attesa" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "Mostra produzioni in attesa sulla homepage" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "Mostra produzioni in ritardo" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "Mostra produzioni in ritardo sulla home page" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "Mostra ordini di produzione inevasi" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "Mostra ordini di produzione inevasi sulla home page" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "Mostra Ordini di Produzione in ritardo" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "Mostra Ordini di Produzione in ritardo sulla home page" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "Mostra Ordini di Vendita inevasi" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "Mostra Ordini di Vendita inevasi sulla home page" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "Mostra Ordini di Vendita in ritardo" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "Mostra Ordini di Vendita in ritardo sulla home page" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "Mostra Notizie" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "Mostra notizie sulla home page" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "Stampante per etichette predefinita" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "Configura quale stampante di etichette deve essere selezionata per impostazione predefinita" + +#: common/models.py:1857 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "Cerca Articoli" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "Mostra articoli della ricerca nella finestra di anteprima" -#: common/models.py:1750 -msgid "Seach Supplier Parts" -msgstr "Trova Articoli del Fornitore" +#: common/models.py:1871 +msgid "Search Supplier Parts" +msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "Mostra articoli del fornitore nella finestra di anteprima" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "Cerca Articoli Produttore" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "Mostra articoli del produttore nella finestra di anteprima" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "Escludi articoli inattivi dalla finestra di anteprima della ricerca" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "Cerca Categorie" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "Mostra categorie articolo nella finestra di anteprima di ricerca" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "Cerca Giacenze" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "Mostra articoli in giacenza nella finestra di anteprima della ricerca" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "Nascondi elementi non disponibili" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "Escludi gli elementi stock che non sono disponibili dalla finestra di anteprima di ricerca" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "Cerca Ubicazioni" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "Mostra ubicazioni delle giacenze nella finestra di anteprima di ricerca" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "Cerca Aziende" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "Mostra le aziende nella finestra di anteprima di ricerca" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "Cerca Ordini Di Produzione" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "Mostra gli ordini di produzione nella finestra di anteprima di ricerca" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "Cerca Ordini di Acquisto" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "Mostra gli ordini di acquisto nella finestra di anteprima di ricerca" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "Escludi Ordini D'Acquisto Inattivi" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "Escludi ordini di acquisto inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "Cerca Ordini Di Vendita" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "Visualizzazione degli ordini di vendita nella finestra di anteprima della ricerca" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "Escludi Ordini Di Vendita Inattivi" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "Escludi ordini di vendita inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "Risultati Dell'Anteprima Di Ricerca" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "Numero di risultati da visualizzare in ciascuna sezione della finestra di anteprima della ricerca" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "Mostra quantità nei moduli" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "Visualizzare la quantità di pezzi disponibili in alcuni moduli" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "Il tasto Escape chiude i moduli" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "Utilizzare il tasto di escape per chiudere i moduli modali" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "Barra di navigazione fissa" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "La posizione della barra di navigazione è fissata nella parte superiore dello schermo" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 -msgid "Price break quantity" +msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "Risultati Dell'Anteprima Di Ricerca" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "Numero di risultati da visualizzare in ciascuna sezione della finestra di anteprima della ricerca" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "Mostra quantità nei moduli" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "Visualizzare la quantità di pezzi disponibili in alcuni moduli" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "Il tasto Esc chiude i moduli" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "Utilizzare il tasto Esc per chiudere i moduli modali" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "Barra di navigazione fissa" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "La posizione della barra di navigazione è fissata nella parte superiore dello schermo" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "Formato Data" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "Formato predefinito per visualizzare le date" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "Programmazione Prodotto" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "Mostra informazioni sulla pianificazione del prodotto" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "Inventario Prodotto" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "Visualizza le informazioni d'inventario dell'articolo (se la funzionalità d'inventario è abilitata)" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "Lunghezza Stringa Tabella" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "Limite massimo di lunghezza per le stringhe visualizzate nelle viste della tabella" + +#: common/models.py:2103 +msgid "Price break quantity" +msgstr "Quantità prezzo limite" + +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Prezzo" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" -msgstr "" +msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" -msgstr "" +msgstr "Scadenza" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" -msgstr "" +msgstr "Nome per questa notifica" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Attivo" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" -msgstr "" +msgstr "È questa notifica attiva" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "Token" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" -msgstr "" +msgstr "Token per l'accesso" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" -msgstr "" - -#: common/models.py:2170 -msgid "Shared secret for HMAC" -msgstr "" - -#: common/models.py:2276 -msgid "Message ID" -msgstr "" - -#: common/models.py:2277 -msgid "Unique identifier for this message" -msgstr "" - -#: common/models.py:2285 -msgid "Host" -msgstr "" - -#: common/models.py:2286 -msgid "Host from which this message was received" -msgstr "" - -#: common/models.py:2293 -msgid "Header" -msgstr "" - -#: common/models.py:2294 -msgid "Header of this message" -msgstr "" - -#: common/models.py:2300 -msgid "Body" -msgstr "" - -#: common/models.py:2301 -msgid "Body of this message" -msgstr "" +msgstr "Segreto" #: common/models.py:2310 +msgid "Shared secret for HMAC" +msgstr "Segreto condiviso per HMAC" + +#: common/models.py:2416 +msgid "Message ID" +msgstr "ID Messaggio" + +#: common/models.py:2417 +msgid "Unique identifier for this message" +msgstr "Identificatore unico per questo messaggio" + +#: common/models.py:2425 +msgid "Host" +msgstr "Host" + +#: common/models.py:2426 +msgid "Host from which this message was received" +msgstr "Host da cui questo messaggio è stato ricevuto" + +#: common/models.py:2433 +msgid "Header" +msgstr "Intestazione" + +#: common/models.py:2434 +msgid "Header of this message" +msgstr "Intestazione di questo messaggio" + +#: common/models.py:2440 +msgid "Body" +msgstr "Contenuto" + +#: common/models.py:2441 +msgid "Body of this message" +msgstr "Contenuto di questo messaggio" + +#: common/models.py:2450 msgid "Endpoint on which this message was received" -msgstr "" +msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" -msgstr "" +msgstr "Lavorato il" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" -msgstr "" +msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" -msgstr "" +msgstr "Id" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" -msgstr "" +msgstr "Titolo" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" -msgstr "" +msgstr "Pubblicato" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" -msgstr "" +msgstr "Autore" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" -msgstr "" +msgstr "Riepilogo" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" -msgstr "" +msgstr "Letto" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" -msgstr "" +msgstr "Queste notizie sull'elemento sono state lette?" #: common/notifications.py:294 #, python-brace-format msgid "New {verbose_name}" -msgstr "" +msgstr "Nuovo {verbose_name}" #: common/notifications.py:296 msgid "A new order has been created and assigned to you" -msgstr "" +msgstr "Un nuovo ordine è stato creato e assegnato a te" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" -msgstr "" +msgstr "Elemento ricevuto" #: common/notifications.py:304 msgid "Items have been received against a purchase order" +msgstr "Gli elementi sono stati ricevuti a fronte di un ordine di acquisto" + +#: common/notifications.py:311 +msgid "Items have been received against a return order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:423 msgid "Error raised by plugin" -msgstr "" +msgstr "Errore generato dal plugin" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Carica file" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "Abbina Campi" @@ -3060,7 +3329,7 @@ msgstr "Descrizione dell'azienda" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Sito Web" @@ -3086,14 +3355,18 @@ msgstr "Numero di telefono di contatto" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" -msgstr "" +msgstr "Email" #: company/models.py:123 msgid "Contact email address" msgstr "Indirizzo email" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Contatto" @@ -3105,11 +3378,11 @@ msgstr "Punto di contatto" msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Immagine" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Note Dell'Azienda" @@ -3137,229 +3410,230 @@ msgstr "è un produttore" msgid "Does this company manufacture parts?" msgstr "Questa azienda produce articoli?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Valuta" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Valuta predefinita utilizzata per questa azienda" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Articolo di base" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Seleziona articolo" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Produttore" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Seleziona Produttore" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "Codice articolo produttore (MPN)" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Codice articolo produttore" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "URL dell'articolo del fornitore" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "Descrizione articolo costruttore" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Codice articolo produttore" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Nome parametro" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Valore" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Valore del parametro" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Unità" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Unità parametri" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Fornitore" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Seleziona fornitore" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "SKU" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "Unità di giacenza magazzino fornitore" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "Selezionare un produttore" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "URL dell'articolo del fornitore" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "Descrizione articolo fornitore" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Nota" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "costo base" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "Onere minimo (ad esempio tassa di stoccaggio)" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Confezionamento" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "Imballaggio del pezzo" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "Quantità Confezione" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "Quantità unitaria contenuta in una singola confezione" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "multiplo" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "Ordine multiplo" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Disponibile" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "Quantità disponibile dal fornitore" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "Disponibilità Aggiornata" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "Valuta predefinita utilizzata per questo fornitore" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Codice valuta" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Azienda" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Articolo di base" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Seleziona articolo" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Produttore" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Seleziona Produttore" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "Codice articolo produttore (MPN)" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Codice articolo produttore" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "URL dell'articolo del fornitore" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "Descrizione articolo costruttore" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Codice articolo produttore" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Nome parametro" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Valore" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Valore del parametro" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Unità" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Unità parametri" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Fornitore" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Seleziona fornitore" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "SKU" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "Unità di giacenza magazzino fornitore" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "Selezionare un produttore" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "URL dell'articolo del fornitore" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "Descrizione articolo fornitore" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Nota" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "costo base" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "Onere minimo (ad esempio tassa di stoccaggio)" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Confezionamento" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "Imballaggio del pezzo" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "Quantità Confezione" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "Quantità unitaria contenuta in una singola confezione" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "multiplo" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "Ordine multiplo" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Disponibile" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "Quantità disponibile dal fornitore" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "Disponibilità Aggiornata" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Valuta predefinita utilizzata per questo fornitore" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Crea ordine d'acquisto" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "Modifica le informazioni dell'azienda" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Modifica azienda" @@ -3400,14 +3674,17 @@ msgstr "Scarica immagine dall'URL" msgid "Delete image" msgstr "Elimina immagine" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Cliente" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "Telefono" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "Rimuovi immagine" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "Rimuovi l'immagine associata a questa azienda" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "Rimuovi" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Carica immagine" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Download Immagine" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Articoli fornitore" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Crea nuovo fornitore" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Nuovo fornitore articolo" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Articoli ordinati" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Cancella articoli" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Cancella articoli" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Articoli Produttore" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Crea nuovo articolo produttore" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Nuovo Produttore Articoli" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Giacenza Fornitore" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Ordine di acquisto" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Crea nuovo ordine di acquisto" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Nuovo Ordine di Acquisto" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Ordini di Vendita" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Crea nuovo ordine di vendita" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Nuovo Ordine di Vendita" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "Assegna Giacenza" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Elenco dei fornitori" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Produttori" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Articoli ordinati" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Modifica articolo produttore" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Cancella articolo produttore" @@ -3582,36 +3889,36 @@ msgstr "Nessuna informazione sul produttore disponibile" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Fornitori" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Elimina articolo fornitore" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Elimina" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametri" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Nuovo Parametro" @@ -3619,8 +3926,8 @@ msgstr "Nuovo Parametro" msgid "Delete parameters" msgstr "Elimina il parametro" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Aggiungi parametro" @@ -3636,55 +3943,31 @@ msgstr "Articoli Forniti" msgid "Supplied Stock Items" msgstr "Elementi in Giacenza Forniti" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "Elementi in Giacenza Impegnati" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Articolo Fornitore" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Azioni Barcode" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "Mostra QR Code" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "Scollega Codice a Barre" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "Collega Codice a Barre" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "Azioni Articolo Fornitore" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Ordine Articolo" @@ -3695,13 +3978,13 @@ msgstr "Aggiorna Disponibilità" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "Modifica fornitore articolo" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "Duplica Articoli Fornitore" @@ -3713,95 +3996,68 @@ msgstr "Cancella Articolo Fornitore" msgid "Delete Supplier Part" msgstr "Elimina Articolo Fornitore" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "Codice a Barre Identificativo" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "Nessuna informazione sul fornitore disponibile" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "Fornitore articolo in giacenza" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "Crea nuova allocazione magazzino" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "Nuovo Elemento in giacenza" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "Ordini articoli fornitore" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Informazioni Prezzi" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "Aggiungi riduzione prezzo" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "Codice Articolo Fornitore QR" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "Collega Codice a Barre con l'Articolo Fornitore" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "Aggiorna Disponibilità Articolo" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Magazzino" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Ordini" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "Prezzo articolo del fornitore" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Prezzi" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Articoli in magazzino" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Prezzo articolo del fornitore" + #: company/views.py:33 msgid "New Supplier" msgstr "Nuovo Fornitore" @@ -3819,7 +4075,7 @@ msgstr "Clienti" msgid "New Customer" msgstr "Nuovo cliente" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Aziende" @@ -3827,519 +4083,604 @@ msgstr "Aziende" msgid "New Company" msgstr "Nuova Azienda" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "Stock Item QR Code" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "Nome etichetta" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Descrizione etichetta" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "Etichetta" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "File modello etichetta" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Abilitato" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "Modello di etichetta abilitato" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Larghezza [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Altezza [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "Formato del nome file" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "Formato del nome file per la generazione etichetta" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "Filtri di ricerca (elenco separato da virgole key=coppia di valori)," -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filtri" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "Filtri di ricerca (elenco separato da virgole key=coppia di valori" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "Articolo Filtri di ricerca (elenco separato da virgole key=coppia di valori)" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "Nessun ordine di acquisto corrispondente trovato" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "Sconosciuto" -#: order/models.py:83 -msgid "Order description" -msgstr "Descrizione ordine" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Prezzo Totale" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" -#: order/models.py:93 -msgid "Created By" -msgstr "Creato Da" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "Utente o gruppo responsabile di questo ordine" - -#: order/models.py:105 -msgid "Order notes" -msgstr "Note ordine" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "Riferimento ordine" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "Stato ordine d'acquisto" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "Azienda da cui sono stati ordinati gli articoli" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "Riferimento fornitore" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "Codice di riferimento ordine fornitore" - -#: order/models.py:275 -msgid "received by" -msgstr "ricevuto da" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "Data di emissione" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "Data di emissione ordine" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Data di consegna programmata" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data." -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Creato Da" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "Utente o gruppo responsabile di questo ordine" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Note ordine" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Riferimento ordine" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Stato ordine d'acquisto" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Azienda da cui sono stati ordinati gli articoli" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "Riferimento fornitore" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "Codice di riferimento ordine fornitore" + +#: order/models.py:366 +msgid "received by" +msgstr "ricevuto da" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Data di emissione" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Data di emissione ordine" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "Data di completamento dell'ordine. Dopo tale data l'ordine sarà in ritardo." - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "spedito da" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "L'ordine non può essere completato perché nessun articolo è stato assegnato" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "Solo un ordine in sospeso può essere contrassegnato come completato" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "L'ordine non può essere completato in quanto ci sono spedizioni incomplete" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "L'ordine non può essere completato perché ci sono elementi di riga incompleti" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "Data di destinazione per questa voce di riga (lasciare vuoto per utilizzare la data di destinazione dall'ordine)" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "Contesto" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "eliminato" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "Ordine" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "Dove l'Acquirente desidera che questo elemento venga immagazzinato?" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "Un articolo virtuale non può essere assegnato ad un ordine di vendita" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "Solo gli articoli vendibili possono essere assegnati a un ordine di vendita" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "Note di spedizione" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "Impossibile allocare l'elemento stock a una linea con un articolo diverso" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" -msgstr "" +msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "Linea" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "Elemento" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/serializers.py:63 -msgid "Price currency" -msgstr "Valuta prezzo" +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "Campo identificativo univoco" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "Codice a Barre" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "Deve essere fornita una quantità intera per gli articoli rintracciabili" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "I seguenti numeri di serie sono già assegnati" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "Ordine D'Acquisto in ritardo" @@ -4358,100 +4699,121 @@ msgstr "Ordini Di Vendita in ritardo" msgid "Sales order {so} is now overdue" msgstr "L'ordine di vendita {so} è ora in ritardo" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "Stampa report ordine acquisto" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Esportare File Ordine" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "Azioni Ordine" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Modifica ordine" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Annulla l'ordine" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "Duplica Ordine" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" -msgstr "Invia ordine" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" +msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "Ricevere articoli" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "Ricevi elementi" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Contrassegna ordine come completato" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "Completa l'ordine" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "Riferimento ordine" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "Descrizione Dell'Ordine" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Stato dell'ordine" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "Nessuna informazione sul fornitore disponibile" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Elementi della linea completati" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incompleto" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Emesso" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "Costo totale" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" +msgstr "Il costo totale non può essere calcolato" + +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" msgstr "" #: order/templates/order/order_wizard/match_fields.html:9 @@ -4459,14 +4821,14 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:9 #: templates/patterns/wizard/match_fields.html:8 msgid "Missing selections for the following required columns" -msgstr "" +msgstr "Selezione mancante per le seguenti colonne richieste" #: order/templates/order/order_wizard/match_fields.html:20 #: part/templates/part/import_wizard/ajax_match_fields.html:20 #: part/templates/part/import_wizard/match_fields.html:20 #: templates/patterns/wizard/match_fields.html:19 msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "" +msgstr "Selezioni duplicate trovate, vedi sotto. Correggi le selezioni e riprova." #: order/templates/order/order_wizard/match_fields.html:29 #: order/templates/order/order_wizard/match_parts.html:21 @@ -4481,7 +4843,7 @@ msgstr "Invia Selezione" #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "" +msgstr "Campi File" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 @@ -4503,11 +4865,13 @@ msgstr "Duplica selezionati" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Elimina riga" @@ -4530,15 +4894,15 @@ msgstr "Seleziona l'articolo del fornitore" #: order/templates/order/order_wizard/po_upload.html:8 msgid "Return to Orders" -msgstr "" +msgstr "Ritorna agli Ordini" #: order/templates/order/order_wizard/po_upload.html:13 msgid "Upload File for Purchase Order" -msgstr "" +msgstr "Carica il file per l'Ordine di Acquisto" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "" +msgstr "L'ordine è già elaborato. Non è possibile caricare i file." #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -4549,305 +4913,346 @@ msgid "Step %(step)s of %(count)s" msgstr "Passo %(step)s di %(count)s" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" -msgstr "" +msgstr "Elementi Riga" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "" +msgstr "Stock Ricevuto" #: order/templates/order/purchase_order_detail.html:19 msgid "Purchase Order Items" -msgstr "" +msgstr "Elementi D'Ordine D'Acquisto" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" -msgstr "" +msgstr "Aggiungi Elemento Riga" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" -msgstr "" +msgstr "Linee Extra" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" -msgstr "" +msgstr "Aggiungi Linea Extra" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" -msgstr "" +msgstr "Elementi Ricevuti" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" +msgstr "Note dell'Ordine" + +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" -msgstr "" - -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" -msgstr "" +msgstr "Stampa lista d'imballaggio" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" +msgstr "Riferimento Cliente" + +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "Costo Totale" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "Stampa il rapporto dell'ordine delle vendite" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "Completa Ordine Di Vendita" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "Questo Ordine di Vendita non è stato assegnato completamente" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" +msgstr "Spedizioni Completate" + +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" -msgstr "" +msgstr "Elementi Ordine di Vendita" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" -msgstr "" +msgstr "Spedizione in sospeso" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" -msgstr "" +msgstr "Azioni" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" -msgstr "" +msgstr "Nuova spedizione" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" -msgstr "" +msgstr "Corrispondenza Articoli del Fornitore" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" -msgstr "" +msgstr "Ordine di Vendita non trovato" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" -msgstr "" +msgstr "Prezzo non trovato" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" -msgstr "" +msgstr "Aggiornato {part} prezzo unitario a {price}" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "" +msgstr "Aggiornato {part} unità prezzo a {price} e quantità a {qty}" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "Codice Articolo" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "Nome Articolo" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "Descrizione Articolo" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Revisione" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Parole Chiave" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "Id Categoria" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "Nome Categoria" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" -msgstr "" +msgstr "Posizione Predefinita ID" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" -msgstr "" +msgstr "ID Fornitore Predefinito" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "In magazzino" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "Ordinato" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "Utilizzato In" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "Allocato" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "In Costruzione" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" -msgstr "" +msgstr "ID principale" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" -msgstr "" +msgstr "Nome Principale" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "Percorso Categoria" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Articoli" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "Livello Distinta Base" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" -msgstr "" +msgstr "ID Elemento Distinta Base" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" -msgstr "" +msgstr "IPN Principale" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" -msgstr "" +msgstr "IPN Articolo" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" -msgstr "" +msgstr "Ordine D'Acquisto In Arrivo" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" -msgstr "" +msgstr "Ordine di Vendita in Uscita" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" -msgstr "" +msgstr "Giacenza prodotta dall'Ordine di Costruzione" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" -msgstr "" +msgstr "Giacenza richiesta per l'Ordine di Produzione" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" -msgstr "" +msgstr "Valido" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" -msgstr "" +msgstr "Convalida l'intera Fattura dei Materiali" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" -msgstr "" +msgstr "Questa opzione deve essere selezionata" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Posizione Predefinita" @@ -4855,815 +5260,940 @@ msgstr "Posizione Predefinita" msgid "Total Stock" msgstr "Giacenze Totali" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "Digita la quantità per il calcolo del prezzo" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Posizione predefinita per gli articoli di questa categoria" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "Strutturale" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "Le parti non possono essere assegnate direttamente a una categoria strutturale, ma possono essere assegnate a categorie subordinate." - -#: part/models.py:128 -msgid "Default keywords" -msgstr "Keywords predefinite" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "Parole chiave predefinite per gli articoli in questa categoria" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "Icona" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "Icona (facoltativa)" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "Non puoi rendere principale questa categoria di articoli perché alcuni articoli sono già assegnati!" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Posizione predefinita per gli articoli di questa categoria" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "Strutturale" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "Le parti non possono essere assegnate direttamente a una categoria strutturale, ma possono essere assegnate a categorie subordinate." + +#: part/models.py:133 +msgid "Default keywords" +msgstr "Keywords predefinite" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "Parole chiave predefinite per gli articoli in questa categoria" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "Icona" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "Icona (facoltativa)" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "Non puoi rendere principale questa categoria di articoli perché alcuni articoli sono già assegnati!" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "Scelta non valida per l'articolo principale" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "L'articolo '{p1}' è usato nella Distinta Base per '{p2}' (ricorsivo)" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN deve corrispondere al modello regex {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "È Template" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:834 -msgid "Part description" -msgstr "Descrizione articolo" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Categoria" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "Fornitore predefinito" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "Articolo fornitore predefinito" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "È una parte virtuale, come un prodotto software o una licenza?" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "Note Articolo" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "Utente responsabile di questo articolo" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "Ultimo Inventario" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "Contatore Elemento" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "Numero di scorte individuali al momento dell'inventario" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "Data" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "Note aggiuntive" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "Utente che ha eseguito questo inventario" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "Costo Minimo Scorta" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "Costo minimo stimato di magazzino a disposizione" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "Costo Massimo Scorte" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "Costo massimo stimato di magazzino a disposizione" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "Report" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "File Report Inventario (generato internamente)" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "Conteggio Articolo" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "Numero di articoli oggetto d'inventario" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "Utente che ha richiesto questo report inventario" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "Il modello di prova può essere creato solo per gli articoli rintracciabili" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "Una prova con questo nome esiste già per questo articolo" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "Richiesto" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "Questa prova richiede un valore quando si aggiunge un risultato di prova?" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "Questa prova richiede un file allegato quando si aggiunge un risultato di prova?" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "Nome Parametro" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "Unità Parametri" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "Descrizione del parametro" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "Articolo principale" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "Modello Parametro" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "Dati" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "Valore del Parametro" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "Valore Predefinito" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "ID articolo o nome articolo" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "Valore ID articolo univoco" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "Valore IPN articolo" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "Livello" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "Livello distinta base" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "Opzionale" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "Consumabile" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Questo elemento della Distinta Base è consumabile (non è tracciato negli ordini di produzione)" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Eccedenza" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Quantità stimata scarti di produzione (assoluta o percentuale)" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "Ereditato" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "Convalidato" -#: part/models.py:3454 -msgid "This BOM item is inherited by BOMs for variant parts" +#: part/models.py:3615 +msgid "This BOM item has been validated" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "Questo elemento della Distinta Base viene ereditato dalle Distinte Base per gli articoli varianti" + +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" +msgstr "Gli elementi in giacenza per gli articoli varianti possono essere utilizzati per questo elemento Distinta Base" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sostituita non può essere la stessa dell'articolo principale" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "Non si può creare una relazione tra l'articolo e sé stesso" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" -msgstr "" +msgstr "Articolo Originale" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" -msgstr "" +msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" -msgstr "" +msgstr "Copia Distinta Base" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" -msgstr "" +msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Copia parametri" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" -msgstr "" +msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" +msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità." -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" -msgstr "" +msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" -msgstr "" +msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" + +#: part/serializers.py:348 +msgid "Select supplier (or leave blank to skip)" +msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" #: part/serializers.py:359 -msgid "Select supplier (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:370 msgid "Select manufacturer (or leave blank to skip)" -msgstr "" +msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" -msgstr "" +msgstr "Codice articolo Produttore" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" -msgstr "" +msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" -msgstr "" +msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" -msgstr "" +msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" -msgstr "" +msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" -msgstr "" +msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" -msgstr "" +msgstr "Stock iniziale" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" -msgstr "" +msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" -msgstr "" +msgstr "Informazioni Fornitore" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" -msgstr "" +msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "Copia Parametri Categoria" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "Copia i parametri dai modelli della categoria articolo selezionata" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "Limitare il report d'inventario ad un articolo particolare e a eventuali articoli varianti" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "Limita il report d'inventario ad una particolare categoria articolo, e a eventuali categorie secondarie" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "Limita il report d'inventario ad una particolare ubicazione di magazzino, e a eventuali ubicazioni secondarie" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "Genera Report" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "Genera file di report contenente dati di inventario calcolati" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "Aggiorna Articoli" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "Aggiorna gli articoli specificati con i dati calcolati di inventario" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "La funzione Inventario non è abilitata" + +#: part/serializers.py:964 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "Cancella Distinta Base esistente" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "Rimuovi elementi distinta base esistenti prima del caricamento" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "Nessuna colonna articolo specificata" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "Trovati più articoli corrispondenti" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "Nessun articolo corrispondente trovato" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "L'articolo non è indicato come componente" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "Quantità non fornita" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "Quantità non valida" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "Almeno un elemento della distinta base è richiesto" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "Notifica di magazzino bassa" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Lo stock disponibile per {part.name} è sceso sotto il livello minimo configurato" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "Quantità Totale" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "Costo Minimo Totale" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "Costo Massimo Totale" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "Report Inventario Disponibile" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "Un nuovo report di inventario è disponibile per il download" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "Non hai il permesso di modificare la distinta base." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" -msgstr "La distinta base per %(part)s è cambiata e deve essere convalidata.
" +msgid "The BOM this part has been changed, and must be validated" +msgstr "" #: part/templates/part/bom.html:17 #, python-format @@ -5675,7 +6205,7 @@ msgstr "La distinta base per %(part)s è stato controllato da %(checker msgid "The BOM for %(part)s has not been validated." msgstr "La distinta base per %(part)s non è stata convalidata." -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "Azioni Distinta Base" @@ -5683,85 +6213,85 @@ msgstr "Azioni Distinta Base" msgid "Delete Items" msgstr "Elimina Elementi" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "Esegui inventario per questa categoria articolo" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "Sei iscritto alle notifiche di questa categoria" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "Sottoscrivi notifiche per questa categoria" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "Azioni Categoria" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Modifica categoria" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Modifica Categoria" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Elimina la categoria" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Cancella categoria" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "Categoria articolo di livello superiore" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Sottocategorie" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Articoli (incluse le sottocategorie)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "Crea nuovo articolo" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "Nuovo articolo" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "Opzioni" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "Imposta categoria" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "Imposta Categoria" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "Stampa Etichette" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Parametri articolo" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "Crea nuova categoria articoli" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Nuova categoria" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "Crea Categoria Articolo" @@ -5798,124 +6328,126 @@ msgid "Refresh scheduling data" msgstr "Aggiorna i dati di pianificazione" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Aggiorna" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "Aggiungi informazioni inventario" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "Inventario" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "Modelli Articoli Test" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "Aggiungi Modelli Test" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "Assegnazione Ordine Di Vendita" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "Note Articolo" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "Varianti articolo" -#: part/templates/part/detail.html:183 -msgid "Create new variant" -msgstr "" - #: part/templates/part/detail.html:184 +msgid "Create new variant" +msgstr "Crea nuova variante" + +#: part/templates/part/detail.html:185 msgid "New Variant" -msgstr "" +msgstr "Nuova variante" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" -msgstr "" +msgstr "Aggiungi un nuovo parametro" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Articoli correlati" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" -msgstr "" +msgstr "Aggiungi Correlato" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Distinta base" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" -msgstr "" +msgstr "Esporta azioni" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" -msgstr "" +msgstr "Esporta Distinta Base" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" -msgstr "" +msgstr "Stampa il report Distinta Base" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" -msgstr "" +msgstr "Carica Distinta Base" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" -msgstr "" +msgstr "Valida Distinta Base" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" -msgstr "" +msgstr "Aggiungi elemento Distinta Base" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" -msgstr "" +msgstr "Assembla" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" -msgstr "" +msgstr "Articoli prodotti" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" -msgstr "" +msgstr "Costruisci le ubicazioni degli ordini" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "Fornitori articoli" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "Componenti Produttori" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" -msgstr "" +msgstr "Elimina articoli produttore" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "Articoli correlati" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" -msgstr "" +msgstr "Aggiungi articolo correlato" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" -msgstr "" +msgstr "Aggiungi risultato modello test" #: part/templates/part/import_wizard/ajax_part_upload.html:29 #: part/templates/part/import_wizard/part_upload.html:14 @@ -5932,35 +6464,35 @@ msgstr "Importa Articoli da File" #: part/templates/part/import_wizard/part_upload.html:31 msgid "Requirements for part import" -msgstr "" +msgstr "Requisiti per l'importazione di prodotto" #: part/templates/part/import_wizard/part_upload.html:33 msgid "The part import file must contain the required named columns as provided in the " -msgstr "" +msgstr "Il file articolo importato deve contenere le colonne con nome richiesto come indicato nella " #: part/templates/part/import_wizard/part_upload.html:33 msgid "Part Import Template" -msgstr "" +msgstr "Modello Articolo Importato" #: part/templates/part/import_wizard/part_upload.html:89 msgid "Download Part Import Template" -msgstr "" +msgstr "Scarica il Modello Articolo Importato" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "Formato" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "Seleziona il formato del file" #: part/templates/part/part_app_base.html:12 msgid "Part List" -msgstr "" +msgstr "Elenco Articolo" #: part/templates/part/part_base.html:27 part/templates/part/part_base.html:31 msgid "You are subscribed to notifications for this part" @@ -5968,39 +6500,39 @@ msgstr "Sei iscritto alle notifiche per questo articolo" #: part/templates/part/part_base.html:35 msgid "Subscribe to notifications for this part" -msgstr "" +msgstr "Sottoscrivi le notifiche per questo articolo" #: part/templates/part/part_base.html:49 msgid "Unink Barcode" -msgstr "" +msgstr "Scollega Codice a Barre" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Stampa Etichetta" #: part/templates/part/part_base.html:60 msgid "Show pricing information" -msgstr "" +msgstr "Mostra informazioni sui prezzi" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Azioni magazzino" #: part/templates/part/part_base.html:72 msgid "Count part stock" -msgstr "" +msgstr "Conta articoli magazzino" #: part/templates/part/part_base.html:78 msgid "Transfer part stock" -msgstr "" +msgstr "Trasferisci giacenza" #: part/templates/part/part_base.html:93 msgid "Part actions" -msgstr "" +msgstr "Azioni articolo" #: part/templates/part/part_base.html:96 msgid "Duplicate part" @@ -6016,19 +6548,19 @@ msgstr "Cancella articolo" #: part/templates/part/part_base.html:121 msgid "Part is a template part (variants can be made from this part)" -msgstr "" +msgstr "L'articolo è una articolo modello (le varianti possono essere fatte da questo articolo)" #: part/templates/part/part_base.html:125 msgid "Part can be assembled from other parts" -msgstr "" +msgstr "L'articolo può essere assemblato da altri articoli" #: part/templates/part/part_base.html:129 msgid "Part can be used in assemblies" -msgstr "" +msgstr "L'articolo può essere utilizzato negli assemblaggi" #: part/templates/part/part_base.html:133 msgid "Part stock is tracked by serial number" -msgstr "" +msgstr "Lo stock dell'articolo è tracciato dal numero di serie" #: part/templates/part/part_base.html:137 msgid "Part can be purchased from external suppliers" @@ -6039,86 +6571,88 @@ msgid "Part can be sold to customers" msgstr "La parte può essere venduta ai clienti" #: part/templates/part/part_base.html:147 -#: part/templates/part/part_base.html:155 -msgid "Part is virtual (not a physical part)" +msgid "Part is not active" msgstr "" #: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 msgid "Inactive" msgstr "Inattivo" +#: part/templates/part/part_base.html:155 +msgid "Part is virtual (not a physical part)" +msgstr "L'Articolo è virtuale (non è un articolo fisico)" + #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" -msgstr "" +msgstr "Mostra i Dettagli Articolo" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" -msgstr "" +msgstr "Assegnato agli Ordini di Produzione" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "Assegnato agli Ordini di Vendita" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" -msgstr "" +msgstr "Puoi produrre" #: part/templates/part/part_base.html:293 msgid "Minimum stock level" -msgstr "" +msgstr "Livello minimo di giacenza" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" -msgstr "" +msgstr "Fascia di Prezzo" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" -msgstr "" +msgstr "Ultimo Numero Di Serie" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" -msgstr "" +msgstr "Ricerca per numero seriale" + +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "QR Code Articolo" #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" -msgstr "" +msgstr "Collega il codice a barre all'Articolo" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" -msgstr "" +msgstr "Calcola" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" -msgstr "" +msgstr "Rimuovi l'immagine associata all'articolo" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" -msgstr "" +msgstr "Nessuna immagine corrispondente trovata" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" -msgstr "" +msgstr "Nascondi Dettagli dell'Articolo" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" -msgstr "" +msgstr "Prezzo del Fornitore" #: part/templates/part/part_pricing.html:26 #: part/templates/part/part_pricing.html:52 @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "Costo Unitario" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "Costo Totale" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "Nessun prezzo del fornitore disponibile" @@ -6171,11 +6698,27 @@ msgstr "Quantità Programmata" msgid "Variants" msgstr "Varianti" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Magazzino" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Prezzi" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "Programmazione" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "Modelli test" @@ -6191,11 +6734,11 @@ msgstr "Panoramica prezzi" msgid "Refresh Part Pricing" msgstr "Aggiorna prezzo articolo" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "Ultimo aggiornamento" @@ -6258,8 +6801,8 @@ msgstr "Prezzo di Vendita" msgid "Add Sell Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "Nessuna giacenza" @@ -6269,91 +6812,86 @@ msgstr "Disponibilità scarsa" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" -msgstr "" +msgstr "Ritorna alla Distinta Base" #: part/templates/part/upload_bom.html:13 msgid "Upload Bill of Materials" -msgstr "" +msgstr "Carica la Fattura dei Materiali" #: part/templates/part/upload_bom.html:19 msgid "BOM upload requirements" -msgstr "" +msgstr "Distinta Base caricamento richiesto" #: part/templates/part/upload_bom.html:23 #: part/templates/part/upload_bom.html:90 msgid "Upload BOM File" -msgstr "" +msgstr "Carica file Distinta Base" #: part/templates/part/upload_bom.html:29 msgid "Submit BOM Data" -msgstr "" +msgstr "Invia Dati Distinta Base" #: part/templates/part/upload_bom.html:37 msgid "Requirements for BOM upload" -msgstr "" +msgstr "Requisiti per il caricamento Distinta Base" #: part/templates/part/upload_bom.html:39 msgid "The BOM file must contain the required named columns as provided in the " -msgstr "" +msgstr "Il file Distinta Base deve contenere le colonne con nome richiesto come indicato nella " #: part/templates/part/upload_bom.html:39 msgid "BOM Upload Template" -msgstr "" +msgstr "Carica Modello Distinta Base" #: part/templates/part/upload_bom.html:40 msgid "Each part must already exist in the database" -msgstr "" +msgstr "Ogni articolo deve essere già presente nel database" #: part/templates/part/variant_part.html:9 msgid "Create new part variant" -msgstr "" +msgstr "Crea nuove varianti dell'articolo" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "Database sconosciuto" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" -msgstr "" +msgstr "{title} v{version}" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" -msgstr "" +msgstr "Riferimenti Corrispondenza" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "Impossibile importare l'articolo {name} perché non c'è nessuna categoria assegnata" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" -msgstr "" +msgstr "Seleziona l'immagine dell'Articolo" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" -msgstr "" +msgstr "Immagine articolo aggiornata" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" -msgstr "" +msgstr "Immagine articolo non trovata" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" -msgstr "" +msgstr "Prezzo Articolo" #: plugin/apps.py:55 msgid "Your environment has an outdated git version. This prevents InvenTree from loading plugin details." -msgstr "" +msgstr "Il tuo ambiente ha una versione git obsoleta. Questo impedisce a InvenTree di caricare i dettagli del plugin." #: plugin/base/action/api.py:27 msgid "No action specified" @@ -6365,7 +6903,7 @@ msgstr "Nessuna azione corrispondente trovata" #: plugin/base/barcodes/api.py:54 plugin/base/barcodes/api.py:110 msgid "Missing barcode data" -msgstr "" +msgstr "Codice a barre mancante" #: plugin/base/barcodes/api.py:80 msgid "No match found for barcode data" @@ -6376,1093 +6914,1172 @@ msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" -msgstr "" +msgstr "Il codice a barre corrisponde a un elemento esistente" #: plugin/base/barcodes/api.py:217 msgid "No match found for provided value" -msgstr "" +msgstr "Nessuna corrispondenza trovata per il valore fornito" #: plugin/base/label/label.py:60 msgid "Label printing failed" -msgstr "" +msgstr "Stampa etichetta fallita" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "Provides native support for barcodes" -msgstr "" +msgstr "InvenTree Codice a Barre" #: plugin/builtin/barcodes/inventree_barcode.py:29 +msgid "Provides native support for barcodes" +msgstr "Fornisce supporto nativo per codici a barre" + +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" -msgstr "" +msgstr "Contributi d'InvenTree" #: plugin/builtin/integration/core_notifications.py:32 msgid "InvenTree Notifications" -msgstr "" +msgstr "InvenTree Notifiche" #: plugin/builtin/integration/core_notifications.py:34 msgid "Integrated outgoing notificaton methods" -msgstr "" +msgstr "Metodi di notifica integrati in uscita" #: plugin/builtin/integration/core_notifications.py:39 #: plugin/builtin/integration/core_notifications.py:80 msgid "Enable email notifications" -msgstr "" +msgstr "Attiva notifiche email" #: plugin/builtin/integration/core_notifications.py:40 #: plugin/builtin/integration/core_notifications.py:81 msgid "Allow sending of emails for event notifications" -msgstr "" +msgstr "Consenti l'invio di email per le notifiche di eventi" #: plugin/builtin/integration/core_notifications.py:45 msgid "Enable slack notifications" -msgstr "" +msgstr "Abilita notifiche per rallentamenti" #: plugin/builtin/integration/core_notifications.py:46 msgid "Allow sending of slack channel messages for event notifications" -msgstr "" +msgstr "Consenti l'invio di messaggi di rallentamenti canale per le notifiche degli eventi" #: plugin/builtin/integration/core_notifications.py:51 msgid "Slack incoming webhook url" -msgstr "" +msgstr "Rallentamenti in entrata notifiche url" #: plugin/builtin/integration/core_notifications.py:52 msgid "URL that is used to send messages to a slack channel" -msgstr "" +msgstr "Questo URL è stato utilizzato per inviare messaggi a un canale rallentato" #: plugin/builtin/integration/core_notifications.py:162 msgid "Open link" -msgstr "" +msgstr "Apri collegamento" #: plugin/models.py:33 msgid "Plugin Metadata" -msgstr "" +msgstr "Metadati Plugin" #: plugin/models.py:34 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "Campo di metadati JSON, da utilizzare con plugin esterni" #: plugin/models.py:80 msgid "Plugin Configuration" -msgstr "" +msgstr "Configurazione Plugin" #: plugin/models.py:81 msgid "Plugin Configurations" -msgstr "" +msgstr "Configurazioni Plugin" #: plugin/models.py:86 templates/InvenTree/settings/plugin.html:61 msgid "Key" -msgstr "" +msgstr "Key" #: plugin/models.py:87 msgid "Key of plugin" -msgstr "" +msgstr "Key dei plugin" #: plugin/models.py:95 msgid "PluginName of the plugin" -msgstr "" +msgstr "PluginName del plugin" #: plugin/models.py:101 msgid "Is the plugin active" -msgstr "" +msgstr "Il plugin è attivo" #: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 msgid "Unvailable" -msgstr "" +msgstr "Non disponibile" #: plugin/models.py:164 msgid "Sample plugin" -msgstr "" +msgstr "Plugin di esempio" #: plugin/models.py:173 msgid "Builtin Plugin" -msgstr "" +msgstr "Plugin Integrato" #: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" -msgstr "" +msgstr "Plugin" #: plugin/models.py:263 msgid "Method" -msgstr "" +msgstr "Metodo" #: plugin/plugin.py:257 msgid "No author found" -msgstr "" +msgstr "Nessun autore trovato" #: plugin/plugin.py:269 msgid "No date found" -msgstr "" +msgstr "Nessuna data trovata" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" -msgstr "" - -#: plugin/registry.py:446 +#: plugin/registry.py:452 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 msgid "Enable PO" -msgstr "" +msgstr "Abilita PO" #: plugin/samples/integration/sample.py:40 msgid "Enable PO functionality in InvenTree interface" -msgstr "" +msgstr "Abilita funzionalità PO nell'interfaccia InvenTree" #: plugin/samples/integration/sample.py:45 msgid "API Key" -msgstr "" +msgstr "API Key" #: plugin/samples/integration/sample.py:46 msgid "Key required for accessing external API" -msgstr "" +msgstr "Key richiesta per accedere alle API esterne" #: plugin/samples/integration/sample.py:49 msgid "Numerical" -msgstr "" +msgstr "Numerico" #: plugin/samples/integration/sample.py:50 msgid "A numerical setting" -msgstr "" +msgstr "Un'impostazione numerica" #: plugin/samples/integration/sample.py:55 msgid "Choice Setting" -msgstr "" +msgstr "Scegli l'impostazione" #: plugin/samples/integration/sample.py:56 msgid "A setting with multiple choices" -msgstr "" +msgstr "Un'impostazione con scelte multiple" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" -msgstr "" - -#: plugin/serializers.py:73 -msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" - -#: plugin/serializers.py:78 -msgid "Package Name" -msgstr "" - -#: plugin/serializers.py:79 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" +msgstr "URL di origine" #: plugin/serializers.py:82 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "Fonte per il pacchetto - questo può essere un registro personalizzato o un percorso VCS" + +#: plugin/serializers.py:87 +msgid "Package Name" +msgstr "Nome Pacchetto" + +#: plugin/serializers.py:88 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "Nome per il Pacchetto Plugin - può anche contenere un indicatore di versione" + +#: plugin/serializers.py:91 msgid "Confirm plugin installation" -msgstr "" +msgstr "Conferma installazione plugin" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" +msgstr "Questo plugin verrà installato ora nell'istanza corrente. L'istanza andrà in manutenzione." -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" -msgstr "" +msgstr "Installazione non confermata" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" -msgstr "" +msgstr "Deve essere fornito uno dei nomi del pacchetto URL" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "Nessun oggetto valido fornito nel modello" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" -msgstr "" +msgstr "Il file del modello '{template}' è mancante o non esiste" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" -msgstr "" - -#: report/models.py:153 -msgid "Template name" -msgstr "" +msgstr "Report test" #: report/models.py:159 -msgid "Report template file" -msgstr "" +msgid "Template name" +msgstr "Nome modello" -#: report/models.py:166 -msgid "Report template description" -msgstr "" +#: report/models.py:165 +msgid "Report template file" +msgstr "File modello di report" #: report/models.py:172 +msgid "Report template description" +msgstr "Descrizione del modello report" + +#: report/models.py:178 msgid "Report revision number (auto-increments)" -msgstr "" +msgstr "Numero di revisione del rapporto (auto-incrementi)" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" -msgstr "" +msgstr "Sequenza per generare i nomi dei file report" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" -msgstr "" +msgstr "Modello report abilitato" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "Filtri di ricerca elementi di stock (elenco separato da virgole key=coppia di valori)" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" -msgstr "" +msgstr "Includi Test Installati" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" -msgstr "" +msgstr "Includi i risultati dei test per gli elementi stock installati all'interno dell'elemento assemblato" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" -msgstr "" +msgstr "Filtri di produzione" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "" +msgstr "Filtri di ricerca produzione (elenco separato da virgole key=coppia di valori" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" -msgstr "" +msgstr "Filtri Articolo" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "" +msgstr "Filtri di ricerca articolo (elenco separato da virgole key=coppia di valori" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" -msgstr "" +msgstr "Ordine di Acquisto filtra la ricerca" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" +msgstr "Ordine di Vendita filtra la ricerca" + +#: report/models.py:520 +msgid "Return order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:573 msgid "Snippet" -msgstr "" +msgstr "Snippet" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" -msgstr "" +msgstr "Report file snippet" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" -msgstr "" +msgstr "Descrizione file snippet" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" -msgstr "" +msgstr "Risorsa" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" -msgstr "" +msgstr "Report file risorsa" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" -msgstr "" +msgstr "File risorsa descrizione" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "" +msgstr "Materiali necessari" #: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" +msgstr "Richiesto Per" + +#: report/templates/report/inventree_po_report_base.html:15 +msgid "Supplier was deleted" +msgstr "Il fornitore è stato eliminato" + +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Prezzo Unitario" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report.html:77 -msgid "Supplier was deleted" -msgstr "" +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Totale" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Numero Seriale" #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" -msgstr "" +msgstr "Test Report Elemento Stock" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" -msgstr "" +msgstr "Risultati Test" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" -msgstr "" +msgstr "Test" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" -msgstr "" +msgstr "Risultato" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" -msgstr "" +msgstr "Passaggio" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Fallito" -#: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:16 -msgid "Installed Items" +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 +msgid "Installed Items" +msgstr "Elementi installati" + +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "Seriale" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "ID Posizione" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" -msgstr "" +msgstr "Nome Ubicazione" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" -msgstr "" +msgstr "Percorso Ubicazione" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" +msgstr "ID Elemento Stock" + +#: stock/admin.py:107 +msgid "Status Code" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:110 msgid "Supplier Part ID" -msgstr "" +msgstr "ID Articolo Fornitore" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" -msgstr "" +msgstr "ID Fornitore" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" -msgstr "" +msgstr "Nome Fornitore" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" -msgstr "" +msgstr "ID Cliente" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "Installato In" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" -msgstr "" +msgstr "ID Costruttore" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" -msgstr "" +msgstr "ID Ordine Vendita" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" +msgstr "ID Ordine D'acquisto" + +#: stock/admin.py:125 +msgid "Review Needed" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "Data di Scadenza" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" -msgstr "" +msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "Seleziona Owner" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "Articolo base" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Posizioni magazzino" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "Proprietario" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "Seleziona Owner" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "Gli elementi di magazzino non possono essere direttamente situati in un magazzino strutturale, ma possono essere situati in ubicazioni secondarie." + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "Esterno" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "Si tratta di una posizione esterna al magazzino" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "Non puoi rendere strutturale questa posizione di magazzino perché alcuni elementi di magazzino sono già posizionati al suo interno!" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "Gli articoli di magazzino non possono essere ubicati in posizioni di magazzino strutturali!" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "Il tipo di articolo ('{pf}') deve essere {pe}" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "La quantità deve essere 1 per elementi con un numero di serie" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "Il numero di serie non può essere impostato se la quantità è maggiore di 1" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "L'elemento non può appartenere a se stesso" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "L'elemento deve avere un riferimento di costruzione se is_building=True" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "Il riferimento di costruzione non punta allo stesso oggetto dell'articolo" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Elemento di magazzino principale" + +#: stock/models.py:670 +msgid "Base part" +msgstr "Articolo base" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" + +#: stock/models.py:688 msgid "Where is this stock item located?" -msgstr "" +msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" -msgstr "" +msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" -msgstr "" +msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" -msgstr "" +msgstr "Numero di serie per questo elemento" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" -msgstr "" +msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" -msgstr "" +msgstr "Genera Costruzione" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" -msgstr "" +msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" -msgstr "" +msgstr "Origina Ordine di Acquisto" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" -msgstr "" +msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" -msgstr "" +msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "Data di scadenza per l'elemento di magazzino. Le scorte saranno considerate scadute dopo questa data" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" -msgstr "" +msgstr "Note Elemento di magazzino" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" -msgstr "" +msgstr "Convertito in articolo" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" -msgstr "" +msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" -msgstr "" +msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" -msgstr "" +msgstr "La quantità non deve superare la quantità disponibile ({n})" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" -msgstr "" +msgstr "I numeri di serie devono essere numeri interi" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" -msgstr "" +msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" - -#: stock/models.py:1412 -msgid "Stock item has been assigned to a sales order" -msgstr "" - -#: stock/models.py:1415 -msgid "Stock item is installed in another item" -msgstr "" - -#: stock/models.py:1418 -msgid "Stock item contains other items" -msgstr "" - -#: stock/models.py:1421 -msgid "Stock item has been assigned to a customer" -msgstr "" - -#: stock/models.py:1424 -msgid "Stock item is currently in production" -msgstr "" - -#: stock/models.py:1427 -msgid "Serialized stock cannot be merged" -msgstr "" - -#: stock/models.py:1434 stock/serializers.py:963 -msgid "Duplicate stock items" -msgstr "" - -#: stock/models.py:1438 -msgid "Stock items must refer to the same part" -msgstr "" - -#: stock/models.py:1442 -msgid "Stock items must refer to the same supplier part" -msgstr "" - -#: stock/models.py:1446 -msgid "Stock status codes must match" -msgstr "" - -#: stock/models.py:1615 -msgid "StockItem cannot be moved as it is not in stock" -msgstr "" - -#: stock/models.py:2083 -msgid "Entry notes" -msgstr "" - -#: stock/models.py:2141 -msgid "Value must be provided for this test" -msgstr "" - -#: stock/models.py:2147 -msgid "Attachment must be uploaded for this test" -msgstr "" - -#: stock/models.py:2166 -msgid "Test name" -msgstr "" - -#: stock/models.py:2172 -msgid "Test result" -msgstr "" - -#: stock/models.py:2178 -msgid "Test output value" -msgstr "" - -#: stock/models.py:2185 -msgid "Test result attachment" -msgstr "" - -#: stock/models.py:2191 -msgid "Test notes" -msgstr "" - -#: stock/serializers.py:75 -msgid "Serial number is too large" -msgstr "" - -#: stock/serializers.py:176 -msgid "Purchase price of this stock item" -msgstr "" - -#: stock/serializers.py:286 -msgid "Enter number of stock items to serialize" -msgstr "" - -#: stock/serializers.py:298 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" - -#: stock/serializers.py:304 -msgid "Enter serial numbers for new items" -msgstr "" - -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 -msgid "Destination stock location" -msgstr "Posizione magazzino di destinazione" - -#: stock/serializers.py:322 -msgid "Optional note field" -msgstr "" - -#: stock/serializers.py:332 -msgid "Serial numbers cannot be assigned to this part" -msgstr "" - -#: stock/serializers.py:353 +#: stock/models.py:1386 stock/serializers.py:349 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/serializers.py:393 +#: stock/models.py:1457 +msgid "Stock item has been assigned to a sales order" +msgstr "L'elemento di magazzino è stato assegnato a un ordine di vendita" + +#: stock/models.py:1460 +msgid "Stock item is installed in another item" +msgstr "L'elemento di magazzino è installato in un altro elemento" + +#: stock/models.py:1463 +msgid "Stock item contains other items" +msgstr "L'elemento di magazzino contiene altri elementi" + +#: stock/models.py:1466 +msgid "Stock item has been assigned to a customer" +msgstr "L'elemento di magazzino è stato assegnato a un cliente" + +#: stock/models.py:1469 +msgid "Stock item is currently in production" +msgstr "L'elemento di magazzino è attualmente in produzione" + +#: stock/models.py:1472 +msgid "Serialized stock cannot be merged" +msgstr "Il magazzino serializzato non può essere unito" + +#: stock/models.py:1479 stock/serializers.py:946 +msgid "Duplicate stock items" +msgstr "Duplica elementi di magazzino" + +#: stock/models.py:1483 +msgid "Stock items must refer to the same part" +msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" + +#: stock/models.py:1487 +msgid "Stock items must refer to the same supplier part" +msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" + +#: stock/models.py:1491 +msgid "Stock status codes must match" +msgstr "I codici di stato dello stock devono corrispondere" + +#: stock/models.py:1660 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "Le giacenze non possono essere spostate perché non disponibili" + +#: stock/models.py:2128 +msgid "Entry notes" +msgstr "Note d'ingresso" + +#: stock/models.py:2186 +msgid "Value must be provided for this test" +msgstr "Il valore deve essere fornito per questo test" + +#: stock/models.py:2192 +msgid "Attachment must be uploaded for this test" +msgstr "L'allegato deve essere caricato per questo test" + +#: stock/models.py:2211 +msgid "Test name" +msgstr "Nome Test" + +#: stock/models.py:2217 +msgid "Test result" +msgstr "Risultato Test" + +#: stock/models.py:2223 +msgid "Test output value" +msgstr "Test valore output" + +#: stock/models.py:2230 +msgid "Test result attachment" +msgstr "Risultato della prova allegato" + +#: stock/models.py:2236 +msgid "Test notes" +msgstr "Note del test" + +#: stock/serializers.py:75 +msgid "Serial number is too large" +msgstr "Il numero di serie è troppo grande" + +#: stock/serializers.py:231 +msgid "Purchase price of this stock item" +msgstr "Prezzo di acquisto di questo elemento di magazzino" + +#: stock/serializers.py:282 +msgid "Enter number of stock items to serialize" +msgstr "Inserisci il numero di elementi di magazzino da serializzare" + +#: stock/serializers.py:294 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({q})" +msgstr "La quantità non deve superare la quantità disponibile ({q})" + +#: stock/serializers.py:300 +msgid "Enter serial numbers for new items" +msgstr "Inserisci i numeri di serie per i nuovi elementi" + +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 +msgid "Destination stock location" +msgstr "Posizione magazzino di destinazione" + +#: stock/serializers.py:318 +msgid "Optional note field" +msgstr "Note opzionali elemento" + +#: stock/serializers.py:328 +msgid "Serial numbers cannot be assigned to this part" +msgstr "Numeri di serie non possono essere assegnati a questo articolo" + +#: stock/serializers.py:389 msgid "Select stock item to install" -msgstr "" +msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" -msgstr "" +msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" -msgstr "" +msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" -msgstr "" +msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" -msgstr "" +msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" -msgstr "" +msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" -msgstr "" +msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" -msgstr "" +msgstr "Posizione di destinazione per l'elemento restituito" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" -msgstr "" +msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" -msgstr "" +msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" -msgstr "" +msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" -msgstr "" +msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" -msgstr "" +msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" -msgstr "" +msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" -msgstr "" +msgstr "Note di fusione di magazzino" + +#: stock/serializers.py:915 +msgid "Allow mismatched suppliers" +msgstr "Consenti fornitori non corrispondenti" + +#: stock/serializers.py:916 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "Consenti di unire gli elementi di magazzino che hanno fornitori diversi" + +#: stock/serializers.py:921 +msgid "Allow mismatched status" +msgstr "Consenti stato non corrispondente" + +#: stock/serializers.py:922 +msgid "Allow stock items with different status codes to be merged" +msgstr "Consenti di unire gli elementi di magazzino con diversi codici di stato" #: stock/serializers.py:932 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:933 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" - -#: stock/serializers.py:938 -msgid "Allow mismatched status" -msgstr "" - -#: stock/serializers.py:939 -msgid "Allow stock items with different status codes to be merged" -msgstr "" - -#: stock/serializers.py:949 msgid "At least two stock items must be provided" -msgstr "" +msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" -msgstr "" +msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" -msgstr "" +msgstr "Note sugli spostamenti di magazzino" #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" -msgstr "" +msgstr "Informazioni di Tracciamento Magazzino" #: stock/templates/stock/item.html:69 msgid "Child Stock Items" -msgstr "" +msgstr "Elementi Secondari Magazzino" #: stock/templates/stock/item.html:77 msgid "This stock item does not have any child items" -msgstr "" +msgstr "Questo elemento di magazzino non ha nessun elemento secondario" #: stock/templates/stock/item.html:86 #: stock/templates/stock/stock_sidebar.html:12 msgid "Test Data" -msgstr "" +msgstr "Dati di Test" #: stock/templates/stock/item.html:90 stock/templates/stock/item_base.html:66 msgid "Test Report" -msgstr "" +msgstr "Rapporto del Test" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" -msgstr "" +msgstr "Elimina Dati di Test" #: stock/templates/stock/item.html:98 msgid "Add Test Data" -msgstr "" +msgstr "Aggiungi Dati Di Test" #: stock/templates/stock/item.html:147 msgid "Installed Stock Items" -msgstr "" +msgstr "Elementi di magazzino installati" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" -msgstr "" +msgstr "Installa Elemento Magazzino" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" -msgstr "" +msgstr "Elimina tutti i risultati del test per questo elemento di magazzino" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" -msgstr "" +msgstr "Aggiungi Risultato Test" #: stock/templates/stock/item_base.html:34 msgid "Locate stock item" -msgstr "" +msgstr "Individua elemento di magazzino" #: stock/templates/stock/item_base.html:52 templates/stock_table.html:21 msgid "Scan to Location" msgstr "Scansiona nella posizione" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" -msgstr "" +msgstr "Impostazioni di stampa" #: stock/templates/stock/item_base.html:76 msgid "Stock adjustment actions" -msgstr "" +msgstr "Azioni adeguamento giacenza" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "Conta giacenza" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "Aggiungi giacenza" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "Rimuovi giacenza" #: stock/templates/stock/item_base.html:86 msgid "Serialize stock" -msgstr "" +msgstr "Serializza magazzino" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "Trasferisci giacenza" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" -msgstr "" +msgstr "Assegna al cliente" #: stock/templates/stock/item_base.html:95 msgid "Return to stock" -msgstr "" +msgstr "Torna al magazzino" #: stock/templates/stock/item_base.html:98 msgid "Uninstall stock item" -msgstr "" +msgstr "Disinstalla elemento di magazzino" #: stock/templates/stock/item_base.html:98 msgid "Uninstall" -msgstr "" +msgstr "Disinstalla" #: stock/templates/stock/item_base.html:102 msgid "Install stock item" -msgstr "" +msgstr "Installa elementi stock" #: stock/templates/stock/item_base.html:102 msgid "Install" -msgstr "" +msgstr "Installa" #: stock/templates/stock/item_base.html:116 msgid "Convert to variant" -msgstr "" +msgstr "Converti in variante" #: stock/templates/stock/item_base.html:119 msgid "Duplicate stock item" -msgstr "" +msgstr "Duplica elemento di magazzino" #: stock/templates/stock/item_base.html:121 msgid "Edit stock item" -msgstr "" +msgstr "Modifica elemento di magazzino" #: stock/templates/stock/item_base.html:124 msgid "Delete stock item" -msgstr "" +msgstr "Cancella elemento di magazzino" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" -msgstr "" +msgstr "Elemento principale" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" -msgstr "" +msgstr "Nessun produttore impostato" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "" +msgstr "Non sei nell'elenco dei proprietari di questo elemento. Questo elemento di magazzino non può essere modificato." -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" +msgstr "Sola lettura" + +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." -msgstr "" +msgstr "Questo elemento di magazzino è in produzione e non può essere modificato." -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." -msgstr "" +msgstr "Modifica l'elemento di magazzino dalla visualizzazione generata." -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" -msgstr "" +msgstr "Questo elemento di magazzino è stato assegnato all'Ordine di Vendita" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" +msgstr "Questo elemento di magazzino è stato assegnato all'Ordine di Produzione" + +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "" - -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "pagina precedente" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" -msgstr "" +msgstr "Vai al numero di serie precedente" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "pagina successiva" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" -msgstr "" +msgstr "Vai al numero di serie successivo" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" -msgstr "" +msgstr "Quantità Disponibile" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "Nessuna posizione impostata" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" -msgstr "" +msgstr "Test" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "Questo elemento di magazzino non ha superato i test richiesti" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "" +msgstr "Questo Elemento Stock è scaduto il %(item.expiry_date)s" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" -msgstr "" +msgstr "Scaduto" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "" +msgstr "Questo Elemento Stock scade il %(item.expiry_date)s" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" -msgstr "" +msgstr "Obsoleto" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "Nessun inventario eseguito" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" -msgstr "" +msgstr "Modifica Stato Magazzino" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "Stock Item QR Code" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" -msgstr "" - -#: stock/templates/stock/item_base.html:603 -msgid "Select one of the part variants listed below." -msgstr "" - -#: stock/templates/stock/item_base.html:606 -msgid "Warning" -msgstr "" +msgstr "Collega il codice a barre all'Elemento Stock" #: stock/templates/stock/item_base.html:607 +msgid "Select one of the part variants listed below." +msgstr "Selezionare una delle varianti dell'articolo elencate sotto." + +#: stock/templates/stock/item_base.html:610 +msgid "Warning" +msgstr "Attenzione" + +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" -msgstr "" +msgstr "Questa azione non può essere facilmente annullata" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" -msgstr "" +msgstr "Converti Elemento Stock" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" -msgstr "" +msgstr "Torna al Magazzino" #: stock/templates/stock/item_serialize.html:5 msgid "Create serialized items from this stock item." -msgstr "" +msgstr "Crea elementi serializzati da questo elemento di magazzino." #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." -msgstr "" +msgstr "Seleziona la quantità da serializzare e i numeri di serie univoci." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "Esegui inventario per questa ubicazione di magazzino" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" -msgstr "" +msgstr "Individua ubicazione di magazzino" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" -msgstr "" +msgstr "Scansiona gli elementi in magazzino in questa ubicazione" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" -msgstr "" +msgstr "Scansiona Elementi Stock" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" -msgstr "" +msgstr "Scansiona il contenitore magazzino in questa posizione" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" -msgstr "" +msgstr "Scansiona container" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Azioni posizione" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Modifica la posizione" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Elimina la posizione" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "Posizione stock di livello superiore" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" -msgstr "" +msgstr "Proprietario Posizione" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Non sei nell'elenco dei proprietari di questa posizione. Questa posizione di giacenza non può essere modificata." @@ -7472,11 +8089,6 @@ msgstr "Non sei nell'elenco dei proprietari di questa posizione. Questa posizion msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Posizioni magazzino" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "Crea nuova posizione di magazzino" @@ -7485,86 +8097,87 @@ msgstr "Crea nuova posizione di magazzino" msgid "New Location" msgstr "Nuova Posizione" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" -msgstr "" +msgstr "Container magazzino scansionato in questa posizione" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "Codice QR Ubicazione Magazzino" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" -msgstr "" +msgstr "Collega il Codice a Barre alla Posizione Magazzino" #: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." -msgstr "" +msgstr "Caricamento..." #: stock/templates/stock/stock_sidebar.html:5 msgid "Stock Tracking" -msgstr "" +msgstr "Rilevamento Stock" #: stock/templates/stock/stock_sidebar.html:8 msgid "Allocations" -msgstr "" +msgstr "Assegnazioni" #: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" -msgstr "" - -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "QR Code della posizione magazzino" +msgstr "Elementi secondari" #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "" +msgstr "Permesso negato" #: templates/403.html:15 msgid "You do not have permission to view this page." -msgstr "" +msgstr "Non ha i permessi per visualizzare la pagina." #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "" +msgstr "Autenticazione Fallita" #: templates/403_csrf.html:14 msgid "You have been logged out from InvenTree." -msgstr "" +msgstr "Sei stato disconnesso da InvenTree." -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "Accedi" #: templates/404.html:6 templates/404.html:12 msgid "Page Not Found" -msgstr "" +msgstr "Pagina Non Trovata" #: templates/404.html:15 msgid "The requested page does not exist" -msgstr "" +msgstr "La pagina richiesta non esiste" #: templates/500.html:6 templates/500.html:12 msgid "Internal Server Error" -msgstr "" +msgstr "Errore Interno del Server" #: templates/500.html:15 #, python-format msgid "The %(inventree_title)s server raised an internal error" -msgstr "" +msgstr "Il server %(inventree_title)s ha rilevato un errore interno" #: templates/500.html:16 msgid "Refer to the error log in the admin interface for further details" -msgstr "" +msgstr "Consultare il log degli errori nell'interfaccia di amministrazione per ulteriori dettagli" #: templates/503.html:11 templates/503.html:34 msgid "Site is in Maintenance" -msgstr "" +msgstr "Il sito è in manutenzione" #: templates/503.html:40 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" +msgstr "Il sito è attualmente in manutenzione e dovrebbe essere online presto!" #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "" +msgstr "Indice" #: templates/InvenTree/index.html:88 msgid "Subscribed Parts" @@ -7580,27 +8193,27 @@ msgstr "Articoli Recenti" #: templates/InvenTree/index.html:119 msgid "BOM Waiting Validation" -msgstr "" +msgstr "Distinta base In Attesa Di Convalida" #: templates/InvenTree/index.html:145 msgid "Recently Updated" -msgstr "" +msgstr "Aggiornamento Recente" #: templates/InvenTree/index.html:168 msgid "Depleted Stock" -msgstr "" +msgstr "Stock esaurito" #: templates/InvenTree/index.html:178 msgid "Required for Build Orders" -msgstr "" +msgstr "Richiesto per gli Ordini di Produzione" #: templates/InvenTree/index.html:191 msgid "Expired Stock" -msgstr "" +msgstr "Stock Scaduto" #: templates/InvenTree/index.html:202 msgid "Stale Stock" -msgstr "" +msgstr "Stock obsoleto" #: templates/InvenTree/index.html:224 msgid "Build Orders In Progress" @@ -7608,76 +8221,82 @@ msgstr "Ordini di Produzione Attivi" #: templates/InvenTree/index.html:235 msgid "Overdue Build Orders" -msgstr "" +msgstr "Ordini Di Produzione Scaduti" #: templates/InvenTree/index.html:255 msgid "Outstanding Purchase Orders" -msgstr "" +msgstr "Ordini Di Acquisto In Corso" #: templates/InvenTree/index.html:266 msgid "Overdue Purchase Orders" -msgstr "" +msgstr "Ordini Di Acquisto In Ritardo" #: templates/InvenTree/index.html:286 msgid "Outstanding Sales Orders" -msgstr "" +msgstr "Ordini Di Vendita In Corso" #: templates/InvenTree/index.html:297 msgid "Overdue Sales Orders" -msgstr "" +msgstr "Ordini Di Vendita in ritardo" #: templates/InvenTree/index.html:312 msgid "InvenTree News" -msgstr "" +msgstr "Novità InvenTree" #: templates/InvenTree/index.html:314 msgid "Current News" -msgstr "" +msgstr "Notizie Attuali" #: templates/InvenTree/notifications/history.html:9 msgid "Notification History" -msgstr "" +msgstr "Cronologia Notifiche" + +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "Cancella Notifiche" #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" -msgstr "" +msgstr "Notifiche In Attesa" #: templates/InvenTree/notifications/inbox.html:13 #: templates/InvenTree/notifications/inbox.html:14 msgid "Mark all as read" -msgstr "" +msgstr "Segna tutte come lette" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" -msgstr "" +msgstr "Notifiche" #: templates/InvenTree/notifications/notifications.html:39 msgid "No unread notifications found" -msgstr "" +msgstr "Nessuna notifica non letta" #: templates/InvenTree/notifications/notifications.html:59 msgid "No notification history found" -msgstr "" +msgstr "Nessuna cronologia notifiche trovata" #: templates/InvenTree/notifications/notifications.html:67 msgid "Delete all read notifications" -msgstr "" +msgstr "Elimina tutte le notifiche lette" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" -msgstr "" +msgstr "Elimina notifica" #: templates/InvenTree/notifications/sidebar.html:8 msgid "Inbox" -msgstr "" +msgstr "Posta" #: templates/InvenTree/notifications/sidebar.html:10 msgid "History" -msgstr "" +msgstr "Cronologia" #: templates/InvenTree/search.html:8 msgid "Search Results" @@ -7685,11 +8304,11 @@ msgstr "Risultati della Ricerca" #: templates/InvenTree/settings/barcode.html:8 msgid "Barcode Settings" -msgstr "" +msgstr "Impostazioni codice a barre" #: templates/InvenTree/settings/build.html:8 msgid "Build Order Settings" -msgstr "" +msgstr "Impostazione Ordine di Produzione" #: templates/InvenTree/settings/category.html:7 msgid "Category Settings" @@ -7702,16 +8321,15 @@ msgstr "Impostazioni Server" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 msgid "Label Settings" -msgstr "" +msgstr "Impostazioni Etichetta" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "Impostazioni di accesso" #: templates/InvenTree/settings/login.html:16 msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" -msgstr "" +msgstr "L'email in uscita non è stata configurata. Alcune funzioni di login e di registrazione potrebbero non funzionare correttamente!" #: templates/InvenTree/settings/login.html:26 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 @@ -7720,279 +8338,292 @@ msgstr "Registrati" #: templates/InvenTree/settings/login.html:35 msgid "Single Sign On" -msgstr "" +msgstr "Accesso singolo" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" -msgstr "" +msgstr "Impostazioni" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "" +msgstr "URL" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format msgid "The Base-URL for this plugin is %(base)s." -msgstr "" +msgstr "L'URL di base per questo plugin è %(base)s." #: templates/InvenTree/settings/mixins/urls.html:23 msgid "Open in new tab" -msgstr "" +msgstr "Apri in una nuova scheda" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "Impostazioni Notifiche" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" -msgstr "" +msgstr "Slug" #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "Impostazioni articolo" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Importa Articolo" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Importa Articolo" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" -msgstr "" +msgstr "Modelli parametro articolo" + +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "Impostazioni Inventario" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "Report Inventario" #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" -msgstr "" +msgstr "Impostazioni Plugin" #: templates/InvenTree/settings/plugin.html:16 msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." -msgstr "" +msgstr "Cambiando le impostazioni qui sotto, si richiede di riavviare immediatamente il server. Non cambiare le impostazioni durante l'utilizzo." #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" -msgstr "" +msgstr "Plugin" #: templates/InvenTree/settings/plugin.html:44 #: templates/js/translated/plugin.js:16 msgid "Install Plugin" -msgstr "" +msgstr "Installa Plugin" #: templates/InvenTree/settings/plugin.html:52 msgid "External plugins are not enabled for this InvenTree installation" -msgstr "" +msgstr "I plugin esterni non sono abilitati per questa installazione InvenTree" #: templates/InvenTree/settings/plugin.html:64 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" -msgstr "" +msgstr "Versione" #: templates/InvenTree/settings/plugin.html:72 msgid "Active plugins" -msgstr "" +msgstr "Plugin attivi" #: templates/InvenTree/settings/plugin.html:80 msgid "Inactive plugins" -msgstr "" +msgstr "Plugin inattivi" #: templates/InvenTree/settings/plugin.html:94 msgid "Plugin Error Stack" -msgstr "" +msgstr "Plugin Errore Stack" #: templates/InvenTree/settings/plugin.html:103 msgid "Stage" -msgstr "" +msgstr "Stage" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" -msgstr "" +msgstr "Messaggio" #: templates/InvenTree/settings/plugin_details.html:32 #: templates/InvenTree/settings/plugin_settings.html:101 msgid "Builtin" -msgstr "" +msgstr "Integrato" #: templates/InvenTree/settings/plugin_details.html:38 msgid "Sample" -msgstr "" +msgstr "Esempio" #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" -msgstr "" +msgstr "Informazioni Plugin" #: templates/InvenTree/settings/plugin_settings.html:48 msgid "no version information supplied" -msgstr "" +msgstr "nessuna informazione di versione fornita" #: templates/InvenTree/settings/plugin_settings.html:62 msgid "License" -msgstr "" +msgstr "Licenza" #: templates/InvenTree/settings/plugin_settings.html:71 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "" +msgstr "Le informazioni sul codice vengono prelevate dall'ultimo commit git per questo plugin. Potrebbe non riflettere numeri di versione ufficiali o informazioni ma il codice effettivo in esecuzione." #: templates/InvenTree/settings/plugin_settings.html:77 msgid "Package information" -msgstr "" +msgstr "Informazioni Pacchetto" #: templates/InvenTree/settings/plugin_settings.html:83 msgid "Installation method" -msgstr "" +msgstr "Metodo d'installazione" #: templates/InvenTree/settings/plugin_settings.html:86 msgid "This plugin was installed as a package" -msgstr "" +msgstr "Questo plugin è stato installato come pacchetto" #: templates/InvenTree/settings/plugin_settings.html:88 msgid "This plugin was found in a local server path" -msgstr "" +msgstr "Questo plugin è stato trovato in un percorso server locale" #: templates/InvenTree/settings/plugin_settings.html:94 msgid "Installation path" -msgstr "" +msgstr "Percorso d'installazione" #: templates/InvenTree/settings/plugin_settings.html:102 msgid "This is a builtin plugin which cannot be disabled" -msgstr "" +msgstr "Questo è un plugin integrato che non può essere disabilitato" #: templates/InvenTree/settings/plugin_settings.html:107 msgid "Commit Author" -msgstr "" +msgstr "Autore Commit" #: templates/InvenTree/settings/plugin_settings.html:111 #: templates/about.html:36 msgid "Commit Date" -msgstr "" +msgstr "Data d'impegno" #: templates/InvenTree/settings/plugin_settings.html:115 #: templates/about.html:29 msgid "Commit Hash" -msgstr "" +msgstr "Commit Hash" #: templates/InvenTree/settings/plugin_settings.html:119 msgid "Commit Message" -msgstr "" +msgstr "Commit Messaggio" #: templates/InvenTree/settings/plugin_settings.html:127 msgid "Sign Status" -msgstr "" +msgstr "Stato Firma" #: templates/InvenTree/settings/plugin_settings.html:132 msgid "Sign Key" -msgstr "" +msgstr "Chiave Di Firma" #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" -msgstr "" +msgstr "Impostazioni Ordine di Acquisto" #: templates/InvenTree/settings/pricing.html:7 msgid "Pricing Settings" -msgstr "" +msgstr "Impostazioni Prezzi" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" -msgstr "" +msgstr "Tassi di cambio" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Aggiorna Ora" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" -msgstr "" +msgstr "Ultimo Aggiornamento" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Mai" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" +msgstr "Impostazioni Report" + +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" msgstr "" #: templates/InvenTree/settings/setting.html:31 msgid "No value set" -msgstr "" +msgstr "Nessun valore impostato" #: templates/InvenTree/settings/setting.html:44 msgid "Edit setting" -msgstr "" +msgstr "Modifica impostazioni" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" -msgstr "" +msgstr "Modifica Impostazioni Plugin" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" -msgstr "" +msgstr "Modifica Impostazioni Notifica" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" -msgstr "" +msgstr "Modifica Impostazioni Globali" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" -msgstr "" +msgstr "Modifica Impostazioni Utente" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" -msgstr "" +msgstr "Voto" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "Nessun parametro di categoria trovato" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" -msgstr "" +msgstr "Modifica Template" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" -msgstr "" +msgstr "Elimina Template" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "Crea Template Parametro Categoria" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "Elimina Modello Parametro Categoria" -#: templates/InvenTree/settings/settings.html:381 -msgid "No part parameter templates found" -msgstr "" +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "Crea Template Parametro Categoria" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:240 +msgid "No part parameter templates found" +msgstr "Nessun parametro dell'articolo templates trovato" + +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" -msgstr "" +msgstr "ID" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" -msgstr "" +msgstr "Crea Parametro Articolo Template" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" -msgstr "" +msgstr "Modifica Parametro Articolo Template" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" -msgstr "" +msgstr "Ogni parametro che fa riferimento a questo modello verrà eliminato" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" -msgstr "" +msgstr "Elimina Parametro Articolo Template" #: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 @@ -8000,53 +8631,56 @@ msgid "User Settings" msgstr "Impostazioni Utente" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" -msgstr "" +msgstr "Home Page" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Impostazioni di ricerca" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Cerca" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" -msgstr "" +msgstr "Rapporti" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" +msgstr "Impostazioni Globali" + +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "Server" + +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" -msgstr "" +msgstr "Categorie" #: templates/InvenTree/settings/so.html:7 msgid "Sales Order Settings" -msgstr "" +msgstr "Impostazioni Ordine di Vendita" #: templates/InvenTree/settings/stock.html:7 msgid "Stock Settings" -msgstr "" +msgstr "Impostazioni Magazzino" + +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Impostazioni Account" #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "Modifica Password" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "Modifica" @@ -8074,7 +8708,7 @@ msgstr "Cognome" #: templates/InvenTree/settings/user.html:54 msgid "The following email addresses are associated with your account:" -msgstr "" +msgstr "I seguenti indirizzi email sono associati con il tuo account:" #: templates/InvenTree/settings/user.html:75 msgid "Verified" @@ -8102,7 +8736,7 @@ msgstr "Attenzione:" #: templates/InvenTree/settings/user.html:96 msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." -msgstr "" +msgstr "Al momento non hai nessun indirizzo email impostato. Dovresti aggiungere un indirizzo email in modo da poter ricevere notifiche, reimpostare la password, ecc." #: templates/InvenTree/settings/user.html:104 msgid "Add Email Address" @@ -8114,166 +8748,170 @@ msgstr "Aggiungi Email" #: templates/InvenTree/settings/user.html:117 msgid "Social Accounts" -msgstr "" +msgstr "Account Social" #: templates/InvenTree/settings/user.html:122 msgid "You can sign in to your account using any of the following third party accounts:" -msgstr "" +msgstr "Puoi accedere al tuo account utilizzando uno dei seguenti account di terze parti:" #: templates/InvenTree/settings/user.html:158 msgid "There are no social network accounts connected to this account." -msgstr "" +msgstr "Non ci sono account di social network connessi a questo account." #: templates/InvenTree/settings/user.html:164 msgid "Add a 3rd Party Account" -msgstr "" +msgstr "Aggiungi un Account di Terze Parti" #: templates/InvenTree/settings/user.html:174 msgid "Multifactor" -msgstr "" +msgstr "Multifattore" #: templates/InvenTree/settings/user.html:179 msgid "You have these factors available:" -msgstr "" +msgstr "Sono disponibili questi fattori:" #: templates/InvenTree/settings/user.html:189 msgid "TOTP" -msgstr "" +msgstr "TOTP" #: templates/InvenTree/settings/user.html:195 msgid "Static" -msgstr "" +msgstr "Statico" #: templates/InvenTree/settings/user.html:204 msgid "Multifactor authentication is not configured for your account" -msgstr "" +msgstr "L'autenticazione multifattore non è configurata per il tuo account" #: templates/InvenTree/settings/user.html:211 msgid "Change factors" -msgstr "" +msgstr "Cambia fattori" #: templates/InvenTree/settings/user.html:212 msgid "Setup multifactor" -msgstr "" +msgstr "Imposta multifattore" #: templates/InvenTree/settings/user.html:214 msgid "Remove multifactor" -msgstr "" +msgstr "Rimuovi multifattore" #: templates/InvenTree/settings/user.html:222 msgid "Active Sessions" -msgstr "" +msgstr "Sessioni Attive" #: templates/InvenTree/settings/user.html:228 msgid "Log out active sessions (except this one)" -msgstr "" +msgstr "Disconnetti le sessioni attive (tranne questa)" #: templates/InvenTree/settings/user.html:229 msgid "Log Out Active Sessions" -msgstr "" +msgstr "Disconnetti Sessioni Attive" #: templates/InvenTree/settings/user.html:238 msgid "unknown on unknown" -msgstr "" +msgstr "sconosciuto su sconosciuto" #: templates/InvenTree/settings/user.html:239 msgid "unknown" -msgstr "" +msgstr "sconosciuto" #: templates/InvenTree/settings/user.html:243 msgid "IP Address" -msgstr "" +msgstr "Indirizzo IP" #: templates/InvenTree/settings/user.html:244 msgid "Device" -msgstr "" +msgstr "Dispositivo" #: templates/InvenTree/settings/user.html:245 msgid "Last Activity" -msgstr "" +msgstr "Ultima attività" #: templates/InvenTree/settings/user.html:258 #, python-format msgid "%(time)s ago (this session)" -msgstr "" +msgstr "%(time)s fa (questa sessione)" #: templates/InvenTree/settings/user.html:260 #, python-format msgid "%(time)s ago" -msgstr "" +msgstr "%(time)s fa" #: templates/InvenTree/settings/user.html:272 msgid "Do you really want to remove the selected email address?" -msgstr "" +msgstr "Vuoi davvero rimuovere gli indirizzi email selezionati?" + +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Impostazioni Schermo" #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" -msgstr "" +msgstr "Impostazioni tema" #: templates/InvenTree/settings/user_display.html:39 msgid "Select theme" -msgstr "" +msgstr "Seleziona tema" #: templates/InvenTree/settings/user_display.html:50 msgid "Set Theme" -msgstr "" +msgstr "Imposta Tema" #: templates/InvenTree/settings/user_display.html:58 msgid "Language Settings" -msgstr "" +msgstr "Impostazioni Lingua" #: templates/InvenTree/settings/user_display.html:67 msgid "Select language" -msgstr "" +msgstr "Selezionare lingua" #: templates/InvenTree/settings/user_display.html:83 #, python-format msgid "%(lang_translated)s%% translated" -msgstr "" +msgstr "%(lang_translated)s%% tradotto" #: templates/InvenTree/settings/user_display.html:85 msgid "No translations available" -msgstr "" +msgstr "Nessuna traduzione disponibile" #: templates/InvenTree/settings/user_display.html:92 msgid "Set Language" -msgstr "" +msgstr "Imposta Lingua" #: templates/InvenTree/settings/user_display.html:95 msgid "Some languages are not complete" -msgstr "" +msgstr "Alcune lingue non sono complete" #: templates/InvenTree/settings/user_display.html:97 msgid "Show only sufficent" -msgstr "" +msgstr "Mostra solo sufficiente" #: templates/InvenTree/settings/user_display.html:99 msgid "and hidden." -msgstr "" +msgstr "e nascosto." #: templates/InvenTree/settings/user_display.html:99 msgid "Show them too" -msgstr "" +msgstr "Mostra anche loro" #: templates/InvenTree/settings/user_display.html:106 msgid "Help the translation efforts!" -msgstr "" +msgstr "Aiuta gli sforzi di traduzione!" #: templates/InvenTree/settings/user_display.html:107 msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "" +msgstr "La traduzione in lingua nativa dell'applicazione web riceve contributi tramite community crowdin. I Contributi sono accolti favorevolmente e incoraggiati." #: templates/InvenTree/settings/user_display.html:108 msgid "InvenTree Translation Project" -msgstr "" +msgstr "InvenTree Progetto di Traduzione" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" -msgstr "" +msgstr "Impostazioni Home Page" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Impostazioni di ricerca" #: templates/about.html:9 msgid "InvenTree Version" @@ -8281,7 +8919,7 @@ msgstr "Versione di InvenTree" #: templates/about.html:14 msgid "Development Version" -msgstr "" +msgstr "Versione di Sviluppo" #: templates/about.html:17 msgid "Up to Date" @@ -8289,7 +8927,7 @@ msgstr "Aggiornato" #: templates/about.html:19 msgid "Update Available" -msgstr "" +msgstr "Aggiornamento Disponibile" #: templates/about.html:42 msgid "InvenTree Documentation" @@ -8297,39 +8935,39 @@ msgstr "Documentazione InvenTree" #: templates/about.html:47 msgid "API Version" -msgstr "" +msgstr "Versione API" #: templates/about.html:52 msgid "Python Version" -msgstr "" +msgstr "Versione di Python" #: templates/about.html:57 msgid "Django Version" -msgstr "" +msgstr "Versione Django" #: templates/about.html:62 msgid "View Code on GitHub" -msgstr "" +msgstr "Visualizza codice sorgente su GitHub" #: templates/about.html:67 msgid "Credits" -msgstr "" +msgstr "Crediti" #: templates/about.html:72 msgid "Mobile App" -msgstr "" +msgstr "App Mobile" #: templates/about.html:77 msgid "Submit Bug Report" -msgstr "" +msgstr "Invia Segnalazione Bug" #: templates/about.html:84 templates/clip.html:4 msgid "copy to clipboard" -msgstr "" +msgstr "copia negli appunti" #: templates/about.html:84 msgid "copy version information" -msgstr "" +msgstr "copia informazioni versione" #: templates/account/email_confirm.html:6 #: templates/account/email_confirm.html:10 @@ -8339,16 +8977,16 @@ msgstr "Conferma l'indirizzo e-mail" #: templates/account/email_confirm.html:16 #, python-format msgid "Please confirm that %(email)s is an email address for user %(user_display)s." -msgstr "" +msgstr "Si prega di confermare che %(email)s è un indirizzo email per l'utente %(user_display)s." -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Conferma" #: templates/account/email_confirm.html:30 #, python-format msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." -msgstr "" +msgstr "Questo link di conferma email è scaduto o non è valido. Per favoreinoltra una nuova richiesta di conferma email." #: templates/account/login.html:6 templates/account/login.html:17 #: templates/account/login.html:38 templates/socialaccount/login.html:4 @@ -8357,7 +8995,7 @@ msgstr "Accedi" #: templates/account/login.html:21 msgid "Not a member?" -msgstr "" +msgstr "Non sei ancora iscritto?" #: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 @@ -8371,7 +9009,7 @@ msgstr "Password dimenticata?" #: templates/account/login.html:53 msgid "or log in with" -msgstr "" +msgstr "o accedi con" #: templates/account/logout.html:5 templates/account/logout.html:8 #: templates/account/logout.html:20 @@ -8385,7 +9023,7 @@ msgstr "Sei sicuro di voler uscire?" #: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 #: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 msgid "Return to Site" -msgstr "" +msgstr "Ritorna al Sito" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 @@ -8406,12 +9044,12 @@ msgstr "Questa funzione è attualmente disabilitata. Contatta un amministratore. #: templates/account/password_reset_from_key.html:7 msgid "Bad Token" -msgstr "" +msgstr "Token Errato" #: templates/account/password_reset_from_key.html:11 #, python-format msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." -msgstr "" +msgstr "Il link di reset della password non era valido, forse perché è già stato utilizzato. Si prega di richiedere un nuovo reset della password." #: templates/account/password_reset_from_key.html:18 msgid "Change password" @@ -8424,26 +9062,26 @@ msgstr "La tua password è stata modificata." #: templates/account/signup.html:13 #, python-format msgid "Already have an account? Then please sign in." -msgstr "" +msgstr "Hai già un account? Allora accedi." #: templates/account/signup.html:28 msgid "Use a SSO-provider for signup" -msgstr "" +msgstr "Usa un SSO-provider per la registrazione" #: templates/account/signup_closed.html:5 #: templates/account/signup_closed.html:8 msgid "Sign Up Closed" -msgstr "" +msgstr "Registrazione Chiusa" #: templates/account/signup_closed.html:10 msgid "Sign up is currently closed." -msgstr "" +msgstr "L'iscrizione è attualmente chiusa." #: templates/account/signup_closed.html:15 #: templates/socialaccount/authentication_error.html:19 #: templates/socialaccount/login.html:25 templates/socialaccount/signup.html:27 msgid "Return to login page" -msgstr "" +msgstr "Torna alla pagina di login" #: templates/admin_button.html:8 msgid "View in administration panel" @@ -8451,124 +9089,125 @@ msgstr "Visualizza nel pannello di amministrazione" #: templates/allauth_2fa/authenticate.html:5 msgid "Two-Factor Authentication" -msgstr "" +msgstr "Autenticazione a Due Fattori" #: templates/allauth_2fa/authenticate.html:13 msgid "Authenticate" -msgstr "" +msgstr "Autenticazione" #: templates/allauth_2fa/backup_tokens.html:6 msgid "Two-Factor Authentication Backup Tokens" -msgstr "" +msgstr "Token Di Backup Dell'Autenticazione A Due Fattori" #: templates/allauth_2fa/backup_tokens.html:17 msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." -msgstr "" +msgstr "I token di backup sono stati generati, ma non vengono rivelati qui per motivi di sicurezza. Premi il pulsante qui sotto per generarne di nuovi." #: templates/allauth_2fa/backup_tokens.html:20 msgid "No backup tokens are available. Press the button below to generate some." -msgstr "" +msgstr "Nessun token di backup disponibile. Premi il pulsante qui sotto per generarne alcuni." #: templates/allauth_2fa/backup_tokens.html:28 msgid "Generate Tokens" -msgstr "" +msgstr "Genera token" #: templates/allauth_2fa/remove.html:6 msgid "Disable Two-Factor Authentication" -msgstr "" +msgstr "Disabilita Autenticazione a Due Fattori" #: templates/allauth_2fa/remove.html:9 msgid "Are you sure?" -msgstr "" +msgstr "Sei sicuro?" #: templates/allauth_2fa/remove.html:17 msgid "Disable 2FA" -msgstr "" +msgstr "Disabilita l'autenticazione a due fattori" #: templates/allauth_2fa/setup.html:6 msgid "Setup Two-Factor Authentication" -msgstr "" +msgstr "Imposta l'Autenticazione a Due Fattori" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" -msgstr "" +msgstr "Passaggio 1" #: templates/allauth_2fa/setup.html:14 msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "" +msgstr "Scansiona il codice QR qui sotto con un generatore di token di tua scelta (per esempio Google Authenticator)." #: templates/allauth_2fa/setup.html:23 msgid "Step 2" -msgstr "" +msgstr "Passaggio 2" #: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "" +msgstr "Inserisci un token generato dall'app:" #: templates/allauth_2fa/setup.html:37 msgid "Verify" -msgstr "" +msgstr "Verifica" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" -msgstr "" +msgstr "Aggiungi Collegamento" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "Aggiungi allegato" #: templates/attachment_table.html:11 msgid "Delete selected attachments" -msgstr "" +msgstr "Elimina allegati selezionati" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" -msgstr "" +msgstr "Elimina Allegati" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "Codice a Barre Identificativo" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "È necessario riavviare il server" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "Contatta l'amministratore per maggiori informazioni" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "Comprimi tutte le righe" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" -msgstr "" +msgstr "Clicca il seguente link per visualizzare quest'ordine" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "" +msgstr "La giacenza è richiesta per il seguente ordine di produzione" #: templates/email/build_order_required_stock.html:8 #, python-format msgid "Build order %(build)s - building %(quantity)s x %(part)s" -msgstr "" +msgstr "Ordine di produzione %(build)s - produzione %(quantity)s x %(part)s" #: templates/email/build_order_required_stock.html:10 msgid "Click on the following link to view this build order" -msgstr "" +msgstr "Clicca il seguente link per visualizzare quest'ordine di produzione" #: templates/email/build_order_required_stock.html:14 msgid "The following parts are low on required stock" -msgstr "" +msgstr "I seguenti articoli sono pochi nel magazzino richiesto" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "Quantità richiesta" @@ -8579,476 +9218,468 @@ msgstr "Stai ricevendo questa email perché sei iscritto alle notifiche per ques #: templates/email/low_stock_notification.html:9 msgid "Click on the following link to view this part" -msgstr "" +msgstr "Clicca il seguente link per visualizzare questo articolo" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "Quantità minima" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "Espandi tutte le righe" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" -msgstr "" +msgstr "Nessuna Risposta" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" -msgstr "" - -#: templates/js/translated/api.js:202 -msgid "Error 400: Bad request" -msgstr "" - -#: templates/js/translated/api.js:203 -msgid "API request returned error code 400" -msgstr "" - -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 -msgid "Error 401: Not Authenticated" -msgstr "" - -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 -msgid "Authentication credentials not supplied" -msgstr "" - -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 -msgid "Error 403: Permission Denied" -msgstr "" - -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 -msgid "You do not have the required permissions to access this function" -msgstr "" - -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 -msgid "Error 404: Resource Not Found" -msgstr "" - -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 -msgid "The requested resource could not be located on the server" -msgstr "" - -#: templates/js/translated/api.js:222 -msgid "Error 405: Method Not Allowed" -msgstr "" - -#: templates/js/translated/api.js:223 -msgid "HTTP method not allowed at URL" -msgstr "" - -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 -msgid "Error 408: Timeout" -msgstr "" - -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 -msgid "Connection timeout while requesting data from server" -msgstr "" +msgstr "Nessuna risposta dal server InvenTree" #: templates/js/translated/api.js:231 -msgid "Unhandled Error Code" -msgstr "" +msgid "Error 400: Bad request" +msgstr "Errore 400: Richiesta Errata" #: templates/js/translated/api.js:232 +msgid "API request returned error code 400" +msgstr "Richiesta API restituito codice di errore 400" + +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 +msgid "Error 401: Not Authenticated" +msgstr "Errore 401: Non Autenticato" + +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 +msgid "Authentication credentials not supplied" +msgstr "Credenziali di autenticazione non fornite" + +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 +msgid "Error 403: Permission Denied" +msgstr "Errore 403 - Permesso negato" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 +msgid "You do not have the required permissions to access this function" +msgstr "Non hai i permessi necessari per accedere a questa funzione" + +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 +msgid "Error 404: Resource Not Found" +msgstr "Errore 404: Risorsa Non Trovata" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 +msgid "The requested resource could not be located on the server" +msgstr "La risorsa richiesta non può essere localizzata sul server" + +#: templates/js/translated/api.js:251 +msgid "Error 405: Method Not Allowed" +msgstr "Errore 405: Metodo Non Consentito" + +#: templates/js/translated/api.js:252 +msgid "HTTP method not allowed at URL" +msgstr "Metodo HTTP non consentito all'URL" + +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 +msgid "Error 408: Timeout" +msgstr "Errore 408: Timeout" + +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 +msgid "Connection timeout while requesting data from server" +msgstr "Timeout connessione durante la richiesta di dati dal server" + +#: templates/js/translated/api.js:260 +msgid "Unhandled Error Code" +msgstr "Codice Di Errore Non Gestito" + +#: templates/js/translated/api.js:261 msgid "Error code" -msgstr "" +msgstr "Codice errore" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" -msgstr "" +msgstr "Tutti gli allegati selezionati saranno eliminati" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" -msgstr "" +msgstr "Allegati non trovati" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "Modifica allegato" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" -msgstr "" +msgstr "Data di Upload" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" -msgstr "" +msgstr "Modifica allegato" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" -msgstr "" +msgstr "Cancella allegato" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" -msgstr "" +msgstr "Scansiona il codice a barre usando uno scanner" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" -msgstr "" +msgstr "Inserire il codice a barre" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" -msgstr "" +msgstr "Scansiona il codice a barre usando la webcam" + +#: templates/js/translated/barcode.js:125 +msgid "Enter optional notes for stock transfer" +msgstr "Inserire le note facoltative per il trasferimento delle scorte" #: templates/js/translated/barcode.js:126 -msgid "Enter optional notes for stock transfer" -msgstr "" - -#: templates/js/translated/barcode.js:127 msgid "Enter notes" -msgstr "" +msgstr "Inserire le note" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" -msgstr "" +msgstr "Problemi con il server" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" -msgstr "" +msgstr "Risposta sconosciuta dal server" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" -msgstr "" +msgstr "Risposta del server non valida" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" -msgstr "" +msgstr "Scansione del codice a barre" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" -msgstr "" +msgstr "Scansiona codice a barre" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" -msgstr "" +msgstr "Nessuna risposta dall'URL" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" -msgstr "" +msgstr "Questo rimuoverà il collegamento al codice a barre associato" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" -msgstr "" +msgstr "Scollega" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" -msgstr "" +msgstr "Rimuovere l'articolo in magazzino" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" -msgstr "" +msgstr "Scansione articoli di magazzino in sede" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" -msgstr "" +msgstr "Scansione del codice a barre dell'articolo di magazzino per effettuare il check-in in questa sede" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" -msgstr "" +msgstr "Check In" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" -msgstr "" +msgstr "Non c'è un codice a barre" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" -msgstr "" +msgstr "Articolo di magazzino già scansionato" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "Elemento in giacenza già in questa posizione" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" -msgstr "" +msgstr "Aggiunta di un articolo di magazzino" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" -msgstr "" +msgstr "Il codice a barre non corrisponde a un articolo di magazzino valido" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" -msgstr "" +msgstr "Scansione delle scorte contenute in sede" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" -msgstr "" +msgstr "Scansionare il codice a barre di scorta contenuta per effettuare il check-in in questa sede" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" -msgstr "" +msgstr "Il codice a barre non corrisponde a una posizione di magazzino valida" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "Controlla Nella Posizione" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "Il codice a barre non corrisponde a una posizione valida" #: templates/js/translated/bom.js:47 msgid "Create BOM Item" -msgstr "" +msgstr "Creare un elemento della distinta base" #: templates/js/translated/bom.js:101 msgid "Display row data" -msgstr "" +msgstr "Visualizzare i dati" #: templates/js/translated/bom.js:157 msgid "Row Data" -msgstr "" +msgstr "Dati" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Chiudi" #: templates/js/translated/bom.js:275 msgid "Download BOM Template" -msgstr "" +msgstr "Scarica il modello di distinta base" #: templates/js/translated/bom.js:320 msgid "Multi Level BOM" -msgstr "" +msgstr "Distinta base multilivello" #: templates/js/translated/bom.js:321 msgid "Include BOM data for subassemblies" -msgstr "" +msgstr "Includere i dati della distinta base per i sottoassiemi" #: templates/js/translated/bom.js:326 msgid "Levels" -msgstr "" +msgstr "Livelli" #: templates/js/translated/bom.js:327 msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "" +msgstr "Selezionare il numero massimo di livelli di distinta base da esportare (0 = tutti i livelli)" #: templates/js/translated/bom.js:334 msgid "Include Alternative Parts" -msgstr "" +msgstr "Includere Articoli Alternativi" #: templates/js/translated/bom.js:335 msgid "Include alternative parts in exported BOM" -msgstr "" +msgstr "Includere articoli alternativi nella distinta base esportata" #: templates/js/translated/bom.js:340 msgid "Include Parameter Data" -msgstr "" +msgstr "Includere i dati dei parametri" #: templates/js/translated/bom.js:341 msgid "Include part parameter data in exported BOM" -msgstr "" +msgstr "Includere i dati dei parametri degli articoli nella distinta base esportata" #: templates/js/translated/bom.js:346 msgid "Include Stock Data" -msgstr "" +msgstr "Includere i dati delle scorte" #: templates/js/translated/bom.js:347 msgid "Include part stock data in exported BOM" -msgstr "" +msgstr "Includere i dati delle scorte dei pezzi nella distinta base esportata" #: templates/js/translated/bom.js:352 msgid "Include Manufacturer Data" -msgstr "" +msgstr "Includere i dati del produttore" #: templates/js/translated/bom.js:353 msgid "Include part manufacturer data in exported BOM" -msgstr "" +msgstr "Includere i dati del produttore delle parti nella distinta base esportata" #: templates/js/translated/bom.js:358 msgid "Include Supplier Data" -msgstr "" +msgstr "Includere i dati dei fornitori" #: templates/js/translated/bom.js:359 msgid "Include part supplier data in exported BOM" -msgstr "" +msgstr "Includere i dati del fornitore di parti nella distinta base esportata" #: templates/js/translated/bom.js:364 msgid "Include Pricing Data" -msgstr "" +msgstr "Includere i prezzi" #: templates/js/translated/bom.js:365 msgid "Include part pricing data in exported BOM" -msgstr "" +msgstr "Includere i prezzi delle parti nella distinta base esportata" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" -msgstr "" +msgstr "Rimuovi articolo sostitutivo" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" -msgstr "" +msgstr "Seleziona e aggiungi un nuovo articolo sostitutivo utilizzando l'input qui sotto" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" -msgstr "" +msgstr "Sei sicuro di voler rimuovere questo collegamento all' articolo sostitutivo?" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" -msgstr "" +msgstr "Rimuovi Articolo Sostitutivo" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" -msgstr "" +msgstr "Aggiungi Sostitutivo" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" -msgstr "" +msgstr "Modifica Elementi Sostitutivi Distinta Base" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" -msgstr "" +msgstr "Tutti gli elementi selezionati della Distinta Base saranno eliminati" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" -msgstr "" +msgstr "Elimina gli Elementi selezionati della Distinta Base?" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" -msgstr "" +msgstr "Carica la Distinta Base per il sotto assemblaggio" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" -msgstr "" +msgstr "Sostituti Disponibili" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" -msgstr "" +msgstr "Variante stock consentita" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" -msgstr "" +msgstr "Sostituti" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" -msgstr "" +msgstr "I prezzi Distinta Base sono completi" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" -msgstr "" +msgstr "I prezzi Distinta Base sono incompleti" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" -msgstr "" +msgstr "Nessun prezzo disponibile" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" -msgstr "" +msgstr "Nessuna Scorta Disponibile" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" -msgstr "" +msgstr "Include variante e scorte sostitutive" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" -msgstr "" +msgstr "Comprende varianti magazzino" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" -msgstr "" +msgstr "Comprende le scorte sostitutive" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" -msgstr "" +msgstr "Elementi consumabili" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" -msgstr "" +msgstr "Convalida elemento Distinta Base" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" -msgstr "" +msgstr "Questa linea è stata convalidata" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" -msgstr "" +msgstr "Modifica articoli sostitutivi" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" -msgstr "" +msgstr "Modifica elemento Distinta Base" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" -msgstr "" +msgstr "Cancella elemento Distinta Base" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "Visualizza Distinta Base" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" -msgstr "" +msgstr "Nessun elemento trovato in Distinta Base" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" -msgstr "" +msgstr "Articolo richiesto" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" -msgstr "" +msgstr "Ereditato dalla Distinta Base principale" #: templates/js/translated/build.js:96 msgid "Edit Build Order" -msgstr "" +msgstr "Modifica Ordine di produzione" #: templates/js/translated/build.js:139 msgid "Create Build Order" -msgstr "" +msgstr "Crea Ordine di Produzione" #: templates/js/translated/build.js:172 msgid "Cancel Build Order" -msgstr "" +msgstr "Annulla Ordine Di Produzione" #: templates/js/translated/build.js:181 msgid "Are you sure you wish to cancel this build?" -msgstr "" +msgstr "Sei sicuro di voler annullare questa produzione?" #: templates/js/translated/build.js:187 msgid "Stock items have been allocated to this build order" -msgstr "" +msgstr "Gli elementi di magazzino è stata assegnata a questo ordine di produzione" #: templates/js/translated/build.js:194 msgid "There are incomplete outputs remaining for this build order" -msgstr "" +msgstr "Ci sono output incompleti rimanenti per questo ordine di produzione" #: templates/js/translated/build.js:246 msgid "Build order is ready to be completed" -msgstr "" +msgstr "L'ordine di produzione è pronto per essere completato" #: templates/js/translated/build.js:254 msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "" +msgstr "Questo ordine di produzione non può essere completato in quanto ci sono output incompleti" #: templates/js/translated/build.js:259 msgid "Build Order is incomplete" -msgstr "" +msgstr "L'Ordine di Produzione è incompleto" #: templates/js/translated/build.js:277 msgid "Complete Build Order" -msgstr "" +msgstr "Completa l'Ordine di Produzione" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" -msgstr "" +msgstr "Il prossimo numero di serie disponibile è" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" -msgstr "" +msgstr "Ultimo Numero Di Serie" #: templates/js/translated/build.js:329 msgid "The Bill of Materials contains trackable parts" @@ -9056,1051 +9687,688 @@ msgstr "La distinta base contiene articoli tracciabili" #: templates/js/translated/build.js:330 msgid "Build outputs must be generated individually" -msgstr "" +msgstr "Gli outputs della produzione devono essere generati singolarmente" #: templates/js/translated/build.js:338 msgid "Trackable parts can have serial numbers specified" -msgstr "" +msgstr "Gli articoli tracciabili possono avere numeri di serie specificati" #: templates/js/translated/build.js:339 msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "" +msgstr "Inserisci i numeri seriali per generare più output di produzione" #: templates/js/translated/build.js:346 msgid "Create Build Output" -msgstr "" +msgstr "Crea Output di Produzione" #: templates/js/translated/build.js:377 msgid "Allocate stock items to this build output" -msgstr "" +msgstr "Assegna gli elementi di magazzino a questo output di produzione" #: templates/js/translated/build.js:388 msgid "Unallocate stock from build output" -msgstr "" +msgstr "Non assegnare stock all'output di produzione" #: templates/js/translated/build.js:397 msgid "Complete build output" -msgstr "" +msgstr "Completa output di produzione" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" -msgstr "" +msgstr "Cancella output di produzione" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" -msgstr "" +msgstr "Sei sicuro di voler annullare l'allocazione degli elementi stock da questa produzione?" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" -msgstr "" +msgstr "Non assegnare Elementi Stock" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" -msgstr "" +msgstr "Seleziona Output di produzione" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" -msgstr "" +msgstr "Almeno un output di produzione deve essere selezionato" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" -msgstr "" +msgstr "Output" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" -msgstr "" +msgstr "Completa l'output di produzione" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" -msgstr "" +msgstr "Cancella l'output di produzione" #: templates/js/translated/build.js:780 msgid "No build order allocations found" -msgstr "" +msgstr "Nessuna allocazione per l'ordine di produzione trovato" #: templates/js/translated/build.js:817 msgid "Location not specified" msgstr "Posizione non specificata" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" -msgstr "" +msgstr "Nessun output di produzione attivo trovato" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" -msgstr "" +msgstr "Scorte Assegnate" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" -msgstr "" +msgstr "Nessun elemento Distinta Base tracciato per questa produzione" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" -msgstr "" +msgstr "Test Completati" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" -msgstr "" +msgstr "Nessun test richiesto per questa produzione" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "Modifica allocazione magazzino" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "Elimina posizione giacenza" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "Modifica Posizione" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "Rimuovi Posizione" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" -msgstr "" +msgstr "Articoli sostitutivi disponibili" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" -msgstr "" +msgstr "Quantità Per" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" -msgstr "" +msgstr "Scorte insufficienti disponibili" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" -msgstr "" +msgstr "Scorte sufficienti disponibili" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" -msgstr "" +msgstr "Produci scorta" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" -msgstr "" +msgstr "Ordina scorta" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" -msgstr "" +msgstr "Assegna scorta" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "Seleziona Articoli" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" -msgstr "" +msgstr "È necessario selezionare almeno un articolo da assegnare" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "Specificare il quantitativo assegnato allo stock" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" -msgstr "" +msgstr "Tutti gli articoli assegnati" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" -msgstr "" +msgstr "Tutti gli articoli selezionati sono stati completamente assegnati" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "Seleziona la posizione di origine (lascia vuoto per prendere da tutte le posizioni)" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" -msgstr "" +msgstr "Assegna gli Elementi Stock all'Ordine di Produzione" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "Nessuna posizione di magazzino corrispondente" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" -msgstr "" +msgstr "Nessun elemento corrispondente trovato" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" -msgstr "" +msgstr "Assegna Automaticamente Scorte" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "" +msgstr "Gli elementi in magazzino saranno automaticamente assegnati a questo ordine di produzione, secondo le linee guida fornite" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" -msgstr "" +msgstr "Se viene specificata una posizione, le scorte saranno assegnate solo da quella ubicazione" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "" +msgstr "Se lo stock è considerato intercambiabile, sarà assegnato dal primo luogo in cui viene trovato" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "" +msgstr "Se lo stock sostitutivo è ammesso, sarà utilizzato nel caso in cui lo stock dell'articolo primario non possa essere trovato" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" -msgstr "" +msgstr "Assegna Elementi di Magazzino" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" -msgstr "" +msgstr "Nessuna produzione corrispondente alla ricerca" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" -msgstr "" +msgstr "Seleziona" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" -msgstr "" +msgstr "L'ordine di produzione è in ritardo" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" -msgstr "" +msgstr "Avanzamento" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" +msgstr "Nessuna informazione utente" + +#: templates/js/translated/build.js:2681 +msgid "group" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" -msgstr "" +msgstr "Nessun articolo assegnato per" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" -msgstr "" +msgstr "Aggiungi Produttore" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" -msgstr "" +msgstr "Aggiungi Articolo Produttore" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" -msgstr "" +msgstr "Modifica Articolo Produttore" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "Aggiungi fornitore" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "Aggiungi fornitore articolo" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "Tutte gli articoli del fornitore selezionati saranno eliminati" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" -msgstr "" +msgstr "Cancella Articoli Fornitore" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" -msgstr "" +msgstr "Aggiungi nuova Azienda" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "Fornitori articoli" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" -msgstr "" +msgstr "Articoli prodotti" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" +msgstr "Nessuna informazione azienda trovata" + +#: templates/js/translated/company.js:587 +msgid "Create New Contact" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" -msgstr "" +msgstr "Tutti gli articoli del produttore selezionati saranno eliminati" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" -msgstr "" +msgstr "Elimina Articoli Produttore" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" -msgstr "" +msgstr "Tutti i parametri selezionati saranno cancellati" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Elimina Parametri" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" -msgstr "" +msgstr "Nessun articolo produttore trovato" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" -msgstr "" +msgstr "Modello Articolo" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" -msgstr "" +msgstr "Articolo assemblato" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" -msgstr "" +msgstr "Nessun parametro trovato" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "Modifica parametro" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "Elimina il parametro" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "Modifica parametro" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "Elimina Parametri" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "Nessun fornitore trovato" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" -msgstr "" +msgstr "Disponibilità" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "Modifica articolo fornitore" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "Elimina articolo fornitore" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "Elimina riduzione di prezzo" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" -msgstr "" +msgstr "Modifica Prezzo Limite" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "Nessuna informazione di riduzione di prezzo trovata" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" -msgstr "" +msgstr "Ultimo aggiornamento" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "Modifica riduzione di prezzo" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "Cancella riduzione di prezzo" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "vero" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "falso" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "Seleziona filtro" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" -msgstr "Ricarica dati" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" +msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "Aggiungi nuovo filtro" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "Cancella tutti i filtri" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "Crea filtro" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "Azione Vietata" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "Crea operazione non consentita" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "Operazione di aggiornamento non consentita" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "Operazione di eliminazione non consentita" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "Mostra operazione non consentita" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" -msgstr "" +msgstr "Mantieni aperto questo modulo" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "Inserisci un numero valido" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" -msgstr "" +msgstr "Esistono errori nel modulo" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "Nessun risultato trovato" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "Ricerca" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "Cancella input" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" -msgstr "" +msgstr "Colonna File" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" -msgstr "" +msgstr "Nome del campo" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" -msgstr "" +msgstr "Seleziona Colonne" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "SÌ" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" -msgstr "" +msgstr "NO" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" -msgstr "" +msgstr "Note aggiornate" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "Gli elementi disponibili devono essere selezionati prima di stampare le etichette" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "Nessuna etichetta trovata" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "Nessuna etichetta trovata che corrisponde agli elementi stock selezionati" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "Seleziona Posizioni Giacenza" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "Le allocazioni delle giacenze devono essere selezionate prima di stampare le etichette" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "Nessuna etichetta trovata che corrisponde alle posizioni di magazzino selezionate" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "Gli elementi disponibili devono essere selezionati prima di stampare le etichette" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "Nessuna etichetta trovata che corrisponde agli elementi stock selezionati" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" -msgstr "" +msgstr "Seleziona Stampante" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" -msgstr "" +msgstr "Esporta in PDF" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "elemento stock creato" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "Seleziona Modello Etichetta" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "Nessuna etichetta trovata" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "Etichette inviate alla stampante" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Annulla" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Invia" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "Titolo modulo" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "In attesa del server..." -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "Informazioni sull'errore" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "Accetta" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" -msgstr "" +msgstr "Caricamento Dati" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "Risposta dal server non valida" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" -msgstr "" +msgstr "Dati del modulo mancanti dalla risposta server" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" -msgstr "" +msgstr "Errore nel pubblicare i dati del modulo" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" -msgstr "" +msgstr "Dati del modulo mancanti di risposta JSON" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" -msgstr "" +msgstr "Errore 400: Richiesta Non Valida" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" -msgstr "" +msgstr "Il server ha restituito codice di errore 400" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" -msgstr "" - -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "ID azienda" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "ID Giacenza" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "ID Ordine" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "ID articolo produttore" +msgstr "Errore nella richiesta di dati modulo" #: templates/js/translated/news.js:24 msgid "No news found" -msgstr "" +msgstr "Nessuna notizia trovata" #: templates/js/translated/notification.js:42 msgid "Age" -msgstr "" +msgstr "Età" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "Notifiche" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" -msgstr "" +msgstr "Segna come non letto" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" -msgstr "" +msgstr "Segna come letto" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" -msgstr "" +msgstr "Nessuna notifica non letta" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" +msgstr "Le notifiche verranno caricate qui" + +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" -msgstr "" - -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "Aggiungi cliente" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Modifica ordine d'acquisto" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" -msgstr "" +msgstr "Esporta Ordine" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "Quantità da ricevere" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "Stato giacenza" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Codice ordine" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Ordinato" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "Totale" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "Prezzo Unitario" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Prezzo Totale" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" -msgstr "" +msgstr "Duplica Linea" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" -msgstr "" +msgstr "Modifica Linea" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" -msgstr "" +msgstr "Cancella Linea" -#: templates/js/translated/order.js:2687 -msgid "No matching line" -msgstr "" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" +msgstr "Nessuna linea elementi trovata" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" +msgstr "Duplica linea" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" -msgstr "Cliente non valido" +#: templates/js/translated/order.js:345 +msgid "Edit line" +msgstr "Modifica linea" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Conferma l'assegnazione della giacenza" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "Nessun ordine di vendita trovato" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "Modifica posizione giacenza" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "Conferma Operazione Eliminazione" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "Elimina posizione giacenza" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "Spedito al cliente" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "Nessun posizione specificata" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Prezzo d'acquisto" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Calcola il prezzo" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" -msgstr "" +#: templates/js/translated/order.js:349 +msgid "Delete line" +msgstr "Cancella linea" #: templates/js/translated/part.js:56 msgid "Part Attributes" @@ -10108,1148 +10376,1594 @@ msgstr "Attributi Articolo" #: templates/js/translated/part.js:60 msgid "Part Creation Options" -msgstr "" +msgstr "Opzioni Creazione Articolo" #: templates/js/translated/part.js:64 msgid "Part Duplication Options" -msgstr "" +msgstr "Opzioni Duplicazione Articolo" #: templates/js/translated/part.js:87 msgid "Add Part Category" msgstr "Aggiungi Categoria Articolo" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "Copia Parametri Categoria" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "Categoria articolo principale" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" -msgstr "" +msgstr "Icona (opzionale) - Esplora tutte le icone disponibili su" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "Modifica Categoria Articoli" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" -msgstr "" +msgstr "Sei sicuro di voler eliminare questa categoria articolo?" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" -msgstr "" +msgstr "Sposta nella categoria superiore" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "Elimina categoria" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" -msgstr "" +msgstr "Azione articoli in questa categoria" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" -msgstr "" +msgstr "Azione per categorie secondarie" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "Crea Articolo" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "Crea un altro articolo dopo questo" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "Articolo creato con successo" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "Modifica l'articolo" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "Articolo modificato" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" -msgstr "" - -#: templates/js/translated/part.js:437 -msgid "Active Part" -msgstr "" - -#: templates/js/translated/part.js:438 -msgid "Part cannot be deleted as it is currently active" -msgstr "" +msgstr "Crea Varianti Articolo" #: templates/js/translated/part.js:452 +msgid "Active Part" +msgstr "Articolo Attivo" + +#: templates/js/translated/part.js:453 +msgid "Part cannot be deleted as it is currently active" +msgstr "L'articolo non può essere eliminato poiché è attualmente attivo" + +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" -msgstr "" +msgstr "L'eliminazione di questo articolo non è reversibile" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" -msgstr "" +msgstr "Tutte le giacenze per questo articolo verranno eliminate" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" -msgstr "" +msgstr "Questo articolo verrà eliminato da qualsiasi Fattura dei Materiali" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" -msgstr "" +msgstr "Tutte le informazioni del produttore e del fornitore per questo articolo verranno eliminate" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" -msgstr "" +msgstr "Cancella Articolo" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "Sei iscritto alle notifiche per questo elemento" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "Hai sottoscritto le notifiche per questo elemento" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" -msgstr "" +msgstr "Sottoscrivi le notifiche per questo elemento" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "Hai annullato l'iscrizione alle notifiche per questo elemento" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" -msgstr "" +msgstr "La convalida della Distinta Base segnerà ogni voce di riga come valida" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "Convalida la distinta dei materiali" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" -msgstr "" +msgstr "Valida Fattura dei Materiali" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" -msgstr "" +msgstr "Copia Fattura dei Materiali" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "In esaurimento" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" +msgstr "Nessuno stock disponibile" + +#: templates/js/translated/part.js:669 +msgid "Demand" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "Unità" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "Parte tracciabile" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "Parte virtuale" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "Parte sottoscritta" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "Parte vendibile" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" -msgstr "" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." +msgstr "Programmare la generazione di un nuovo report inventario." -#: templates/js/translated/part.js:744 -msgid "Update item" -msgstr "" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." +msgstr "Una volta completato, il report inventario sarà disponibile per il download." -#: templates/js/translated/part.js:745 -msgid "Delete item" -msgstr "" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" +msgstr "Genera Report Inventario" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "Programma report inventario" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" -msgstr "" +msgstr "Nessuna informazione sull'inventario disponibile" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" -msgstr "" +msgstr "Modifica Voce Inventario" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" -msgstr "" +msgstr "Elimina Voce Inventario" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Nessuna variante trovata" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "Nessun ordine d'acquisto trovato" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "Questo elemento è in ritardo" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "Ricevi linea elemento" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "Elimina relazione tra i componenti" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" -msgstr "" +msgstr "Elimina Relazione Articolo" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "Nessun articolo trovato" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Nessuna categoria" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Visualizza come elenco" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Visualizza come griglia" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" -msgstr "" +msgstr "Imposta la categoria prodotto per i prodotti selezionati" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "Imposta categoria articolo" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" -msgstr "" +msgstr "Seleziona Categoria Articolo" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" -msgstr "" +msgstr "Carica Sotto Categorie" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Visualizza come struttura ad albero" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" -msgstr "" +msgstr "Carica Sotto Categorie" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "Categoria sottoscritta" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "Nessun modello di test corrispondente" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "Modificare il risultato del test" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "Cancellare il risultato del test" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" -msgstr "" +msgstr "Questo test è definito per un articolo principale" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" -msgstr "" +msgstr "Modifica Modello Risultato Test" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" -msgstr "" +msgstr "Elimina Modello Risultato Test" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" -msgstr "" +msgstr "Nessuna data specificata" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" -msgstr "" +msgstr "La data specificata è nel passato" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" -msgstr "" +msgstr "Speculativo" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" -msgstr "" +msgstr "Nessuna informazione di pianificazione disponibile per questo prodotto" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" -msgstr "" +msgstr "Errore nel recupero delle informazioni di programmazione per questo articolo" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" -msgstr "" +msgstr "Quantità Di Scorte Programmate" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" -msgstr "" +msgstr "Quantità Massima" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" -msgstr "" +msgstr "Livello Minimo Stock" #: templates/js/translated/plugin.js:23 msgid "The Plugin was installed" msgstr "Il Plugin è stato installato" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" -msgstr "" +msgstr "Errore durante il recupero dati" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" -msgstr "" +msgstr "Nessun dato Distinta Base disponibile" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" -msgstr "" +msgstr "Nessun dato di prezzo disponibile per il fornitore" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" -msgstr "" +msgstr "Nessun dato disponibile prezzo limite" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "Modifica ${human_name}" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "Elimina ${human_name}" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" -msgstr "" +msgstr "Nessun dato della cronologia di acquisto disponibile" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" -msgstr "" +msgstr "Cronologia Prezzi Acquisto" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" -msgstr "" +msgstr "Nessun dato della cronologia di vendita disponibile" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" -msgstr "" +msgstr "Cronologia Prezzo Vendita" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" -msgstr "" +msgstr "Non sono disponibili dati varianti" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" +msgstr "Variante Articolo" + +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "Selezione l'ordine di acquisto da duplicare" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "Duplica linee degli elementi" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "Duplica tutte le linee elementi dall'ordine selezionato" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "Duplica Linee Extra" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "Duplica elementi linee extra dall'ordine selezionato" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "Modifica ordine d'acquisto" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "Opzioni Duplicazione" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "Completa Ordine D'Acquisto" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "Contrassegnare questo ordine come completato?" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "Tutti gli elementi della riga sono stati ricevuti" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "Questo ordine ha elementi di riga che non sono stati contrassegnati come ricevuti." + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "Completare questo ordine significa che l'ordine e gli elementi della riga non saranno più modificabili." + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "Annulla Ordine di Acquisto" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "Sei sicuro di voler annullare questo ordine di acquisto?" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "Questo ordine d'acquisto non può essere cancellato" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "Problema Ordine di Acquisto" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "Deve essere selezionata almeno un articolo acquistabile" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "Quantità da ordinare" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "Nuovo articolo fornitore" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "Nuovo ordine d'acquisto" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "Aggiungi ordine d'acquisto" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "Nessun fornitore articolo corrispondente" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "Nessun ordine di acquisto corrispondente trovato" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "Seleziona Linee Elementi" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "È necessario selezionare almeno una linea elemento" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "Quantità Ricevuta" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "Quantità da ricevere" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "Stato giacenza" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "Aggiungi codice lotto" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "Aggiungi numeri seriali" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "Codice ordine" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "Quantità da Ricevere" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "Conferma la ricezione degli elementi" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "Ricevi Elementi Ordine D'Acquisto" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "L'Ordine è in ritardo" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Elementi" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "Duplica Linee Elementi" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "Modifica Linee Elementi" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "Cancella Linea Elemento" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "Duplica linea elemento" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "Modifica linea elemento" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "Cancella linea elemento" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "elementi selezionati" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" -msgstr "" +msgstr "Seleziona Modello Report" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" -msgstr "" +msgstr "Seleziona Modello Test Report" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "Nessun Report Trovato" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" +msgstr "Aggiungi cliente" + +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "Cliente non valido" + +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "Nessun elemento di riga corrispondente" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "Crea Ordine di Vendita" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "Modifica Ordine di Vendita" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "Nessun elemento di magazzino disponibile è stato assegnato a questa spedizione" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "I seguenti elementi in magazzino saranno spediti" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "Completa Spedizione" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "Conferma Spedizione" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "Nessuna spedizione in sospeso trovata" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "Nessun elemento di magazzino disponibile è stato assegnato a questa spedizione" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "Spedizioni Completate" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "Salta" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "Questo ordine ha elementi di riga che non sono stati completati." + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "Annulla Ordine di Vendita" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "Cancellando questo ordine, l'ordine non sarà più modificabile." + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "Crea Nuova Spedizione" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "Non sono state trovati ordini di vendita" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "Modifica spedizione" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "Completa spedizione" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "Elimina spedizione" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "Modifica spedizione" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "Elimina Spedizione" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "Nessuna spedizione corrispondente trovata" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "Riferimento della spedizione" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "Non spedito" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "Tracciamento" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "Fattura" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "Aggiungi Spedizione" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Conferma l'assegnazione della giacenza" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "Assegna Elementi di Magazzino all'Ordine di Vendita" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "Nessun ordine di vendita trovato" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "Modifica posizione giacenza" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "Conferma Operazione Eliminazione" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "Elimina posizione giacenza" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "Spedito al cliente" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "Nessun posizione specificata" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "Assegna Numeri di Serie" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "Prezzo d'acquisto" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "Calcola il prezzo" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "Non può essere eliminato perché gli elementi sono stati spediti" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "Non può essere eliminato perché gli elementi sono stati assegnati" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "Assegna Numeri di Serie" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "Aggiorna Prezzo Unitario" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" -msgstr "" +msgstr "Minimizza risultati" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" -msgstr "" +msgstr "Rimuovi risultati" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" -msgstr "" +msgstr "Serializza Elementi di Magazzino" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" -msgstr "" +msgstr "Conferma Serializzazione Magazzino" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "Posizione giacenza principale" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "Modifica Posizione Giacenza" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "Nuova posizione giacenza" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "Sei sicuro di voler eliminare questa posizione?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" -msgstr "" +msgstr "Sposta nella posizione principale magazzino" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "Elimina Posizione di Giacenza" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" -msgstr "" +msgstr "Azione per gli elementi stock in questa posizione magazzino" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" -msgstr "" +msgstr "Azione per sotto-ubicazioni" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" -msgstr "" +msgstr "Questo articolo non può essere serializzato" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "Inserisci quantità iniziale per questo articolo in giacenza" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Inserire i numeri di serie per la nuova giacenza (o lasciare vuoto)" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" -msgstr "" +msgstr "Elemento di magazzino duplicato" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:404 -msgid "Are you sure you want to delete this stock item?" -msgstr "" +msgstr "Duplica elemento di magazzino" #: templates/js/translated/stock.js:409 +msgid "Are you sure you want to delete this stock item?" +msgstr "Sei sicuro di voler rimuovere questo elemento di magazzino?" + +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" -msgstr "" +msgstr "Cancella Elemento di Magazzino" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" -msgstr "" +msgstr "Modifica elemento magazzino" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "Crea nuova allocazione magazzino" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "Creato più elementi stock" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" -msgstr "" +msgstr "Trova Numero Di Serie" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" -msgstr "" +msgstr "Inserisci numero di serie" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" -msgstr "" +msgstr "Inserisci un numero di serie" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" -msgstr "" +msgstr "Nessun numero di serie corrispondente" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" -msgstr "" +msgstr "Trovati più di un risultato corrispondente" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" -msgstr "" +msgstr "Conferma l'assegnazione delle scorte" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" -msgstr "" +msgstr "Assegnare la scorta al cliente" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" -msgstr "" +msgstr "Attenzione: L'operazione di unione non può essere annullata" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" -msgstr "" +msgstr "Alcune informazioni andranno perse durante la fusione degli articoli di magazzino" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" -msgstr "" +msgstr "La cronologia delle transazioni di magazzino verrà eliminata per gli articoli uniti" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" -msgstr "" +msgstr "Le informazioni sulle parti del fornitore verranno eliminate per gli articoli uniti" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" -msgstr "" +msgstr "Confermare l'unione degli articoli di magazzino" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" -msgstr "" +msgstr "Unire gli articoli di magazzino" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "Trasferisci giacenza" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "Sposta" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "Conta giacenza" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "Conta" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "Rimuovi giacenza" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "Prendi" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "Aggiungi giacenza" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "Aggiungi" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "Elimina Stock" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "" +msgstr "La quantità non può essere regolata per le scorte serializzate" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "Specificare la quantità di magazzino" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "Seleziona Elementi Magazzino" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "Devi selezionare almeno un articolo disponibile" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" -msgstr "" - -#: templates/js/translated/stock.js:1276 -msgid "PASS" -msgstr "" - -#: templates/js/translated/stock.js:1278 -msgid "FAIL" -msgstr "" +msgstr "Confermare l'adeguamento delle scorte" #: templates/js/translated/stock.js:1283 +msgid "PASS" +msgstr "OK" + +#: templates/js/translated/stock.js:1285 +msgid "FAIL" +msgstr "FALLITO" + +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "NESSUN RISULTATO" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" -msgstr "" +msgstr "Test OK" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "Aggiungi risultato test" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "Nessun risultato di prova trovato" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" -msgstr "" +msgstr "Data del test" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" -msgstr "" +msgstr "Modifica del risultato del test" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" -msgstr "" +msgstr "Cancellare il risultato del test" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "In produzione" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "Installato nell'elemento stock" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "Assegnato all'ordine di vendita" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "Nessuna giacenza impostata" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "L'articolo di magazzino è in produzione" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" -msgstr "" +msgstr "Articolo di magazzino assegnato all'ordine di vendita" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "Articolo stock assegnato al cliente" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" -msgstr "" +msgstr "L'articolo di magazzino serializzato è stato assegnato" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" -msgstr "" +msgstr "La voce di magazzino è stata completamente assegnata" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" -msgstr "" +msgstr "La voce di magazzino è stata parzialmente allocata" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "L'elemento stock è stato installato in un altro articolo" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "L'articolo stock è scaduto" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "Articolo in giacenza prossimo alla scadenza" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "L'articolo stock è stato rifiutato" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" -msgstr "" +msgstr "L'articolo di magazzino è andato perso" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" -msgstr "" +msgstr "Articolo di magazzino distrutto" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "Esaurito" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" +msgstr "Fornitore dell'articolo non specificato" + +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" -msgstr "" +msgstr "Nessun articolo in magazzino corrispondente alla richiesta" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" -msgstr "" +msgstr "Impostare lo stato delle scorte" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" -msgstr "" +msgstr "Selezionare il codice di stato" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" -msgstr "" +msgstr "Il codice di stato deve essere selezionato" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" -msgstr "" +msgstr "Caricare sublocazioni" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" -msgstr "" +msgstr "Dettagli" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" -msgstr "" +msgstr "Informazioni sull'articolo non disponibili" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "La posizione non esiste più" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" +msgstr "L'ordine di acquisto non esiste più" + +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" -msgstr "" +msgstr "Il cliente non esiste più" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" -msgstr "" +msgstr "L'articolo in magazzino non esiste più" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "Aggiunto" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "Rimosso" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" -msgstr "" +msgstr "Nessun elemento installato" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" -msgstr "" +msgstr "Disinstallare l'articolo di magazzino" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" -msgstr "" +msgstr "Selezionare l'articolo di magazzino da disinstallare" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" -msgstr "" +msgstr "Installare un altro articolo di magazzino in questo articolo" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" -msgstr "" +msgstr "Gli articoli in magazzino possono essere installati solo se soddisfano i seguenti criteri" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "" +msgstr "L'articolo di magazzino si collega a un'articolo che è la distinta base di questo articolo di magazzino" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" -msgstr "" +msgstr "L'articolo in stock è attualmente disponibile in magazzino" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" -msgstr "" +msgstr "L'articolo di magazzino non è già installato in un altro articolo" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "" +msgstr "L'articolo di magazzino è tracciato da un codice di lotto o da un numero di serie" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" -msgstr "" +msgstr "Selezionare la parte da installare" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "Convalidato" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "Includi sottoallocazioni/posizioni" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "Includi posizioni" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "Includi sottocategorie" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "Sottoscritto" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Codice Lotto" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "Elementi attivi" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "L'elemento è stato posizionato" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "Includi elementi in giacenza nelle sottoallocazioni" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "Mostra gli elementi che sono in giacenza" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "In Produzione" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "Mostra gli elementi in produzione" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "Includi Varianti" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "Includi gli articoli stock per le varianti degli articoli" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "Installato" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "Mostra gli elementi stock che sono installati in un altro elemento" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "Mostra elementi che sono stati assegnati a un cliente" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "Stato magazzino" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "Ha il prezzo d'acquisto" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "Mostra gli articoli di magazzino che hanno un prezzo di acquisto impostato" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "Mostra gli elementi in giacenza scaduti" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "Mostra giacenza prossima alla scadenza" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "Stato Build" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "Stato dell'ordine" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "In Sospeso" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "Assegnato a me" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "Articolo tracciabile" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "Articolo assemblato" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "Ha scorte disponibili" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "Varianti consentite" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "Prezzo" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "Includi sottoallocazioni/posizioni" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "Includi posizioni" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "Includi sottocategorie" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "Sottoscritto" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "E' Serializzato" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "Numero di serie GTE" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "Numero di serie maggiore di o uguale a" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "Numero di serie LTE" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "Numero di serie inferiore di o uguale a" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "Numero di serie" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "Codice Lotto" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "Elementi attivi" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "Mostra stock per gli articoli attivi" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "L'articolo è un assemblato" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "È assegnato" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "L'elemento è stato posizionato" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "Stock disponibile per l'utilizzo" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "Includi elementi in giacenza nelle sottoallocazioni" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "Mostra gli elementi di magazzino che sono esauriti" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "Mostra gli elementi che sono in giacenza" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "In Produzione" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "Mostra gli elementi in produzione" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "Includi Varianti" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "Includi gli articoli stock per le varianti degli articoli" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "Installato" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "Mostra gli elementi stock che sono installati in un altro elemento" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "Mostra elementi che sono stati assegnati a un cliente" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "Stato magazzino" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "Ha codice lotto" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "Monitorato" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "L'articolo stock è monitorato dal codice lotto o dal numero di serie" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "Ha il prezzo d'acquisto" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "Mostra gli articoli di magazzino che hanno un prezzo di acquisto impostato" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "Data di scadenza precedente" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "Data di scadenza successiva" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "Mostra gli elementi in giacenza scaduti" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "Mostra giacenza prossima alla scadenza" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "Test superato" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "Includi Elementi Installati" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "Stato Build" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "Includi articoli nelle sottocategorie" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "Visualizza articoli attivi" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" -msgstr "" +msgstr "Stock disponibile" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "Ha IPN" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "L'articolo possiede un part number interno" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" -msgstr "" +msgstr "In giacenza" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "Acquistabile" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" -msgstr "" +msgstr "Ha voci d'inventario" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Visualizzazione calendario" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Visualizzazione elenco" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" -msgstr "" +msgstr "Visualizza vista albero" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "Espandi tutte le righe" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "Comprimi tutte le righe" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" -msgstr "" +msgstr "Esporta Dati Tabella" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" -msgstr "" +msgstr "Seleziona Formato File" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "Caricamento dati" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "righe per pagina" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "Mostra tutte le righe" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Visualizzo" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "a" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "di" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "righe" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Cerca" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Nessun risultato corrispondente" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "Mostra/nascondi la paginazione" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "Attiva/disattiva" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Colonne" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "Tutti" @@ -11261,33 +11975,29 @@ msgstr "Acquista" msgid "Sell" msgstr "Vendi" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" -msgstr "" +msgstr "Mostra Notifiche" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" -msgstr "" +msgstr "Nuove Notifiche" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "Amministratore" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Esci" #: templates/notes_buttons.html:6 templates/notes_buttons.html:7 msgid "Save" -msgstr "" +msgstr "Salva" #: templates/notifications.html:13 msgid "Show all notifications and history" -msgstr "" - -#: templates/price_data.html:7 -msgid "No data" -msgstr "" +msgstr "Mostra tutte le notifiche e la cronologia" #: templates/qr_code.html:11 msgid "QR data not provided" @@ -11303,73 +12013,62 @@ msgstr "Accedi di nuovo" #: templates/search.html:9 msgid "Show full search results" -msgstr "" +msgstr "Visualizza tutti i risultati di ricerca" #: templates/search.html:12 msgid "Clear search" -msgstr "" +msgstr "Cancella ricerca" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" -msgstr "" - -#: templates/search.html:35 -msgid "No search results" -msgstr "" +msgstr "Chiudi menu di ricerca" #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" -msgstr "" +msgstr "Errore Accesso Social Network" #: templates/socialaccount/authentication_error.html:8 msgid "Account Login Failure" -msgstr "" +msgstr "Accesso Account Fallito" #: templates/socialaccount/authentication_error.html:11 msgid "An error occurred while attempting to login via your social network account." -msgstr "" +msgstr "Si è verificato un errore durante il tentativo di accedere tramite il tuo account di social network." #: templates/socialaccount/authentication_error.html:13 msgid "Contact your system administrator for further information." -msgstr "" +msgstr "Contatta l'amministratore di sistema per maggiori informazioni." #: templates/socialaccount/login.html:8 #, python-format msgid "Connect %(provider)s" -msgstr "" +msgstr "Connetti %(provider)s" #: templates/socialaccount/login.html:10 #, python-format msgid "You are about to connect a new third party account from %(provider)s." -msgstr "" +msgstr "Stai per connettere un nuovo account di terze parti da %(provider)s." #: templates/socialaccount/login.html:12 #, python-format msgid "Sign In Via %(provider)s" -msgstr "" +msgstr "Accedi Via %(provider)s" #: templates/socialaccount/login.html:14 #, python-format msgid "You are about to sign in using a third party account from %(provider)s." -msgstr "" +msgstr "Stai per accedere utilizzando un account di terze parti da %(provider)s." #: templates/socialaccount/login.html:19 msgid "Continue" -msgstr "" +msgstr "Continua" #: templates/socialaccount/signup.html:10 #, python-format msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" -msgstr "" - -#: templates/stats.html:9 -msgid "Server" -msgstr "" +msgstr "Stai per utilizzare il tuo account %(provider_name)s per accedere a\n" +"%(site_name)s.
Per concludere, compila il seguente modulo:" #: templates/stats.html:13 msgid "Instance Name" @@ -11377,7 +12076,7 @@ msgstr "Nome istanza" #: templates/stats.html:18 msgid "Database" -msgstr "" +msgstr "Database" #: templates/stats.html:26 msgid "Server is running in debug mode" @@ -11393,15 +12092,15 @@ msgstr "Il server è distribuito utilizzando docker" #: templates/stats.html:39 msgid "Plugin Support" -msgstr "" +msgstr "Supporto Plugin" #: templates/stats.html:43 msgid "Plugin support enabled" -msgstr "" +msgstr "Supporto Plugin Abilitato" #: templates/stats.html:45 msgid "Plugin support disabled" -msgstr "" +msgstr "Supporto plugin disabilitato" #: templates/stats.html:52 msgid "Server status" @@ -11409,7 +12108,7 @@ msgstr "Stato del Server" #: templates/stats.html:55 msgid "Healthy" -msgstr "" +msgstr "In Buono stato" #: templates/stats.html:57 msgid "Issues detected" @@ -11417,7 +12116,7 @@ msgstr "Problemi rilevati" #: templates/stats.html:64 msgid "Background Worker" -msgstr "" +msgstr "Lavoratore di base" #: templates/stats.html:67 msgid "Background worker not running" @@ -11425,7 +12124,7 @@ msgstr "Processo in background non in esecuzione" #: templates/stats.html:75 msgid "Email Settings" -msgstr "" +msgstr "Impostazioni e-mail" #: templates/stats.html:78 msgid "Email settings not configured" @@ -11435,57 +12134,53 @@ msgstr "Impostazioni dell'email non configurate" msgid "Barcode Actions" msgstr "Azioni Barcode" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Stampa report di prova" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "Opzioni Magazzino" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "Aggiungi alle voci stock selezionate" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "Rimuovi dagli elementi stock selezionati" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "Inventario articoli di magazzino selezionati" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "Sposta gli elementi stock selezionati" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" -msgstr "" +msgstr "Unisce gli articoli di magazzino selezionati" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" -msgstr "" +msgstr "Unisce la giacenza" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Ordina articolo selezionato" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "Modifica stato" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "Modifica stato stock" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "Elimina articoli selezionati" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" -msgstr "" +msgstr "Elimina Stock" #: templates/yesnolabel.html:4 msgid "Yes" @@ -11493,7 +12188,7 @@ msgstr "Si" #: templates/yesnolabel.html:6 msgid "No" -msgstr "" +msgstr "No" #: users/admin.py:61 msgid "Users" @@ -11503,51 +12198,51 @@ msgstr "Utenti" msgid "Select which users are assigned to this group" msgstr "Selezionare quali utenti sono assegnati a questo gruppo" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "Gli utenti seguenti sono membri di più gruppi:" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "Informazioni personali" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Permessi" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "Date Importanti" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Gruppo" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Visualizza" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Modificare" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po index 0a46bdc43d..e2f8072a7e 100644 --- a/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -29,23 +33,26 @@ msgstr "" msgid "Enter date" msgstr "日付を入力する" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "メモ" @@ -58,23 +65,23 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "パスワードを入力してください" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "新しいパスワードを入力してください。" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "パスワードの確認" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "新しいパスワードの確認" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" -msgstr "" +msgstr "接続エラー" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "数量コードが無効です" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "ファイルがありません" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "添付ファイル" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "添付ファイルを選択" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "リンク" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "外部 サイト へのリンク" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "コメント:" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "ファイルコメント" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "ユーザー" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "アップロード日時" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "ファイル名は空欄にできません" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "添付ファイルのディレクトリが正しくありません" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "ファイル名に無効な文字'{c}'が含まれています" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "ファイル名に拡張子がありません" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "この名前の貼付ファイルは既に存在します" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "ファイル名の変更に失敗しました" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "説明" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "親" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "ファイル名" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "データファイル" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "アップロードするファイルを選択" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "サポートされていないファイル形式" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "ファイルサイズが大きすぎます" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "ファイルに列が見つかりません" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "ファイルにデータ行がみつかりません" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "データが入力されていません" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "データ列が指定されていません" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "必須の列がありません: {name}" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "{col} 列が重複しています。" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "ドイツ語" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "ギリシャ語" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "英語" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "スペイン語" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "スペイン語(メキシコ)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "フランス語" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "ヘブライ語" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "ハンガリー語" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "イタリア語" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "日本語" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "韓国語" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "オランダ語" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "ノルウェー語" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "ポーランド語" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "ロシア語" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "スウェーデン語" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "タイ語" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "トルコ語" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "ベトナム語" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "中国語" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "バックグラウンドワーカーのチェックに失敗しました" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "メールアドレスが未設定です" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InvenTree システムのヘルスチェックに失敗しました" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "処理待ち" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "設置済" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "完了" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "キャンセル済" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "紛失" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "返品済" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "発送済み" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "注意が必要です" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "破損" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "破壊されました" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "却下済み" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "在庫商品を作成しました" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "在庫商品編集済み" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "割り当てられたシリアル番号" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "在庫数" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "手動在庫追加が完了しました" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "手動在庫削除が完了しました" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "ロケーションが変更されました" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "アセンブリへインストールしました" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "アセンブリから削除しました" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "インストール済みのコンポーネント項目" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "コンポーネント項目を削除しました" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "親アイテムから分割する" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "子項目を分割" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "商品在庫をマージしました" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "顧客に送信されました" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "顧客からの返品" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "組立注文の出力が作成されました" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "組立注文の出力が完了しました" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "生産" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "ユーザー情報を編集" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "パスワードを設定" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "システム情報" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" -msgstr "" +msgstr "InvenTree について" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "パーツ" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "パーツを割り当てるためにビルドする" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "数量" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "ステータス" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "注文必須パーツ" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "パーツの注文" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "テンプレート" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "パーツはデフォルトのテンプレートです" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "アセンブリ" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "コンポーネント" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "購入可能" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "パーツはデフォルトで購入可能です" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "パーツはデフォルトで販売可能です" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "追跡可能" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "パーツはデフォルトで追跡可能です" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "テンプレート" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "パーツはデフォルトのテンプレートです" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "アセンブリ" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "コンポーネント" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "購入可能" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "パーツはデフォルトで購入可能です" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "パーツはデフォルトで販売可能です" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "追跡可能" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "パーツはデフォルトで追跡可能です" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "デバッグモード" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "メーカー・パーツ" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "メーカー・パーツ" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "サプライヤー・パーツ" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "新しいサプライヤー・パーツを作成" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "新しいサプライヤー・パーツ" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "パーツの注文" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "パーツを削除" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "パーツを削除" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "メーカー・パーツ" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "新しいメーカー・パーツを作成" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "新しいメーカ―・パーツ" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "パーツの注文" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "メーカー・パーツの編集" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "メーカー・パーツを削除" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "パーツ" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "カテゴリ" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "新規パーツ" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "新規カテゴリ" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "在庫切れ" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "期限切れ" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "確認" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "メーカー・パーツの編集" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "続けて別のパーツを作る" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/ko/LC_MESSAGES/django.po b/InvenTree/locale/ko/LC_MESSAGES/django.po index 76feb850a8..6672811ba6 100644 --- a/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -17,37 +17,44 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" -msgstr "" +msgstr "API endpoint 없음" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "이 모델을 볼 수 있는 권한이 없습니다." + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" -msgstr "" +msgstr "오류 세부 정보는 관리자 패널에서 찾을 수 있습니다." #: InvenTree/fields.py:129 msgid "Enter date" -msgstr "" +msgstr "날짜 입력" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" -msgstr "" +msgstr "메모" #: InvenTree/format.py:152 #, python-brace-format @@ -58,25 +65,25 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "비밀번호를 입력하세요" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "새로운 비밀번호를 입력하세요" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "비밀번호 확인" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "새 비밀번호 확인" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" -msgstr "" +msgstr "이전 암호" #: InvenTree/forms.py:179 msgid "Email (again)" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "첨부파일" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "첨부할 파일을 선택하세요" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "링크" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "외부 URL로 링크" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "사용자" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "업로드 날짜" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "파일명은 비워둘 수 없습니다" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "파일명에 허용되지 않은 문자 '{c}'가 포함되어 있습니다" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "같은 이름의 첨부파일이 이미 존재합니다" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "파일 이름 바꾸기 오류" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "이름" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "설명" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "설명 (선택 사항)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "바코드 해시" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "유효한 숫자여야 합니다" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "파일명" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "파일이 너무 큽니다" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "체코어" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "독일어" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "그리스어" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "영어" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "스페인어" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "스페인어 (멕시코)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "파르시어/페르시아어" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "프랑스어" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "히브리어" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "헝가리어" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "이탈리아어" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "일본어" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "한국어" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "네덜란드어" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "노르웨이어" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "폴란드어" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "러시아어" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "스웨덴어" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "태국어" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "터키어" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "베트남어" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "중국어" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "취소됨" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "파손됨" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "파괴됨" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "사용자 정보 수정" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "비밀번호 설정" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "비밀번호가 일치해야 합니다" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "시스템 정보" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "외부 링크" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "수량" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "수량 값은 0보다 커야 합니다" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "일련번호" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "위치" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "상태" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "QR 코드 보기" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} 파일" msgid "Select {name} file to upload" msgstr "업로드할 {name} 파일을 선택하세요" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "재시작 필요" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "회사명" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "기본 통화" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "URL에서 다운로드" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "바코드 지원" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "구입 가능" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "판매 가능" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "바코드 지원" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "구입 가능" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "판매 가능" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "디버그 모드" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "페이지 크기" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "PDF 보고서 기본 페이지 크기" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "SSO 활성화" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "로그인 페이지에서 SSO 활성화" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "이메일 필요" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "두 번 보내기" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "작성자" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "파일 업로드" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "웹사이트" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "이메일" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "이미지" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "회사" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "회사 정보 수정" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "회사 수정" @@ -3400,14 +3674,17 @@ msgstr "URL에서 이미지 다운로드" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "고객" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "전화번호" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "이미지 업로드" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "이미지 다운로드" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "삭제" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "QR 코드 보기" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "신규 고객" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "새 회사" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "너비 [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "높이 [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "바코드" + +#: order/serializers.py:510 +msgid "Scanned barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "이미 사용 중인 바코드입니다" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "데이터" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "이미지 복사" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "부품 명세서" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "일련번호 검색" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "단가" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "일련번호" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "일련번호" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "일련번호가 이미 존재합니다" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "일련번호가 이미 존재합니다" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "경고" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "로그인 설정" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "설정" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "새 탭에서 열기" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "메시지" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "지금 업데이트" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "사용자 설정" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "계정 설정" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "홈페이지" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "계정 설정" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "비밀번호 변경" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "선택한 이메일 주소를 정말로 제거하시겠습니까?" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "테마 설정" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "홈 페이지 설정" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "확인" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "링크 추가" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "첨부파일 추가" @@ -8521,32 +9159,33 @@ msgstr "첨부파일 추가" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "서버 재시작 필요" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "오류 408: 시간 초과" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "바코드" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "서버 오류" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "선택" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "예" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "아니오" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "취소" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "제출" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "단가" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "부품 명세서 복사" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "일련번호 찾기" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "일련번호를 입력하세요" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "일련번호를 입력하세요" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "일치하는 일련번호가 없습니다" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "일련번호" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "일련번호" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "관리자" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/nl/LC_MESSAGES/django.po b/InvenTree/locale/nl/LC_MESSAGES/django.po index 0cc695fc04..ea88cb2f05 100644 --- a/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Gebruiker heeft geen rechten om dit model te bekijken" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Error details kunnen worden gevonden in het admin scherm" @@ -29,23 +33,26 @@ msgstr "Error details kunnen worden gevonden in het admin scherm" msgid "Enter date" msgstr "Voer datum in" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Opmerkingen" @@ -58,23 +65,23 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat" msgid "Provided value does not match required pattern: " msgstr "Opgegeven waarde komt niet overeen met vereist patroon: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Voer wachtwoord in" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Voer een nieuw wachtwoord in" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Wachtwoord bevestigen" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Nieuw wachtwoord bevestigen" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Oude wachtwoord" @@ -92,101 +99,101 @@ msgstr "Er moet hetzelfde e-mailadres ingevoerd worden." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Het opgegeven primaire e-mailadres is ongeldig." #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Het ingevoerde e-maildomein is niet goedgekeurd." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Duplicaat serienummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ongeldig groepsbereik: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" -msgstr "" +msgstr "Groepsbereik {g} overschrijdt toegestane hoeveelheid ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ongeldig groepsbereik: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Hoeveelheid van unieke serienummers ({s}) moet overeenkomen met de hoeveelheid ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "Verwijder HTML tags van deze waarde" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Onjuist opgemaakt patroon" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Onbekende opmaaksleutel gespecificeerd" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Vereiste opmaaksleutel ontbreekt" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Referentieveld mag niet leeg zijn" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Referentie moet overeenkomen met verplicht patroon" @@ -194,566 +201,615 @@ msgstr "Referentie moet overeenkomen met verplicht patroon" msgid "Reference number is too large" msgstr "Referentienummer is te groot" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Ontbrekend bestand" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Externe link ontbreekt" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Bijlage" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link naar externe URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Opmerking" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Bestand opmerking" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Gebruiker" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "uploaddatum" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Bestandsnaam mag niet leeg zijn" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Foute bijlagemap" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Bestandsnaam bevat illegale teken '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Bestandsnaam mist extensie" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Bijlage met deze bestandsnaam bestaat al" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Fout bij hernoemen bestand" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Omschrijving" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "bovenliggende" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Pad" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" -msgstr "" +msgstr "Streepjescode gegevens" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" -msgstr "" +msgstr "Streepjescode van derden" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Hash van Streepjescode" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" -msgstr "" +msgstr "Unieke hash van barcode gegevens" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" -msgstr "" +msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Valuta" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Selecteer valuta uit beschikbare opties" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Bestandsnaam" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Data bestand" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Selecteer een bestand om te uploaden" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Niet ondersteund bestandstype" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Bestand is te groot" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Geen kolommen gevonden in het bestand" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Geen data rijen gevonden in dit bestand" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Geen data rijen opgegeven" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Geen gegevenskolommen opgegeven" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Verplichte kolom ontbreekt: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dubbele kolom: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tsjechisch" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" -msgstr "" +msgstr "Deens" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Duits" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Grieks" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Engels" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spaans" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spaans (Mexicaans)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Perzisch" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Frans" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebreeuws" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Hongaars" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italiaans" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japans" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreaans" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Nederlands" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Noors" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Pools" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugees" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugees (Braziliaans)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" -msgstr "" +msgstr "Sloveens" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Zweeds" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thais" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turks" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Chinees" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Achtergrondwerker check is gefaald" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "E-mailbackend niet geconfigureerd" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InvenTree gezondsheidschecks mislukt" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Bezig" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Geplaatst" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Voltooid" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Geannuleerd" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Kwijt" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Retour" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "In Behandeling" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Verzonden" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Aandacht nodig" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Beschadigd" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Verwoest" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Afgewezen" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "In quarantaine geplaatst" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Verouderde volgcode" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Voorraaditem gemaakt" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Bewerken voorraadartikel" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Serienummer toegewezen" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Voorraad geteld" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Voorraad handmatig toegevoegd" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Voorraad handmatig verwijderd" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Locatie veranderd" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Gemonteerd" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Gedemonteerd" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Geïnstalleerd componentartikel" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Verwijderd componentartikel" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Splits van bovenliggend item" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Splits onderliggende item" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Samengevoegde voorraadartikelen" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Geconverteerd naar variant" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Naar klant verzonden" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Geretourneerd door klant" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Product aangemaakt" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Product voltooid" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Verbruikt door productieorder" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Ontvangen tegen inkooporder" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "Verzonden onder verkooporder" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "Ontvangen onder verkooporder" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "Geretourneerd onder retourorder" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Productie" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "Retour" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "Herstel" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "Restitutie" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "Vervangen" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "Afwijzen" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN moet overeenkomen met regex-patroon {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Overschotwaarde mag niet negatief zijn" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Overschot mag niet groter zijn dan 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Ongeldige waarde voor overschot" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Gebruikersgegevens bewerken" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Wachtwoord instellen" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Wachtwoordvelden komen niet overeen" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Onjuist wachtwoord opgegeven" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Systeeminformatie" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Over InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Ongeldige keuze voor bovenliggende productie" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,585 +818,626 @@ msgstr "Ongeldige keuze voor bovenliggende productie" msgid "Build Order" msgstr "Productieorder" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Ongeldige keuze voor bovenliggende productie" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referentie" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Korte beschrijving van de productie" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Productieorder waar deze productie aan is toegewezen" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Onderdeel" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waar deze productie aan is toegewezen" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecteer de locatie waar de voorraad van de productie vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Doeldatum voor productie voltooiing. Productie zal achterstallig zijn na deze datum." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "voltooid door" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Gebruiker verantwoordelijk voor deze productieorder" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Externe Link" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Opmerkingen over de productie" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" -msgstr "" +msgstr "Bouw prioriteit" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" -msgstr "" +msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Productieartikel moet een productieuitvoer specificeren, omdat het hoofdonderdeel gemarkeerd is als traceerbaar" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Geselecteerd voorraadartikel niet gevonden in stuklijst" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Product" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Product om onderdelen toe te wijzen" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Geheel getal vereist omdat de stuklijst traceerbare onderdelen bevat" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Locatie" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Status" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "Toegewezen Voorraad Verwijderen" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "Verminder alle voorraad die al is toegewezen aan deze productie" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" -msgstr "" +msgstr "Overgealloceerde voorraad" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "Hoe wilt u omgaan met extra voorraaditems toegewezen aan de bouworder" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" -msgstr "" +msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepteer dat voorraadartikelen niet volledig zijn toegewezen aan deze productieorder" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepteer dat het vereist aantal productieuitvoeren niet is voltooid" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "Productieuitvoer moet worden opgegeven voor de toewijzing van gevolgde onderdelen" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Productieuitvoer kan niet worden gespecificeerd voor de toewijzing van niet gevolgde onderdelen" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Dit voorraadartikel is al toegewezen aan deze productieoutput" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Voorraadlocatie waar onderdelen afkomstig zijn (laat leeg om van elke locatie te nemen)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" -msgstr "" +msgstr "Optionele Items" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" -msgstr "" +msgstr "Alloceer optionele BOM items om bestelling te bouwen" #: build/tasks.py:100 msgid "Stock required for build order" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Barcode acties" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "QR-code weergeven" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "Barcode loskoppelen" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "Koppel Barcode" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Afdruk acties" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Print productieorderrapport" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Productie acties" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Bewerk Productie" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Annuleer Productie" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" -msgstr "" +msgstr "Dupliceer Bouw" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Verwijder Productie" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Voltooi Productie" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Productiebeschrijving" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "Er zijn geen productuitvoeren aangemaakt voor deze productieorder" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Deze Productieorder is toegewezen aan verkooporder %(link)s" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Deze Productieorder is een onderdeel van Productieorder %(link)s" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "Productieorder is gereed om te markeren als voltooid" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Productieorder kan niet worden voltooid omdat er nog producties openstaan" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "Vereiste Producthoeveelheid is nog niet bereikt" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Voorraad is niet volledig toegewezen aan deze productieorder" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Streefdatum" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Deze productie was verwacht op %(target)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Achterstallig" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Voltooid" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Verkooporder" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Uitgegeven door" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" -msgstr "" +msgstr "Prioriteit" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Verwijder Productieorder" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "Bouworder QR Code" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "Link Barcode aan bouwopdracht" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Productie details" @@ -1497,8 +1652,8 @@ msgstr "Voorraadbron" msgid "Stock can be taken from any available location." msgstr "Voorraad kan worden genomen van elke beschikbare locatie." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Bestemming" @@ -1510,21 +1665,23 @@ msgstr "Bestemmingslocatie niet opgegeven" msgid "Allocated Parts" msgstr "Toegewezen Onderdelen" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Batch" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Gecreëerd" @@ -1544,7 +1701,7 @@ msgstr "Onderliggende Productieorders" msgid "Allocate Stock to Build" msgstr "Voorraad toewijzen aan Product" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Voorraadtoewijzing ongedaan maken" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Vereiste onderdelen bestellen" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Onderdelen bestellen" @@ -1627,52 +1785,42 @@ msgstr "Voltooi geselecteerde productieuitvoeren" msgid "Delete outputs" msgstr "Verwijder uitvoeren" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Afdrukacties" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Labels afdrukken" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Voltooide Productieuitvoeren" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bijlagen" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Productie notities" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "Toewijzing Voltooid" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "Alle niet gevolgde voorraadartikelen zijn toegewezen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Nieuwe Productieorder" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Print Productieorders" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "Productieorderdetails" @@ -1685,23 +1833,24 @@ msgstr "Onvolledige Productieuitvoeren" msgid "Completed Outputs" msgstr "Voltooide Uitvoeren" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Niet-ondersteunde bestandsindeling: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Fout bij lezen bestand (ongeldige codering)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Fout bij lezen bestand (ongeldig formaat)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Fout bij lezen bestand (onjuiste afmeting)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Fout bij lezen bestand (gegevens kunnen beschadigd zijn)" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} Bestand" msgid "Select {name} file to upload" msgstr "Kies {name} bestand om te uploaden" -#: common/models.py:65 templates/js/translated/part.js:781 -msgid "Updated" -msgstr "" - #: common/models.py:66 +msgid "Updated" +msgstr "Bijgewerkt" + +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Geen groep" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "Een instelling is gewijzigd waarvoor een herstart van de server vereist is" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Download van URL" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" -msgstr "" +msgstr "Download limiet" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" -msgstr "" +msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" -msgstr "" +msgstr "Boomstructuur Diepte" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Streepjescodeondersteuning" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Streepjescodescanner ondersteuning inschakelen" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "Barcode Webcam Ondersteuning" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Barcode via webcam scannen in browser toestaan" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "IPN Regex" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Duplicaat IPN toestaan" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Bewerken IPN toestaan" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Kopieer Onderdeel Stuklijstgegevens" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Kopieer Onderdeel Parametergegevens" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Kopieer Onderdeel Testdata" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Kopiëer Categorieparameter Sjablonen" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Sjabloon" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Onderdelen zijn standaard sjablonen" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Samenstelling" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Component" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Koopbaar" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Onderdelen kunnen standaard gekocht worden" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Verkoopbaar" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Onderdelen kunnen standaard verkocht worden" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Volgbaar" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Onderdelen kunnen standaard gevolgd worden" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtueel" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Onderdelen zijn standaard virtueel" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Toon Import in Weergaven" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Toon de importwizard in sommige onderdelenweergaven" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Verwante onderdelen tonen" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Verwante onderdelen voor een onderdeel tonen" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Onderdelennaam Weergaveopmaak" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Opmaak om de onderdeelnaam weer te geven" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "dagen" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Streepjescodeondersteuning" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Streepjescodescanner ondersteuning inschakelen" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "Barcode Webcam Ondersteuning" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Barcode via webcam scannen in browser toestaan" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "IPN Regex" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Duplicaat IPN toestaan" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Bewerken IPN toestaan" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Kopieer Onderdeel Stuklijstgegevens" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Kopieer Onderdeel Parametergegevens" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Kopieer Onderdeel Testdata" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Kopiëer Categorieparameter Sjablonen" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Sjabloon" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Onderdelen zijn standaard sjablonen" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Samenstelling" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Component" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Koopbaar" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Onderdelen kunnen standaard gekocht worden" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Verkoopbaar" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Onderdelen kunnen standaard verkocht worden" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Volgbaar" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Onderdelen kunnen standaard gevolgd worden" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtueel" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Onderdelen zijn standaard virtueel" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Toon Import in Weergaven" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Toon de importwizard in sommige onderdelenweergaven" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Verwante onderdelen tonen" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Verwante onderdelen voor een onderdeel tonen" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Onderdelennaam Weergaveopmaak" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Opmaak om de onderdeelnaam weer te geven" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI resolutie bij het genereren van afbeelginsbestanden voor label printer plugins" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Paginagrootte" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "Activeer Testrapporten" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "Activeer het genereren van testrapporten" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "Testrapporten Toevoegen" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Bij het afdrukken van een Testrapport, voeg een kopie van het Testrapport toe aan het bijbehorende Voorraadartikel" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "Groep waaraan nieuwe gebruikers worden toegewezen bij registratie" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Toon laatste onderdelen" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Toon laatste onderdelen op de startpagina" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "Recente Voorraadtelling" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Toon recente voorraadwijzigingen" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Toon recent aangepaste voorraadartikelen op de startpagina" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "Recente Voorraadtelling" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Toon lage voorraad" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Toon lage voorraad van artikelen op de startpagina" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Toon lege voorraad" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Toon lege voorraad van artikelen op de startpagina" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Toon benodigde voorraad" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Toon benodigde voorraad van artikelen voor productie op de startpagina" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Toon verlopen voorraad" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Toon verlopen voorraad van artikelen op de startpagina" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "Toon verouderde voorraad" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "Toon verouderde voorraad van artikelen op de startpagina" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "Toon openstaande producties" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "Toon openstaande producties op de startpagina" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "Toon achterstallige productie" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "Toon achterstallige producties op de startpagina" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "Toon uitstaande PO's" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "Toon uitstaande PO's op de startpagina" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "Toon achterstallige PO's" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "Toon achterstallige PO's op de startpagina" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "Toon uitstaande SO's" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "Toon uitstaande SO's op de startpagina" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "Toon achterstallige SO's" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "Toon achterstallige SO's op de startpagina" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "Zoek Onderdelen" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "Zoek in Voorraad" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "Inkooporders Zoeken" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "Toon inkooporders in het zoekvenster" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "Inactieve Inkooporders Weglaten" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inactieve inkooporders weglaten in het zoekvenster" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "Verkooporders zoeken" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "Toon verkooporders in het zoekvenster" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "Inactieve Verkooporders Weglaten" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Prijs" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Actief" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "Token" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "Geheim" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "Host" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "Koptekst" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "Een nieuwe order is aangemaakt en aan u toegewezen" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "Artikelen zijn ontvangen tegen een inkooporder" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Upload Bestand" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "Vergelijk Velden" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Website" @@ -3086,6 +3355,7 @@ msgstr "Telefoonnummer voor contact" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "Email" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "Contact e-mailadres" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Contact" @@ -3105,11 +3378,11 @@ msgstr "Contactpunt" msgid "Link to external company information" msgstr "Link naar externe bedrijfsinformatie" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Afbeelding" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Opmerkingen Bedrijf" @@ -3137,229 +3410,230 @@ msgstr "is fabrikant" msgid "Does this company manufacture parts?" msgstr "Fabriceert dit bedrijf onderdelen?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Valuta" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Basis onderdeel" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Onderdeel selecteren" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Fabrikant" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Fabrikant selecteren" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "MPN" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Fabrikant artikel nummer (MPN)" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "URL voor externe link van het fabrikant onderdeel" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "Omschrijving onderdeel fabrikant" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Fabrikant onderdeel" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Parameternaam" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Waarde" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Parameterwaarde" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Eenheden" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Parameter eenheden" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Leverancier" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Leverancier selecteren" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "SKU" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "Selecteer fabrikant onderdeel" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Opmerking" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "basisprijs" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "Minimale kosten (bijv. voorraadkosten)" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "meerdere" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "Order meerdere" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Beschikbaar" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Valutacode" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Bedrijf" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Basis onderdeel" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Onderdeel selecteren" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Fabrikant" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Fabrikant selecteren" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "MPN" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Fabrikant artikel nummer (MPN)" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "URL voor externe link van het fabrikant onderdeel" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "Omschrijving onderdeel fabrikant" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Fabrikant onderdeel" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Parameternaam" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Waarde" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Parameterwaarde" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Eenheden" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Parameter eenheden" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Leverancier" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Leverancier selecteren" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "SKU" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "Selecteer fabrikant onderdeel" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Opmerking" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "basisprijs" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "Minimale kosten (bijv. voorraadkosten)" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "meerdere" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "Order meerdere" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Beschikbaar" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Inkooporder aanmaken" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "Bedrijfsinformatie bewerken" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Bedrijf bewerken" @@ -3400,14 +3674,17 @@ msgstr "Afbeelding downloaden van URL" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Klant" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "Telefoon" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Afbeelding Uploaden" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Afbeelding Downloaden" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Bestel onderdelen" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Verwijder onderdelen" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Verwijder Onderdelen" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Fabrikant onderdelen" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Maak nieuw fabrikant onderdeel" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Nieuw fabrikant onderdeel" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Inkooporders" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Nieuwe inkooporder aanmaken" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Nieuwe Inkooporder" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Verkooporders" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Nieuwe inkooporder aanmaken" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Nieuwe Verkooporder" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Leverancierslijst" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Fabrikanten" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Order onderdeel" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Fabrikant onderdeel bewerken" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Fabrikant onderdeel verwijderen" @@ -3582,36 +3889,36 @@ msgstr "Geen fabrikanten informatie beschikbaar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Leveranciers" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Verwijder leveranciersonderdelen" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Verwijderen" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parameters" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Nieuwe Parameter" @@ -3619,8 +3926,8 @@ msgstr "Nieuwe Parameter" msgid "Delete parameters" msgstr "Parameter verwijderen" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Parameter toevoegen" @@ -3636,55 +3943,31 @@ msgstr "Geleverde Onderdelen" msgid "Supplied Stock Items" msgstr "Geleverde Voorraadartikelen" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "Toegewezen Voorraadartikelen" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Leveranciersonderdeel" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "QR-code weergeven" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Order Onderdeel" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "Geen leveranciersinformatie beschikbaar" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "Nieuw voorraadartikel aanmaken" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "Nieuw Voorraadartikel" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "Leverancier Onderdelenorders" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Prijsinformatie" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Voorraad" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Orders" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Prijzen" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Voorraadartikelen" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "Klanten" msgid "New Customer" msgstr "Nieuwe Klant" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Bedrijven" @@ -3827,519 +4083,604 @@ msgstr "Bedrijven" msgid "New Company" msgstr "Nieuw Bedrijf" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "Labelnaam" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Label beschrijving" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "Label" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "Label template bestand" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Ingeschakeld" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "Label template is ingeschakeld" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Breedte [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "Label breedte, gespecificeerd in mm" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Hoogte [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "Label hoogte, gespecificeerd in mm" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "Bestandsnaam Patroon" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filters" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Inkooporder" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" -msgstr "Order beschrijving" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Totaalprijs" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Link naar externe pagina" -#: order/models.py:93 -msgid "Created By" -msgstr "Aangemaakt Door" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "Gebruiker of groep verantwoordelijk voor deze order" - -#: order/models.py:105 -msgid "Order notes" -msgstr "Ordernotities" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "Orderreferentie" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "Inkooporder status" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "Bedrijf waar de artikelen van worden besteld" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "Leveranciersreferentie" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "Order referentiecode van leverancier" - -#: order/models.py:275 -msgid "received by" -msgstr "ontvangen door" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "Datum van uitgifte" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "Order uitgegeven op datum" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Streefdatum Levering" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Verwachte datum voor levering van de bestelling. De bestelling wordt achterstallig na deze datum." -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Aangemaakt Door" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "Gebruiker of groep verantwoordelijk voor deze order" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Ordernotities" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Orderreferentie" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Inkooporder status" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Bedrijf waar de artikelen van worden besteld" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "Leveranciersreferentie" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "Order referentiecode van leverancier" + +#: order/models.py:366 +msgid "received by" +msgstr "ontvangen door" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Datum van uitgifte" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Order uitgegeven op datum" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "Streefdatum voor voltooien order. De order is na deze datum achterstallig." - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "Order kan niet worden voltooid omdat er geen onderdelen aangewezen zijn" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "Alleen orders in afwachting kunnen als voltooid worden gemarkeerd" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestelling kan niet worden voltooid omdat er onvolledige verzendingen aanwezig zijn" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "Context" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "verwijderd" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "Order" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "Waar wil de inkoper dat dit artikel opgeslagen wordt?" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtueel onderdeel kan niet worden toegewezen aan een verkooporder" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "Zending" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "Zendingnotities" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kan het voorraadartikel niet toewijzen aan een regel met een ander onderdeel" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "Regel" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "Artikel" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/serializers.py:63 -msgid "Price currency" -msgstr "Prijs valuta" +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "Uniek identificatieveld" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "De volgende serienummers zijn al toegewezen" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "Achterstallige inkooporder" @@ -4358,102 +4699,123 @@ msgstr "Achterstallige Verkooporder" msgid "Sales order {so} is now overdue" msgstr "Verkooporder {so} is nu achterstallig" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "Print rapport inkooporder" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Exporteer order naar bestand" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "Order acties" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Order bewerken" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Order annuleren" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "Ontvang artikelen" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "Ontvang Artikelen" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Order markeren als voltooid" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "Order Voltooien" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "Order Referentie" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "Order Beschrijving" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Order Status" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "Geen leveranciersinformatie beschikbaar" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "Afgeronde artikelen" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Incompleet" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Uitgegeven" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "Totale kosten" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "Totale kosten konden niet worden berekend" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Rij verwijderen" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "Artikelen" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "Inkooporder Artikelen" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "Artikel toevoegen" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" -msgstr "Geselecteerde artikelen ontvangen" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "Extra Regels" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "Extra Regel Toevoegen" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "Ontvangen Artikelen" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "Ordernotities" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" -msgstr "Voeg Orderregel toe" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" +msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "Print Rapporten Order" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "Print verkooporderrapport" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "Pakbon afdrukken" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "Verzendingen Voltooien" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "Voltooi Verkooporder" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "Deze Verkooporder is niet volledig toegewezen" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "Klantreferentie" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "Print verkooporderrapport" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "Voltooi Verkooporder" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "Deze Verkooporder is niet volledig toegewezen" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" -msgstr "Verkooporder bewerken" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" +msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "Verkoooporder Artikelen" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "Verzendingen in behandeling" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "Acties" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "Nieuwe Verzending" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "Leveranciersonderdelen Vergelijken" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "Verkooporder niet gevonden" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "Prijs niet gevonden" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "{part} stukprijs bijgewerkt naar {price}" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} stukprijs bijgewerkt naar {price} en aantal naar {qty}" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "In bestelling" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "Toegewezen" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "Binnenkomende Inkooporder" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "Uitgaande Verkooporder" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "Geproduceerde voorraad door Productieorder" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "Voorraad vereist voor Productieorder" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Standaard locatie" @@ -4855,814 +5260,939 @@ msgstr "Standaard locatie" msgid "Total Stock" msgstr "Totale Voorraad" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Standaard locatie voor onderdelen in deze categorie" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Standaard locatie voor onderdelen in deze categorie" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN moet overeenkomen met regex-patroon {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "Datum" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "Parameternaam" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "Parameter Eenheden" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "Parameter Template" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "Parameterwaarde" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "Ongeldige hoeveelheid" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "U heeft geen toestemming om de stuklijst te bewerken." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Categorie bewerken" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Categorie bewerken" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Categorie verwijderen" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Categorie verwijderen" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Onderdeel Parameters" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Nieuwe Categorie" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "Verkoopordertoewijzingen" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "Een parameter toevoegen" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "Assemblages" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "Productieordertoewijzingen" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "Onderdeelfabrikanten" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "Fabrikantonderdeel verwijderen" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "Formaat" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "Selecteer bestandsindeling" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Label afdrukken" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Voorraad acties" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "Toegewezen aan Productieorder" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "Geen overeenkomende afbeeldingen gevonden" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Voorraad" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Prijzen" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "Selecteer afbeelding onderdeel" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "Afbeelding onderdeel bijgewerkt" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "Afbeelding van onderdeel niet gevonden" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor streepjescodegegevens" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "Filters inkooporder" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "Verkooporder zoekopdracht filters" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "Vereist Voor" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Stukprijs" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Totaal" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Serienummer" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Serienummer" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Voorraadlocaties" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "Scan naar Locatie" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "Voorraad tellen" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "Voorraad overzetten" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "Geen fabrikant geselecteerd" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "Dit voorraadartikel is toegewezen aan Verkooporder" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "Dit voorraadartikel is toegewezen aan Productieorder" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "vorige pagina" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "volgende pagina" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "Geen locatie ingesteld" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Locatie acties" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Bewerk locatie" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Verwijder locatie" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "U staat niet in de lijst van eigenaars van deze locatie. Deze voorraadlocatie kan niet worden bewerkt." @@ -7472,11 +8089,6 @@ msgstr "U staat niet in de lijst van eigenaars van deze locatie. Deze voorraadlo msgid "Sublocations" msgstr "Sublocaties" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Voorraadlocaties" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "Maak nieuwe voorraadlocatie" @@ -7485,11 +8097,15 @@ msgstr "Maak nieuwe voorraadlocatie" msgid "New Location" msgstr "Nieuwe Locatie" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "QR-code voor Voorraadlocatie" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "Bericht" @@ -7896,28 +8523,32 @@ msgstr "Inkooporder Instellingen" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "Startpagina" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "Verkooporder Instellingen" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "Startpagina Instellingen" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Bevestigen" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "Klik op de volgende link om deze order te bekijken" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "De volgende onderdelen hebben een lage vereiste voorraad" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "Vereiste Hoeveelheid" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Sluit" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "Geen Voorraad Aanwezig" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "Productieorder is onvolledig" msgid "Complete Build Order" msgstr "Voltooi Productieoorder" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "Selecteer Productieuitvoeren" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "Voltooi Productieuitvoeren" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "Verwijder Productieuitvoeren" @@ -9122,541 +9753,558 @@ msgstr "Geen productieordertoewijzingen gevonden" msgid "Location not specified" msgstr "Locatie is niet opgegeven" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "Geen actieve productieuitvoeren gevonden" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "Voorraadtoewijzing bewerken" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "Voorraadtoewijzing verwijderen" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "Onvoldoende voorraad beschikbaar" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "Genoeg voorraad beschikbaar" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "Productie voorraad" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "Voorraad order" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "Voorraad toewijzen" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "Onderdelen selecteren" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "Er moet op zijn minst één onderdeel toegewezen worden" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "Specificeer voorraadtoewijzingshoeveelheid" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "Selecteer bron locatie (laat het veld leeg om iedere locatie te gebruiken)" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "Voorraadartikelen toewijzen aan Productieorder" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "Geen overeenkomende voorraadlocaties" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "Geen overeenkomende voorraadartikelen" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Voorraadartikelen zullen automatisch worden toegewezen aan de productieorder volgens de aangegeven richtlijnen" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "Productieorder is achterstallig" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "Fabrikant toevoegen" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "Fabrikantonderdeel toevoegen" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "Fabrikantonderdeel bewerken" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "Leverancier Toevoegen" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "Leveranciersonderdeel Toevoegen" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "Gefabriceerde Onderdelen" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "Verwijder Fabrikantenonderdelen" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Parameter verwijderen" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "Geen fabrikantenonderdelen gevonden" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "Samengesteld onderdeel" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "Geen parameters gevonden" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "Parameter bewerken" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "Parameter verwijderen" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "Parameter bewerken" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "Parameter verwijderen" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "Laatst bijgewerkt" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "Order-ID" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "Onderdeelnummer Fabrikant" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,442 +10313,62 @@ msgstr "" msgid "Age" msgstr "Leeftijd" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" -msgstr "Geen voorraadartikelen toegewezen aan deze zending" - -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "De volgende voorraadartikelen worden verzonden" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "Verzending Voltooien" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "Verzending Bevestigen" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "Geen verzendingen in behandeling gevonden" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "Voltooi Inkooporder" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "Order markeren als voltooid?" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "Alle artikelen zijn ontvangen" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "Deze order heeft artikelen die niet zijn gemarkeerd als ontvangen." - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "Na het voltooien van de order zijn de order en de artikelen langer bewerkbaar." - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "Inkooporder annuleren" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "Weet u zeker dat u deze inkooporder wilt annuleren?" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "Deze inkooporder kan niet geannuleerd worden" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "Geef inkooporder uit" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "Na het plaatsen van de inkooporder zijn de artikelen niet meer bewerkbaar." - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "Verkooporder annuleren" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "Na annulering van de order kan de order niet meer bewerkt worden." - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "Verkooporder aanmaken" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Bewerk Inkooporder" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "Export Order" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "Te bestellen aantal" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "Nieuwe inkooporder" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "Toevoegen aan inkooporder" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "Geen overeenkomende inkooporders" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "Selecteer artikelen" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "Ten minste één artikel moet worden geselecteerd" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Order Code" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Besteld" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "Ontvang Artikelen Inkooporder" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "Geen inkooporder gevonden" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "Order is achterstallig" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "Artikelen" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "Artikel dupliceren" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "Artikel wijzigen" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "Artikel verwijderen" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "Geen artikelen gevonden" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "Totaal" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "Stukprijs" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Totaalprijs" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "Dit artikel is achterstallig" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "Artikel ontvangen" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "Artikel dupliceren" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "Artikel bewerken" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "Artikel verwijderen" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "Kopieer regel" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "Bewerk regel" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "Verwijder regel" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "Kopieer Regel" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "Bewerk Regel" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "Verwijder Regel" -#: templates/js/translated/order.js:2687 -msgid "No matching line" -msgstr "Geen overeenkomende regel" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" +msgstr "Geen artikelen gevonden" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "Geen verkooporder gevonden" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" +msgstr "Kopieer regel" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" -msgstr "Ongeldige Klant" +#: templates/js/translated/order.js:345 +msgid "Edit line" +msgstr "Bewerk regel" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "Verzending bewerken" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "Verzending Voltooien" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "Verzending verwijderen" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "Verzending bewerken" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "Verzending verwijderen" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "Geen overeenkomende verzending gevonden" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "Verzendingsreferentie" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "Niet verzonden" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "Volgen" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "Factuur" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "Voeg Verzending toe" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Bevestig de voorraadtoewijzing" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "Voorraadartikel toewijzen aan Verkooporder" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "Geen verkooporder toewijzingen gevonden" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "Bewerk Voorraadtoewijzing" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "Bevestig Verwijderen" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "Verwijder Voorraadtoewijzing" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "Verzonden aan klant" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "Voorraadlocatie niet gespecificeerd" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "Wijs serienummers toe" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Koop voorraad" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Bereken prijs" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "Kan niet worden verwijderd omdat artikelen verzonden zijn" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "Kan niet worden verwijderd omdat artikelen toegewezen zijn" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "Wijs Serienummers Toe" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "Werk Stukprijs Bij" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "Geen overeenkomende artikelen" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" -msgstr "Geen overeenkomende regels" +#: templates/js/translated/order.js:349 +msgid "Delete line" +msgstr "Verwijder regel" #: templates/js/translated/part.js:56 msgid "Part Attributes" @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "Validatie van de BOM markeert ieder artikel als geldig" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "Geen inkooporder gevonden" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "Dit artikel is achterstallig" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "Artikel ontvangen" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "Bewerk Inkooporder" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "Voltooi Inkooporder" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "Order markeren als voltooid?" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "Alle artikelen zijn ontvangen" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "Deze order heeft artikelen die niet zijn gemarkeerd als ontvangen." + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "Na het voltooien van de order zijn de order en de artikelen langer bewerkbaar." + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "Inkooporder annuleren" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "Weet u zeker dat u deze inkooporder wilt annuleren?" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "Deze inkooporder kan niet geannuleerd worden" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "Geef inkooporder uit" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "Te bestellen aantal" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "Nieuwe inkooporder" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "Toevoegen aan inkooporder" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "Geen overeenkomende inkooporders" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "Selecteer artikelen" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "Ten minste één artikel moet worden geselecteerd" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "Order Code" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "Ontvang Artikelen Inkooporder" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "Order is achterstallig" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Artikelen" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "Artikel dupliceren" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "Artikel wijzigen" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "Artikel verwijderen" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "Artikel dupliceren" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "Artikel bewerken" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "Artikel verwijderen" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" -msgstr "Selecteer Inkooporders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" +msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" -msgstr "Inkooporder(s) moeten geselecteerd zijn voordat u rapport afdrukt" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" +msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" -msgstr "Geen rapportsjablonen gevonden die overeenkomen met geselecteerde orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" +msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" -msgstr "Selecteer Verkooporders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "Ongeldige Klant" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" -msgstr "Verkooporder(s) moeten geselecteerd zijn voordat u rapport afdrukt" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "Geen overeenkomende artikelen" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "Verkooporder aanmaken" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "Verkooporder bewerken" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "Geen voorraadartikelen toegewezen aan deze zending" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "De volgende voorraadartikelen worden verzonden" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "Verzending Voltooien" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "Verzending Bevestigen" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "Geen verzendingen in behandeling gevonden" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "Verzendingen Voltooien" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "Verkooporder annuleren" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "Na annulering van de order kan de order niet meer bewerkt worden." + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "Geen verkooporder gevonden" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "Verzending bewerken" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "Verzending Voltooien" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "Verzending verwijderen" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "Verzending bewerken" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "Verzending verwijderen" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "Geen overeenkomende verzending gevonden" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "Verzendingsreferentie" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "Niet verzonden" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "Volgen" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "Factuur" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "Voeg Verzending toe" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Bevestig de voorraadtoewijzing" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "Voorraadartikel toewijzen aan Verkooporder" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "Geen verkooporder toewijzingen gevonden" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "Bewerk Voorraadtoewijzing" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "Bevestig Verwijderen" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "Verwijder Voorraadtoewijzing" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "Verzonden aan klant" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "Voorraadlocatie niet gespecificeerd" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "Wijs serienummers toe" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "Koop voorraad" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "Bereken prijs" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "Kan niet worden verwijderd omdat artikelen verzonden zijn" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "Kan niet worden verwijderd omdat artikelen toegewezen zijn" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "Wijs Serienummers Toe" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "Werk Stukprijs Bij" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "Bewerk Voorraadlocatie" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "Verwijder Voorraadlocatie" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "Toegewezen aan Verkooporder" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "Geen voorraadlocatie ingesteld" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "Voorraadartikel toegewezen aan verkooporder" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "Inkooporder bestaat niet meer" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "Samengesteld onderdeel" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "Onderdeel is een assemblage" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "Order status" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "Samengesteld onderdeel" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "Onderdeel is een assemblage" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Toon Kalenderweergave" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Toon Lijstweergave" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "rijen per pagina" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "Inkoop" msgid "Sell" msgstr "Verkoop" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Geselecteerde artikelen bestellen" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/no/LC_MESSAGES/django.po b/InvenTree/locale/no/LC_MESSAGES/django.po index d97d5b7b5a..cc61c19288 100644 --- a/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-07 09:21\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API endepunkt ikke funnet" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Feildetaljer kan ikke finnes i admin-panelet" @@ -29,23 +33,26 @@ msgstr "Feildetaljer kan ikke finnes i admin-panelet" msgid "Enter date" msgstr "Oppgi dato" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Notater" @@ -58,23 +65,23 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Oppgi passord" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Oppgi nytt passord" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Bekreft passord" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Bekreft nytt passord" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Gammelt passord" @@ -98,95 +105,95 @@ msgstr "Den oppgitte primære e-postadressen er ikke gyldig." msgid "The provided email domain is not approved." msgstr "Den oppgitte e-postdomenet er ikke godkjent." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugylding innholdslengde verdi" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Dupliserte serienr" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ugyldig gruppeserie: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Gruppeutvalg {g} overskrider tillatt antall ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ugyldig gruppesekvense: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Antall unike serienumre ({s}) må samsvare med antall ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-koder fra denne verdien" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Uriktig formatert mønster" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Ukjent formatnøkkel spesifisert" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøkkel" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Referansefeltet kan ikke være tomt" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Referansen må samsvare påkrevet mønster" @@ -194,566 +201,615 @@ msgstr "Referansen må samsvare påkrevet mønster" msgid "Reference number is too large" msgstr "Referansenummeret er for stort" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Fil mangler" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Mangler eksternlenke" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Vedlegg" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Velg fil å legge ved" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Lenke" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Lenke til ekstern URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Kommenter" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Kommentar til fil" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Bruker" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "opplastet dato" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Filnavn må ikke være tom" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Ugyldig vedleggskatalog" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Filnavn inneholder ugyldig tegn '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Filnavn mangler filtype" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Vedlegg med dette filnavnet finnes allerede" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Feil ved endring av navn" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "overkategori" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Strekkode data" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Tredjeparts strekkode-data" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Strekkode hash" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Unik hash av strekkode-data" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Nummer må være gyldig" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Valuta" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Filnavn" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Data fil" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Velg datafil for opplasting" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Filtypen støttes ikke" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Filen er for stor" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Ingen kolonner funnet i filen" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Ingen datalader funnet i fil" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Ingen datalader oppgitt" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Ingen datakolonner angitt" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Mangler påkrevd kolonne: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dupliser kolonne: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL-adressen til ekstern bildefil" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tsjekkisk" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Dansk" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Tysk" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Gresk" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Engelsk" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spansk" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spansk (Meksikansk)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Persisk" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Fransk" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Ungarsk" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italiensk" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japansk" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreansk" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Nederlandsk" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polsk" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugisisk" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugisisk (Brasilian)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Russisk" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Slovensk" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Svensk" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Kinesisk" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Bakgrunnsarbeiderkontroll mislyktes" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "E-post backend ikke konfigurert" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Helsekontroll av IvenTree system mislyktes" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Ventende" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Plassert" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Fullført" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Kansellert" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Tapt" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Returnert" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Sendt" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Merknad nødvendig" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Skadet" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Ødelagt" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Avvist" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "Karantene" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Legacy stock sporingsoppføring" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Lagevare opprettet" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Redigerte lagervare" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Tildelt serienummer" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Lager tellet" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Lager manuelt lagt til" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Lager manuelt fjernet" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Posisjon endret" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Installert i montering" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Fjernet fra montering" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Installert komponentelement" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Fjernet komponentelement" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Delt fra overordnet element" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Delt fra underelement" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Sammenslått lagervare" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Konvertert til variant" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Sendt til kunde" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Returnert av kunde" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Build ordreutgang opprettet" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Build ordreutg fullført" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Antatt som byggeordre" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Mottatt mot innkjøpsordre" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Produksjon" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Ikke en gyldig valutanr" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN må matche regex-mønster {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Overde-verdien må ikke være negativ" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Overde må ikke overstige 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "ugyldig verdi for rad" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Rediger brukerinformasjon" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Velg passord" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Passordfeltene må samsvare" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Feil passord angitt" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Systeminformasjon" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Bygningen må avbrytes før den kan slettes" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Ugylding valg for overordnet build" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Ugylding valg for overordnet build" msgid "Build Order" msgstr "Build ordre" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Build Ordre" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Ugylding valg for overordnet build" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Bygg ordrereferanse" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referanse" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Kort beskrivelse av build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Overordnet build" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Build order som denne build er tildelt til" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Del" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Valg del å bygge" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Salg order referanse" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Salgorder som denne build er tildelt til" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Kilde plassering" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Valg sted for å ta lagervare fra for dette prosjektet (la stå tomt for a ta fra hvilken som helst sted)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Sted for destinasjon" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Velg sted hvor fulførte elementer vil bli lagret" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Prosjekt mengde" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Antall lagervare til prosjektet" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Fullførte elementer" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Byggstatus" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Byggstatuskode" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Batch kode" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Batch kode for denne build output" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Forventet dato for ferdigstillelse. Build er forvalt etter denne datoen." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "fullført av" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Brukeren som utstede denne prosjekt order" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Bruker ansvarlig for denne prosjekt order" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Ekstra prosjekt notater" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "Bygg prioritet" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "Prioritet for denne byggeordren" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Byggeordre {build} er fullført" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Byggeordre er fullført" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Ingen prosjekt utgang" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Prosjekt utdata er allerede utfylt" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Prosjekt utdata samsvarer ikke Prosjekt Order" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Prosjektvare må spesifisere en prosjekt utdata, siden hovedvaren er markert som sporbar" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelige lager mengde ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Lagervare er overtildelt" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Tildeling antallet må være større enn null" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må væew 1 for serialisert lagervare" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Valgt lagevare ikke funnet i BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Prosjekt" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Bygge for å tildele deler" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Kilde lagervare" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Antall" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å allokere til bygging" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Installerings informasjon" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Målets lagervare" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Byggresultat" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Byggresultat samsvarer ikke med det overordnede bygget" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med byggordre del" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Jobben er allerede fullført" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "Denne produksjonen er ikke fullt tildelt" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Angi antall for build utgang" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, materialene inneholder sporbare deler" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for bygge-utganger" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummere" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk allokering av nødvendige elementer med tilsvarende serienummer" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienumre finnes allerede eller er ugyldige" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "En liste over byggeresultater må oppgis" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Beliggenhet" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "Sted for ferdige byggeresultater" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Status" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullstendig produkt dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "Fjern tildelt lagerbeholdning" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "Trekk fra alle varer som allerede er tildelt dette bygget" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige resultater" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle byggresultater som ikke er fullført" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne byggeordren" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "Fjern før du fullfører denne ordren" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "Overtildelt lager" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hvordan vil du håndtere ekstra lagervarer tildelt for byggeordre" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "Noen varer i lager har blitt overskredet" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Godta at lagervarer ikke er fullt tildelt til denne byggeordren" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "Påkrevd varer er ikke fullt tildelt" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Godta ufullstendig" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "Godta at antallet byggprodukter som kreves, ikke er gjennomført" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "Antall nødvendige bygg er ikke fullført" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "Bestillingen har ufullstendige resultater" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "BOM varer" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "Byggresultat" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "Byggresultat må peke til samme byggversjon" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part må peke på den samme delen som byggeordren" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "Varen må være på lager" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig mengde ({q}) overskredet" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "Bygge utdata må spesifiseres for allokering av sporede deler" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Bygge utdage kan ikke spesifiseres for allokering av usporede deler" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "Denne lagervaren er allerede tildelt til denne byggeproduksjonen" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "Allokeringselementer må oppgis" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagersted hvor deler skal hentes (la stå tomt for å ta fra hvilken som helst lokasjon)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Eksluderer lokasjon" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte lokasjonen" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "Byttebar vare" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer i flere lokasjoner kan brukes om hverandre" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Erstatningsvare" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "Valgfrie elementer" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM varer til bygge ordre" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "Bygge ordre {bo} er nå forfalt" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Skriv ut handlinger" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Skriv ut byggeordre rapport" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Bygg handlinger" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Rediger bygg" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Avbryt bygging" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "Dupliser bygg" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Slett bygg" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Denne byggeordren er allokert til salgsordre %(link)s" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Denne byggeordre er underordnet for byggeordre %(link)s" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "Byggeordre er klar til å markere som fullført" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Byggeordre kan ikke fullføres fordi utganger forblir" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "Nødvendig mengde bygg er ikke fullført ennå" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Lager er ikke fullt tildelt til denne byggordren" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Måldato" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Forfall for denne builden var %(target)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Forfallt" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Fullført" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Salgsorder" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Utstedt av" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "Prioritet" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Slett denne byggeordren" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Build detaljer" @@ -1497,8 +1652,8 @@ msgstr "Lager kilde" msgid "Stock can be taken from any available location." msgstr "Lagervare kan hentes fra alle tilgengelige steder." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Destinasjon" @@ -1510,21 +1665,23 @@ msgstr "Målplassering er ikke spesifisert" msgid "Allocated Parts" msgstr "Tildelte deler" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Parti" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Opprettet" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "Tildel lagervarer til bygg" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Fjern lager allokering" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Bestill nødvendige deler" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Bestill deler" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "Slett resultat" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Utskrifts handlinger" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Skriv ut etiketter" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Fullførte byggeresultater" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Vedlegg" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Bygg notater" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "Tildeling fullført" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "Alle usporbar lagervarer har tildelt" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Ny byggeordre" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Skriv ut byggeordre" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "Byggordre detaljer" @@ -1685,23 +1833,24 @@ msgstr "Ufullstendige resultater" msgid "Completed Outputs" msgstr "Fullførte byggeresultater" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Filformatet støttes ikke: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Feil under lesing av fil (ugyldig koding)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Feil under lesing av fil (ugyldig format)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Feil under lesing av fil (feil dimensjon)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Feil under lesing av fil (data kan være skadet)" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} Fil" msgid "Select {name} file to upload" msgstr "Velg {name} fil som skal lastes opp" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "Innstillingsnøkkel (må være unik - ufølsom for store of små bokstaver)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Ingen gruppe" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Omstart påkrevd" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "En innstilling har blitt endrett som krever en serveromstart" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "Server Instans navn" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Bruk forekomstnavn" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "Bruk forekomstnavnet i tittellinjen" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "Begrens visning av 'about'" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "Vis bare `about` modal til superbrukere" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Firmanavn" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Base-URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Base URL for server instans" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Tilat nedlastning av eksterne bilder og filer fra ekstern URL" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "Krever bekreftelse" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "Krev eksplisitt brukerbekreftelse for visse handlinger." -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "Tre dybde" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standard tredybde for trevisning. Dypere nivåer kan lastes inn ved behov." -#: common/models.py:966 -msgid "Automatic Backup" -msgstr "Automatisk sikkerhetskopiering" - -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" -msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" - -#: common/models.py:973 -msgid "Days Between Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:974 -msgid "Specify number of days between automated backup events" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "Slett gamle oppgaver" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "Slett feillogger" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "Feilloggene vil bli slettet etter et angitt antall dager" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "Brukervarsler slettes etter antall angitte dager" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Strekkode støtte" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Aktiver skrekkodeleser støtte" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "Strekkode registrering forsinkelse" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "Strekkode tidsforsinkelse i behandling" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "Strekkode webcam støtte" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "Tillat strekkodelesning via webkamera i nettleseren" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "IPN regex" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Regulært uttrykksmønster for matchende del IPN" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Tilat duplisert IPN" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Tillat flere deler å dele samme IPN" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Tillat redigering av IPN" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Tillat å endre IPN-verdien mens du redigerer en del" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Kopier BOM data fra del" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "Kopier BOM-data som standard når du dupliserer en del" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "Kopier del parameterdata" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "Kopier parameterdata som standard ved duplisering av en del" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "Kopier del test data" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "Kopier testdata som standard ved duplisering av en del" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Kopier designmaler for kategoriparametere" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Kopier kategori parametermaler ved oppretting av en del" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Mal" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Deler er maler som standard" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Montering" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Deler kan settes sammen fra andre komponenter som standard" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Komponent" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Deler kan bli brukt som underkomponenter som standard" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Kjøpbar" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Deler er kjøpbare som standard" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Salgbar" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Deler er salgbare som standard" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Sporbar" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Deler er sporbare som standard" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtuelle" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Deler er virtuelle som standard" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Vis import i visninger" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Vis importveiviseren i noen deler visninger" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Vis relaterte deler" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Vis relaterte deler i en del" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "Automatisk sikkerhetskopiering" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "Feilloggene vil bli slettet etter et angitt antall dager" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "Brukervarsler slettes etter antall angitte dager" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Strekkode støtte" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Aktiver skrekkodeleser støtte" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "Strekkode registrering forsinkelse" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "Strekkode tidsforsinkelse i behandling" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "Strekkode webcam støtte" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Tillat strekkodelesning via webkamera i nettleseren" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "IPN regex" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Regulært uttrykksmønster for matchende del IPN" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Tilat duplisert IPN" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Tillat flere deler å dele samme IPN" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Tillat redigering av IPN" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Tillat å endre IPN-verdien mens du redigerer en del" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Kopier BOM data fra del" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Kopier BOM-data som standard når du dupliserer en del" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Kopier del parameterdata" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Kopier parameterdata som standard ved duplisering av en del" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Kopier del test data" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Kopier testdata som standard ved duplisering av en del" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Kopier designmaler for kategoriparametere" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Kopier kategori parametermaler ved oppretting av en del" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Mal" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Deler er maler som standard" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Montering" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Deler kan settes sammen fra andre komponenter som standard" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Komponent" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Deler kan bli brukt som underkomponenter som standard" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Kjøpbar" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Deler er kjøpbare som standard" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Salgbar" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Deler er salgbare som standard" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Sporbar" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Deler er sporbare som standard" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtuelle" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Deler er virtuelle som standard" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Vis import i visninger" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Vis importveiviseren i noen deler visninger" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Vis relaterte deler" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Vis relaterte deler i en del" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Tillat redigering av salgsordrer etter de har blitt sendt eller fullført" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Tillat redigering av innkjøpsordre etter at de har blitt sendt eller fullført" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "E-postadresse kreves" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "Krevt at brukeren angi e-post ved registrering" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO brukere" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO kontodata" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "E-post to ganger" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "Ved registrering spør brukere to ganger for e-posten" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "Passord to ganger" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Ved registrerting, spør brukere to ganger for passord" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Gruppe på registrering" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "Gruppe for hvilke nye brukere som er tilknyttet registrering" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Sjekk at alle programtillegg er installert ved oppstart - aktiver i containermiljøer" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "Sjekk plugin signaturer" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "Kontroller og vis signaturer for plugins" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "Aktiver URL integrering" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "Aktiver tillegg for å legge til URL" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrering" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "Aktiver plugins for å integrere inn i navigasjon" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "Aktiver app integrasjon" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "Aktiver plugins for å legge til apper" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "Aktiver integrering av tidsplan" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "Aktiver utvidelser for å kjøre planlagte oppgaver" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrering" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "Aktiver plugins til å svare på interne hendelser" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "Innstillingsnøkkel (må være unik - ufølsom for store og små bokstaver" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "Vis abbonerte deler" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "Vis abbonerte deler på hjemmesiden" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "Vis abbonerte kategorier" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "Vis abbonerte delkatekorier på hjemmesiden" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Vis nyeste deler" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Vis nyeste deler på hjemmesiden" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "Antall nylig deler" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "Antall nylige deler som skal vises på indeks-side" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "Vis uvaliderte BOMs" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "Vis BOMs som venter validering på hjemmesiden" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Vis nylige lagerendringer" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Vis nylig endret lagervarer på hjemmesiden" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "Siste lagertelling" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "Antall nylige lagervarer som skal vises på indeksside" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Vis lav lager" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Vis lav lagervarer på hjemmesiden" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Vis tom lagervarer" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Vis lav lagerbeholdning på hjemmesiden" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Vis nødvendig lagervare" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Vis lagervarer som trengs for å bygge på hjemmesiden" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Vis utløpt lager" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Vis utløpte lagerbeholdninger på hjemmesiden" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "Del planlegging" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "Del planlegging" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Aktiv" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "Sjetong" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "Vert" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "Tittel" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "Brødtekst" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Last opp fil" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "Sammelign felter" @@ -3060,7 +3329,7 @@ msgstr "Beskrivelse av firmaet" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Nettside" @@ -3086,6 +3355,7 @@ msgstr "Kontakt-telefonnummer" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "E-post" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "Kontakt e-post" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "Link til ekstern bedriftsinformasjon" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Bilde" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Notater til firma" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "Produserer dette firmaet deler?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Valuta" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Standardvaluta brukt for dette firmaet" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Produsentens varenummer" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Produsentdeler" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Produsentens varenummer" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Produsentdeler" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "Last ned bilde fra URL" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Kunde" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Last opp bilde" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Leverandør deler" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Oprett ny leverandørdel" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Ny leverandørdel" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Bestill deler" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Slett deler" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Slett deler" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Produsentdeler" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Opprett ny produsentdeler" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Ny produsentdel" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Leverandør lager" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Bestillingsorder" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Opprett ny bestillingsorder" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Ny bestillingsorder" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Salgsordre" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Opprett ny salgsordre" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Ny salgsorder" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "Tildelt lagervare" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Leverandørliste" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Produsenter" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Bestill del" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Endre produsent del" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Slett produsentdel" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Leverandører" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Slett leverandørdeler" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Slett" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "Tildelt lagervarer" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Leverandør deler" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "Handlinger for leverandørdeler" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Bestill del" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "Rediger Leverandørdel" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "Dupliser leverandørdelen" @@ -3713,95 +3996,68 @@ msgstr "Slett Leverandørdel" msgid "Delete Supplier Part" msgstr "Slett Leverandørdel" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "Leverandør lager" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "Leverandørordre" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "Koble strekkode til leverandørdelen" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "Oppdater tilgjengelighet" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "Spørrefilter (kommaseparert liste over nøkkel=verdiparer)," -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filtre" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN må matche regex-mønster {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "Valgmuligheter" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "Seriernummer eksisterer allerede" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Seriernummer eksisterer allerede" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Bekreft" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "Alle valgte leverandørdeler vil slettes" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Vis kalender" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Vis liste" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po index 5a8f77163f..96d70c68e8 100644 --- a/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" @@ -29,23 +33,26 @@ msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" msgid "Enter date" msgstr "Wprowadź dane" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Uwagi" @@ -58,23 +65,23 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru" msgid "Provided value does not match required pattern: " msgstr "Podana wartość nie pasuje do wymaganego wzoru: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Wprowadź hasło" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Wprowadź nowe hasło" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Potwierdź hasło" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Potwierdź nowe hasło" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Stare hasło" @@ -98,95 +105,95 @@ msgstr "Podany podstawowy adres e-mail jest nieprawidłowy." msgid "The provided email domain is not approved." msgstr "Podany e-mail domeny nie został zatwierdzony." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Podwójny numer seryjny" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Nieprawidłowy zakres grupy: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Zakres grupy {g} przekracza dozwoloną ilość ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Nieprawidłowa sekwencja grupy: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Liczba unikalnych numerów seryjnych ({s}) musi odpowiadać ilości ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Usuń znaczniki HTML z tej wartości" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Nieprawidłowo sformatowany wzór" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Określono nieznany format klucza" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Brak wymaganego formatu klucza" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Pole odniesienia nie może być puste" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Odniesienie musi być zgodne z wymaganym wzorem" @@ -194,566 +201,615 @@ msgstr "Odniesienie musi być zgodne z wymaganym wzorem" msgid "Reference number is too large" msgstr "Numer odniesienia jest zbyt duży" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Brak pliku" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Załącznik" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Wybierz plik do załączenia" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Łącze" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Komentarz" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Komentarz pliku" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Użytkownik" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "data przesłania" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Nazwa pliku nie może być pusta" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Nieprawidłowy katalog załącznika" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Nazwa pliku zawiera niedozwolony znak '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Brak rozszerzenia w nazwie pliku" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Załącznik o tej nazwie już istnieje" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Błąd zmiany nazwy pliku" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "nadrzędny" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Ścieżka" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Dane kodu kreskowego" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Dane kodu kreskowego stron trzecich" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Hasz kodu kreskowego" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Unikalny hasz danych kodu kreskowego" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Waluta" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Nazwa pliku" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Plik danych" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Wybierz plik danych do przesłania" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Nieobsługiwany typ pliku" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Plik jest zbyt duży" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Nie znaleziono kolumn w pliku" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Nie znaleziono wierszy danych w pliku" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Nie podano wierszy danych" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Nie podano kolumn danych" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Brakuje wymaganej kolumny: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Zduplikowana kolumna: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Czeski" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Duński" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Niemiecki" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Grecki" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Angielski" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Hiszpański" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Hiszpański (Meksyk)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Perski" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francuski" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebrajski" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Węgierski" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Włoski" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japoński" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreański" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Holenderski" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norweski" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polski" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugalski" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugalski (Brazylijski)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Rosyjski" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Słoweński" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Szwedzki" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Tajski" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turecki" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Chiński" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Sprawdzenie robotnika w tle nie powiodło się" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Nie skonfigurowano backendu e-mail" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Sprawdzanie poziomu zdrowia InvenTree nie powiodło się" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "W toku" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Umieszczony" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Zakończono" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Anulowano" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Zagubiono" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Zwrócone" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Wysłane" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Wymaga uwagi" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Uszkodzone" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Zniszczone" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Odrzucone" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "Poddany kwarantannie" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Starsze śledzenie wpisów stanu magazynowego" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Utworzono element magazynowy" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Edytuj pozycję magazynową" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Przypisano numer seryjny" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Zapas policzony" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Zapas dodany ręcznie" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Zapas usunięty ręcznie" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Lokalizacja zmieniona" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Zainstalowano do montażu" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Usunięto z montażu" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Zainstalowano element komponentu" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Usunięto element komponentu" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Podziel z pozycji nadrzędnej" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Podziel element podrzędny" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Scalone przedmioty magazynowe" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Przekonwertowano na wariant" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Wyślij do klienta" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Zwrócony od klienta" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Dane wyjściowe kolejności kompilacji utworzone" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Dane wyjściowe kolejności kompilacji ukończone" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Zużyte przez kolejność kompilacji" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Otrzymane na podstawie zlecenia zakupu" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Produkcja" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN musi być zgodny z wyrażeniem regularnym {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Wartość przedawnienia nie może być ujemna" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Przedawnienie nie może przekroczyć 100 %" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Nieprawidłowa wartość przedawnienia" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Edytuj informacje użytkownika" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Ustaw hasło" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Hasła muszą być zgodne" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Podano nieprawidłowe hasło" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Informacja systemowa" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Nieprawidłowy wybór kompilacji nadrzędnej" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Nieprawidłowy wybór kompilacji nadrzędnej" msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Nieprawidłowy wybór kompilacji nadrzędnej" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referencja" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Krótki opis budowy" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Zamówienie budowy, do którego budowa jest przypisana" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Komponent" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Docelowa data zakończenia kompilacji. Po tej dacie kompilacja będzie zaległa." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Użytkownik odpowiedzialny za to zamówienie budowy" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Dodatkowe notatki do budowy" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Nie znaleziono wybranego elementu magazynowego w BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Budowa" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Ilość" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Lokalizacja" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Status" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Magazyn, z którego mają być pozyskane elementy (pozostaw puste, aby pobrać z dowolnej lokalizacji)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Akcje kodów kreskowych" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "Pokaż Kod QR" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Akcje drukowania" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Edytuj Budowę" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Anuluj Budowę" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Data docelowa" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Zaległe" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Zakończone" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Zamówienie zakupu" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Dodane przez" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Szczegóły budowy" @@ -1497,8 +1652,8 @@ msgstr "Źródło magazynu" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Przeznaczenie" @@ -1510,21 +1665,23 @@ msgstr "Nie określono lokalizacji docelowej" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Partia" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Utworzony" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "Przydziel zapasy do budowy" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Cofnij przydział zapasów" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Zamów wymagane komponenty" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Zamów komponent" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Drukuj etykiety" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Załączniki" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Notatki tworzenia" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Nowe zlecenie budowy" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Wydrukuj zlecenia budowy" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Nieobsługiwany format pliku: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Błąd odczytu pliku (nieprawidłowe kodowanie)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Błąd odczytu pliku (nieprawidłowy format)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Błąd odczytu pliku (niepoprawny wymiar)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Błąd odczytu pliku (dane mogą być uszkodzone)" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} Plik" msgid "Select {name} file to upload" msgstr "Wybierz plik {name} do przesłania" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Brak grupy" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Nazwa firmy" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Bazowy URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Obsługa kodu kreskowego" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Włącz obsługę skanera kodów" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "Wyrażenie regularne IPN" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Zezwól na powtarzający się IPN" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Zezwól na edycję IPN" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "Skopiuj BOM komponentu" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Szablon" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Złożenie" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Komponent" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Możliwość zakupu" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Części są domyślnie z możliwością zakupu" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Możliwość sprzedaży" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Części są domyślnie z możliwością sprzedaży" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Możliwość śledzenia" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Części są domyślnie z możliwością śledzenia" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Wirtualny" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Części są domyślnie wirtualne" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "dni" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Obsługa kodu kreskowego" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Włącz obsługę skanera kodów" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "Wyrażenie regularne IPN" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Zezwól na powtarzający się IPN" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Zezwól na edycję IPN" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Skopiuj BOM komponentu" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Szablon" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Złożenie" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Komponent" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Możliwość zakupu" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Części są domyślnie z możliwością zakupu" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Możliwość sprzedaży" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Części są domyślnie z możliwością sprzedaży" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Możliwość śledzenia" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Części są domyślnie z możliwością śledzenia" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Wirtualny" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Części są domyślnie wirtualne" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Rozmiar strony" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "Włącz generowanie raportów testów" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" -msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter" - -#: common/models.py:1596 -msgid "Show subscribed parts" -msgstr "Pokaż obserwowane części" - -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" -msgstr "Pokaż obserwowane części na stronie głównej" - -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "Pokaż obserwowane kategorie" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "Pokaż obserwowane kategorie części na stronie głównej" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "Pokaż najnowsze części" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "Pokaż najnowsze części na stronie głównej" - -#: common/models.py:1617 -msgid "Recent Part Count" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1624 -msgid "Show unvalidated BOMs" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "Pokaż niski stan magazynowy" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" -msgstr "Pokaż elementy o niskim stanie na stronie głównej" - #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "Pokaż obserwowane części" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "Pokaż obserwowane części na stronie głównej" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "Pokaż obserwowane kategorie" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "Pokaż obserwowane kategorie części na stronie głównej" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "Pokaż najnowsze części" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "Pokaż najnowsze części na stronie głównej" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "Pokaż niski stan magazynowy" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "Pokaż elementy o niskim stanie na stronie głównej" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Pokaż wymagany stan zapasów" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "Szukaj części" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "Ukryj nieaktywne części" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "Pokaż ilość w formularzach" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "Stały pasek nawigacyjny" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "Format daty" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "Preferowany format wyświetlania dat" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "Planowanie komponentów" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "Pokaż ilość w formularzach" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "Stały pasek nawigacyjny" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "Format daty" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "Preferowany format wyświetlania dat" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "Planowanie komponentów" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Cena" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Aktywny" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "Sekret" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "Nagłówek" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "Zawartość" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "Autor" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Wyślij plik" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "Opis firmy" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Strona WWW" @@ -3086,6 +3355,7 @@ msgstr "Numer telefonu kontaktowego" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "Adres E-Mail" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "Kontaktowy adres e-mail" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Kontakt" @@ -3105,11 +3378,11 @@ msgstr "Punkt kontaktowy" msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Obraz" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Notatki firmy" @@ -3137,229 +3410,230 @@ msgstr "jest producentem" msgid "Does this company manufacture parts?" msgstr "Czy to przedsiębiorstwo produkuje części?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Waluta" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Część bazowa" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Wybierz część" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Producent" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Wybierz producenta" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Numer producenta komponentu" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Komponent producenta" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Wartość" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Jednostki" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Jednostki parametru" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Dostawca" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Wybierz dostawcę" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Uwaga" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "koszt podstawowy" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Opakowanie" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "Opakowanie części" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "wielokrotność" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Dostępne" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "Domyślna waluta używana dla tego dostawcy" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Kod Waluty" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Firma" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Część bazowa" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Wybierz część" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Producent" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Wybierz producenta" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Numer producenta komponentu" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Komponent producenta" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Wartość" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Jednostki" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Jednostki parametru" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Dostawca" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Wybierz dostawcę" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Uwaga" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "koszt podstawowy" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Opakowanie" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "Opakowanie części" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "wielokrotność" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Dostępne" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Domyślna waluta używana dla tego dostawcy" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Utwórz zamówienie zakupu" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Edytuj firmę" @@ -3400,14 +3674,17 @@ msgstr "Pobierz obraz z adresu URL" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Klient" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Załaduj obrazek" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Pobierz obraz" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Komponenty dostawcy" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Utwórz nowego dostawcę części" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Nowy dostawca części" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Zamów komponenty" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Usuń części" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Usuń części" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Części producenta" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Utwórz nową część producenta" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Nowa część producenta" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Zapasy dostawcy" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Zamówienia zakupu" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Utwórz nowe zamówienie zakupu" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Nowe zamówienie zakupu" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Utwórz nowe zlecenie sprzedaży" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Lista dostawców" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Producenci" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Zamów komponent" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "Edytuj komponent producenta" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "Usuń komponent producenta" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Dostawcy" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Usuń" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametry" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Nowy parametr" @@ -3619,8 +3926,8 @@ msgstr "Nowy parametr" msgid "Delete parameters" msgstr "Usuń parametry" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Dodaj parametr" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Akcje kodów kreskowych" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "Pokaż Kod QR" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "Zamów komponent" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "Skaner kodów" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "Utwórz nowy towar" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "Nowy towar" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Informacja cenowa" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Stan" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Zamówienia" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Cennik" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Towary" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "Nowy dostawca" @@ -3819,7 +4075,7 @@ msgstr "Klienci" msgid "New Customer" msgstr "Nowy klient" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Firmy" @@ -3827,519 +4083,604 @@ msgstr "Firmy" msgid "New Company" msgstr "Nowa firma" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "Nazwa etykiety" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Opis etykiety" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "Etykieta" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Aktywne" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Szerokość [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Wysokość [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "Wzór nazwy pliku" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filtry" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" -msgstr "Opis Zamówienia" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Cena całkowita" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:93 -msgid "Created By" -msgstr "Utworzony przez" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" - -#: order/models.py:105 -msgid "Order notes" -msgstr "Notatki do zamówienia" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "Odniesienie zamówienia" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "Status zamówienia zakupu" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "odebrane przez" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "Data wydania" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "Data wystawienia zamówienia" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "Data Dostawy Towaru" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Utworzony przez" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Notatki do zamówienia" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Odniesienie zamówienia" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Status zamówienia zakupu" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "odebrane przez" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Data wydania" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Data wystawienia zamówienia" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "Zamówienie" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "Odebrane" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "Gdzie kupujący chce przechowywać ten przedmiot?" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "Notatki do przesyłki" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "Linia" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "Komponent" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "Kod kreskowy" + +#: order/serializers.py:510 +msgid "Scanned barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Eksportuj zamówienie do pliku" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "Edytuj zamówienie" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Anuluj zamówienie" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Oznacz zamówienie jako zakończone" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "Kompletne zamówienie" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "Numer zamówienia" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "Opis zamówienia" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "Status zamówienia" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "Niekompletny" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "Wydany" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "Duplikuj wybrane" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Usuń wiersz" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "Dodaj element zamówienia" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "Otrzymane elementy" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "Notatki zamówień" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "Wydrukuj raporty zamówienia" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "Całkowity Koszt" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "Oczekujące przesyłki" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "Akcje" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "Nowa wysyłka" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "Nie znaleziono ceny" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "ID komponentu" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "Nazwa komponentu" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Wersja" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "ID kategorii" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "Na stanie" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "W Zamówieniu" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "Użyte w" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "Przydzielono" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "Ścieżka kategorii" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Części" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "IPN komponentu" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "Ważny" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "Ta opcja musi być zaznaczona" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Domyślna lokalizacja" @@ -4855,814 +5260,939 @@ msgstr "Domyślna lokalizacja" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Dostępna ilość" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "Domyślne słowa kluczowe" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategoria komponentu" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "Domyślne słowa kluczowe" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "Nieprawidłowy wybór dla części nadrzędnej" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "Część '{p1}' jest używana w BOM dla '{p2}' (rekursywne)" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN musi być zgodny z wyrażeniem regularnym {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:834 -msgid "Part description" -msgstr "Opis komponentu" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Kategoria" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "Czy ta część może być użyta do budowy innych części?" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "Czy to wirtualna część, taka jak oprogramowanie lub licencja?" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "Ostatnia inwentaryzacja" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "Data" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "Wymagane" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "Część nadrzędna" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "Dane" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "Wartość parametru" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "Unikalny wartość ID komponentu" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "Wartość IPN części" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "Poziom" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "Opcjonalne" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "Dziedziczone" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "Zatwierdzone" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "Część 1" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "Część 2" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "Wyczyść istniejący BOM" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "Nie podano ilości" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "Nieprawidłowa ilość" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "Nie masz uprawnień do edycji BOM." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "Usuń elementy" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "Masz włączone powiadomienia dla tej kategorii" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "Włącz powiadomienia dla tej kategorii" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "Akcje kategorii" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Edytuj kategorię" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Edytuj kategorię" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Usuń kategorię" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Usuń kategorię" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "Kategoria najwyższego poziomu" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Podkategorie" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Części (w tym podkategorie)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "Utwórz nową część" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "Nowy komponent" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "Opcje" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "Ustaw kategorię" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "Ustaw kategorię" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "Drukuj etykiety" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Parametry części" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "Stwórz nową kategorię komponentów" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Nowa kategoria" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "Utwórz nową kategorię części" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Odśwież" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "Warianty Części" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "Utwórz nowy wariant" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "Nowy wariant" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "Powiązane części" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "Dodaj powiązane" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Zestawienie materiałowe" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "Akcje eksportu" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Eksportuj BOM" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "Drukuj raport BOM" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "Wgraj BOM" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "Weryfikuj BOM" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "Dodaj część do BOM" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "Złożenia" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "Dostawcy Części" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "Producenci części" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "Powiązane części" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "Dodaj powiązaną część" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "Wybierz format pliku" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Drukuj etykietę" @@ -5986,7 +6518,7 @@ msgstr "Pokaż informacje o cenach" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Akcje magazynowe" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "Nieaktywny" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "Część jest wirtualna (nie fizyczna)" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "Nieaktywny" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "Przypisane do zamówień sprzedaży" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "Minimalny poziom stanu magazynowego" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "Ostatni numer seryjny" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "Szukaj numeru seryjnego" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "Kod QR części" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "Oblicz" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "Nie znaleziono pasujących obrazów" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "Ukryj szczegóły części" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "Cennik dostawcy" @@ -6127,13 +6661,6 @@ msgstr "Cennik dostawcy" msgid "Unit Cost" msgstr "Cena jednostkowa" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "Całkowity Koszt" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "Brak dostępnych cen dostawców" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "Warianty" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Stan" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Cennik" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "Planowanie" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "Szablony testowe" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "Ostatnia aktualizacja" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "Brak w magazynie" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "Nieznana baza danych" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "Kod QR części" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "Wybierz obrazek części" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "Zaktualizowano zdjęcie części" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "Nie znaleziono obrazka części" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "Cennik części" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Znaleziono wyniki dla danych kodu kreskowego" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "Ustawienie jednokrotnego wyboru" msgid "A setting with multiple choices" msgstr "Ustawienie wielokrotnego wyboru" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "Źródłowy adres URL" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "Źródło pakietu - może to być niestandardowy rejestr lub ścieżka VCS" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "Nazwa pakietu" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "Nazwa pakietu wtyczki - może również zawierać wskaźnik wersji" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "Potwierdź instalację wtyczki" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "Spowoduje to zainstalowanie tej wtyczki w bieżącej instancji. Instancja przejdzie do trybu konserwacji." -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "Instalacja nie została potwierdzona" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "Nazwa szablonu" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "Filtr części" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "Wycinek" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Cena jednostkowa" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Razem" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Numer Seryjny" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Numer Seryjny" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "Wynik" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "Zaliczone" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "Niezaliczone" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Zainstalowane elementy" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "Numer seryjny" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "ID lokalizacji" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "Ścieżka lokalizacji" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "ID części dostawcy" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "Data ważności" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "Właściciel" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "Wybierz właściciela" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "Nadrzędny towar" - -#: stock/models.py:658 -msgid "Base part" -msgstr "Część podstawowa" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "Wybierz pasującą część dostawcy dla tego towaru" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Lokacje stanu magazynowego" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "Właściciel" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "Wybierz właściciela" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Nadrzędny towar" + +#: stock/models.py:670 +msgid "Base part" +msgstr "Część podstawowa" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Wybierz pasującą część dostawcy dla tego towaru" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Ilość nie może przekraczać dostępnej ilości towaru ({n})" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "Numer seryjny już istnieje" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "Nazwa testu" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "Cena zakupu tego towaru" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Numer seryjny już istnieje" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "Skanuj do lokacji" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "Akcje druku" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "Przelicz stan magazynowy" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "Usuń stan magazynowy" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "Przenieś stan magazynowy" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "Element nadrzędny" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "Nie ustawiono producenta" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "Tylko do odczytu" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "poprzednia strona" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "następna strona" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "Lokacje nie są ustawione" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "Testy" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "Termin minął" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "Ostrzeżenie" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "Wróć do stanu magazynowego" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Edytuj lokację" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Lokacje stanu magazynowego" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "Nowa lokalizacja" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "Elementy podrzędne" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Odmowa dostępu" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "Zaloguj się" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "Ustawienia etykiet" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "Ustawienia logowania" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "Ustawienia" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "Otwórz w nowej karcie" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "Ustawienia części" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "Import części" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "Import części" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "Wtyczki" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "Etap" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "Wiadomość" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "Kurs wymiany" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "Aktualizuj teraz" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "Ostatnia Aktualizacja" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "Nigdy" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "Ustawienia raportu" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "Nie ustawiono wartości" @@ -7926,71 +8557,71 @@ msgstr "Nie ustawiono wartości" msgid "Edit setting" msgstr "Edytuj ustawienie" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "Edytuj ustawienie wtyczki" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "Edytuj ustawienie globalne" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "Edytuj ustawienie użytkownika" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "Nie znaleziono szablonów parametrów kategorii" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "Edytuj szablon" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "Usuń szablon" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "Nie znaleziono szablonów parametrów części" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,43 +8631,42 @@ msgid "User Settings" msgstr "Ustawienia użytkownika" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Ustawienia konta" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Ustawienia wyświetlania" +msgid "Display" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "Strona główna" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Ustawienia wyszukiwania" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Szukaj" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "Drukowanie etykiet" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "Raportowanie" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Ustawienia globalne" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" -msgstr "Konfiguracja serwera" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "Serwer" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "Kategorie" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Ustawienia konta" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "%(time)s temu" msgid "Do you really want to remove the selected email address?" msgstr "Czy na pewno chcesz usunąć wybrany adres e-mail?" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Ustawienia wyświetlania" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Ustawienia motywu" @@ -8271,9 +8909,9 @@ msgstr "" msgid "Home Page Settings" msgstr "Ustawienia strony głównej" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Ustawienia wyszukiwania" #: templates/about.html:9 msgid "InvenTree Version" @@ -8341,7 +8979,7 @@ msgstr "Potwierdź adres e-mail" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Proszę potwierdzić że %(email)s jest adresem e-mail dla użytkownika %(user_display)s." -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Potwierdź" @@ -8509,11 +9147,11 @@ msgstr "Wprowadź token wygenerowany przez aplikację:" msgid "Verify" msgstr "Zweryfikuj" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "Dodaj link" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "Dodaj załącznik" @@ -8521,32 +9159,33 @@ msgstr "Dodaj załącznik" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "Skaner kodów" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "Wymagane ponowne uruchomienie serwera" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "Zmieniono opcję konfiguracji, która wymaga ponownego uruchomienia serwera" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "Skontaktuj się z administratorem systemu w celu uzyskania dalszych informacji" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "Wymagana ilość" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "Minimalna ilość" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "Brak odpowiedzi" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "Brak odpowiedzi z serwera InvenTree" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "Błąd 400: Błędne żądanie" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "Żądanie interfejsu API zwróciło kod błędu 400" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "Błąd 401: Nieuwierzytelniony" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "Dane uwierzytelniające nie zostały dostarczone" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "Błąd 403: Odmowa dostępu" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "Nie masz uprawnień wymaganych do dostępu do tej funkcji" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "Błąd 404: Nie znaleziono zasobu" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "Żądany zasób nie mógł być zlokalizowany na serwerze" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "Błąd 405: Metoda nie jest dozwolona" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "Metoda HTTP nie jest dozwolona pod tym adresem URL" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "Błąd 408: Przekroczony limit czasu" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "Limit czasu połączenia podczas żądania danych z serwera" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "Nieobsługiwany kod błędu" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "Kod błędu" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "Nie znaleziono załączników" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "Edytuj załącznik" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "Data przesłania" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "Edytuj załącznik" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "Usuń załącznik" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "Wprowadź dane kodu kreskowego" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "Kod kreskowy" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "Wprowadź notatki" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "Błąd serwera" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "Nieznana odpowiedź serwera" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "Niepoprawna odpowiedź serwera" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "Zeskanuj kod kreskowy" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "Brak adresu URL w odpowiedzi" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "Rozłącz" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "Sprawdź" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "Wyświetl dane wiersza" msgid "Row Data" msgstr "Dane wiersza" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Zamknij" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "Dodaj zamiennik" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "Zobacz BOM" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "Zobacz BOM" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "Ostatni numer seryjny" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "Wyjście" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "Ilość za" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "Wybierz części" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "Wybierz" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "Brak informacji o użytkowniku" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "Dodaj producenta" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "Dodaj część producenta" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "Dodaj dostawcę" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "Wszystkie wybrane komponenty dostawcy zostaną usunięte" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "Dodaj nową firmę" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Usuń parametry" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "Nie znaleziono parametrów" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "Edytuj Parametr" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "Usuń parametr" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "Edytuj Parametr" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "Usuń parametr" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "Edytuj przedział cenowy" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "Ostatnio aktualizowane" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "Edytuj przedział cenowy" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "prawda" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "fałsz" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "Wybierz filtr" -#: templates/js/translated/filters.js:292 -msgid "Download data" -msgstr "Pobierz dane" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" +msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" -msgstr "Przeładuj dane" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" +msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "Dodaj nowy filtr" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "Wyczyść wszystkie filtry" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "Utwórz filtr" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "Działanie zabronione" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "Operacja utworzenia nie jest dozwolona" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "Operacja aktualizacji nie jest dozwolona" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "Operacja usuwania nie jest dozwolona" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "Operacja przeglądania nie jest dozwolona" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "Pozostaw ten formularz otwarty" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "Wprowadź poprawny numer" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Istnieją błędy formularza" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "Nie znaleziono wyników" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "Wyszukiwanie" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "Wyczyść wejście" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "Kolumna pliku" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "Nazwa pola" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "Wybór Kolumn" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "TAK" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "Nie" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "Wybierz przedmioty magazynowe" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "Nie znaleziono etykiet" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "Wybierz szablon etykiety" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "Nie znaleziono etykiet" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Anuluj" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Zatwierdź" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "Tytuł formularza" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "Oczekiwanie na serwer..." -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "Pokaż informacje o błędzie" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "Zaakceptuj" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "Wczytywanie danych" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "Niepoprawna odpowiedź serwera" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "Brak danych formularza z odpowiedzi serwera" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "Błąd podczas wysyłania danych formularza" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "Brak danych w formularzu odpowiedzi JSON" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "400: Nieprawidłowe zapytanie" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "Serwer zwrócił kod błędu 400" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "Błąd podczas żądania danych formularza" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "ID firmy" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "ID zamówienia" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "ID wysyłki" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "Oznacz zamówienie jako zakończone?" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Edytuj zamówienie zakupu" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "Kod zamówienia" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "Zamówione" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "Ilość do otrzymania" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "Potwierdź odbiór elementów" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "Przedmioty" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "Razem" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "Cena jednostkowa" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Cena całkowita" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "Nie znaleziono zamówień sprzedaży" - -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" -msgstr "Nieprawidłowy klient" - -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "Edytuj wysyłkę" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "Kompletna wysyłka" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "Usuń wysyłkę" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "Edytuj wysyłkę" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "Usuń wysyłkę" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "Nie odnaleziono pasujących przesyłek" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "Numer referencyjny przesyłki" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "Nie wysłano" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "Śledzenie" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Potwierdź przydział zapasów" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "Cena zakupu" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "Oblicz cenę" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "Zaktualizuj cenę jednostkową" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "Edytuj kategorię części" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "Czy na pewno chcesz usunąć tę kategorię części?" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "Utwórz część" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "Utwórz kolejną część po tej" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "Część utworzona pomyślnie" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "Edytuj część" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "Część zmodyfikowana" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "Utwórz wariant części" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "Masz włączone powiadomienia dla tej części" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "Masz włączone powiadomienia dla tej części" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "Włącz powiadomienia dla tej części" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "Zostałeś wypisany z powiadomień dla tej części" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "Obserwowane części" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Nie znaleziono wariantów" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "Nie znaleziono części" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Brak kategorii" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Wyświetl jako listę" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Wyświetl jako siatkę" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "Ustaw kategorię części" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Wyświetl jako drzewo" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "Obserwowana kategoria" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "Edytuj ${human_name}" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "Usuń ${human_name}" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "Edytuj zamówienie zakupu" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "Oznacz zamówienie jako zakończone?" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "Kod zamówienia" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "Ilość do otrzymania" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "Potwierdź odbiór elementów" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Przedmioty" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "Nieprawidłowy klient" + +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "Nie znaleziono zamówień sprzedaży" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "Edytuj wysyłkę" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "Kompletna wysyłka" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "Usuń wysyłkę" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "Edytuj wysyłkę" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "Usuń wysyłkę" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "Nie odnaleziono pasujących przesyłek" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "Numer referencyjny przesyłki" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "Nie wysłano" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "Śledzenie" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Potwierdź przydział zapasów" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "Cena zakupu" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "Oblicz cenę" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "Zaktualizuj cenę jednostkową" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "Czy na pewno chcesz skasować tą lokację?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "Czy na pewno chcesz usunąć tą część?" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "Przenieś" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "Weź" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "Dodaj stan" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "Dodaj" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "Usuń stan magazynowy" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "Wybierz przedmioty magazynowe" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "BRAK WYNIKÓW" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "Dodaj wynik testu" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "W produkcji" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "Kod statusu musi być wybrany" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "Szczegóły" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "Lokalizacja już nie istnieje" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "Zamówienie zakupu już nie istnieje" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "Klient już nie istnieje" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "Element magazynowy już nie istnieje" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "Dodano" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "Usunięto" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "Zatwierdzone" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "Uwzględnij podlokalizacje" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "Obesrwowane" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "Numer seryjny" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Kod partii" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "Aktywne części" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "Część jest zespołem" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "Jest przydzielony" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "Przedmiot został przydzielony" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "W produkcji" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "Obejmuje warianty" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "Zainstalowane" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "Posiada cenę zakupu" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "Test pomyślny" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "Przypisane do mnie" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "Status zamówienia" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "Przypisane do mnie" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "Uwzględnij podlokalizacje" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "Obesrwowane" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "Numer seryjny" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "Kod partii" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "Aktywne części" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "Część jest zespołem" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "Jest przydzielony" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "Przedmiot został przydzielony" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "W produkcji" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "Obejmuje warianty" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "Zainstalowane" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "Posiada cenę zakupu" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "Test pomyślny" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "Pokaż aktywne części" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "Posiada IPN" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "Część posiada wewnętrzny numer części" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "Możliwość zakupu" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Pokaż widok kalendarza" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Pokaż widok listy" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "Eksportuj dane tabeli" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "Wybierz format pliku" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "Wczytywanie danych" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "wierszy na stronę" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "Pokaż wszystkie wiersze" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Pokazywane" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "do" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "z" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "wierszy" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Szukaj" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Brak pasujących wyników" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "Ukryj/Pokaż stronicowanie" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "Przełącz" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Kolumny" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "Wszystkie" @@ -11261,19 +11975,19 @@ msgstr "Kup" msgid "Sell" msgstr "Sprzedaj" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "Pokaż powiadomienia" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "Nowe powiadomienia" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Wyloguj się" @@ -11285,10 +11999,6 @@ msgstr "Zapisz" msgid "Show all notifications and history" msgstr "Pokaż wszystkie powiadomienia i historię" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Dane QR nie zostały dostarczone" @@ -11309,18 +12019,10 @@ msgstr "Pokaż pełne wyniki wyszukiwania" msgid "Clear search" msgstr "Wyczyść wyszukiwanie" -#: templates/search.html:16 -msgid "Filter results" -msgstr "Filtruj wyniki" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "Zamknij menu wyszukiwania" -#: templates/search.html:35 -msgid "No search results" -msgstr "Brak wyników" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "Serwer" - #: templates/stats.html:13 msgid "Instance Name" msgstr "Nazwa instancji" @@ -11435,55 +12133,51 @@ msgstr "Ustawienia e-mail nie zostały skonfigurowane" msgid "Barcode Actions" msgstr "Akcje kodów kreskowych" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Drukuj raporty testowe" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "Opcje magazynowe" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "Dodaj do wybranych produktów magazynowych" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "Usuń z wybranych przedmiotów magazynowych" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "Przenieś wybrane przedmioty magazynowe" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "Połącz wybrane przedmioty magazynowe" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "Scal stany magazynowe" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Zamów wybrane elementy" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "Zmień status" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "Zmień status stanu magazynowego" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "Usuń zaznaczone elementy" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "Usuń stan magazynowy" @@ -11503,51 +12197,51 @@ msgstr "Użytkownicy" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "Informacje osobiste" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Uprawnienia" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "Ważne daty" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Grupa" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Widok" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Zmień" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" diff --git a/InvenTree/locale/pt/LC_MESSAGES/django.po b/InvenTree/locale/pt/LC_MESSAGES/django.po index 7e0a4f24f7..6a5378b920 100644 --- a/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Usuário não tem permissão para ver este modelo" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Detalhes do erro podem ser encontrados no painel de administrador" @@ -29,23 +33,26 @@ msgstr "Detalhes do erro podem ser encontrados no painel de administrador" msgid "Enter date" msgstr "Insira uma Data" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Anotações" @@ -58,23 +65,23 @@ msgstr "Valor '{name}' não está no formato correto" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Digite a senha" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Insira uma nova senha" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Confirmar senha" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Confirmar nova senha" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Senha atual" @@ -92,101 +99,101 @@ msgstr "Voce precisa digital o mesmo email." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "O endereço primário de e-mail não é válido." #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "O domínio de e-mail providenciado não foi aprovado." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" -msgstr "O servidor respondeu com código de status inválido" +msgstr "O servidor respondeu com código estado inválido" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" -msgstr "O servidor respondeu com valor inválido de '{Content-Length}'" +msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Tamanho da imagem muito grande" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu o tamanho máximo" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou resposta vazia" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Quantidade invalida" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Numero serial em branco" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Número de série duplicado" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Numero de grupo invalido:{g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Intervalo de grupos {g} excede a quantidade permitida ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Sequencia de grupo invalida:{g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Nenhum numero serial encontrado" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Numero de numeros seriais ({s}) precisa bater com quantidade ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Remova as \"tags\" HTML deste valor" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Padrão formatado incorretamente" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Chave de formato desconhecida especificada" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Chave de formato obrigatória ausente" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "O campo de referência não pode ficar vazio" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "A referência deve corresponder ao padrão exigido" @@ -194,2850 +201,3112 @@ msgstr "A referência deve corresponder ao padrão exigido" msgid "Reference number is too large" msgstr "O número de referência é muito grande" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Arquivo nao encontrado" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Link externo nao encontrado" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Anexo" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Link" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Link para URL externa" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Comentario" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Comentario sobre arquivo" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Usuario" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "data de upload" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Nome do arquivo nao pode estar vazio" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Diretorio para anexo invalido" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Arquivo contem characteres ilegais '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Arquivo sem extensao" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Anexo ja existe" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Erro renomeando o arquivo" -#: InvenTree/models.py:520 -msgid "Invalid choice" -msgstr "Escolha invalida" +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "Nomes duplicados não podem existir sob o mesmo parental" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:546 +msgid "Invalid choice" +msgstr "Escolha inválida" + +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Descricao" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Descricao (opicional)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "parent" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Caminho" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Dados de código de barras" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Dados de código de barras de terceiros" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Hash de código de barras" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Hash exclusivo de dados de código de barras" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Log de erro salvo pelo servidor." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Moeda" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "Selecione a Moeda nas opções disponíveis" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Nome do arquivo" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Arquivo de dados" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Selecione um arquivo de dados para enviar" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Tipo de arquivo não suportado" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "O arquivo é muito grande" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Nenhuma coluna encontrada no arquivo" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Nenhuma linha de dados encontrada no arquivo" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Nenhuma linha de dados fornecida" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Nenhuma coluna de dados fornecida" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Falta a coluna obrigatória: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Coluna duplicada: \"{col}\"" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "Endereço da URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL do arquivo de imagem remoto" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tcheco" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Dinamarquês" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Alemão" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Grego" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Inglês" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Espanhol" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Espanhol (Mexicano)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Persa" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francês" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebraico" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Húngaro" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japonês" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Holandês" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norueguês" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polonês" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" -msgstr "" +msgstr "Português" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" -msgstr "" +msgstr "Português (Brasileiro)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" -msgstr "" +msgstr "Russo" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" -msgstr "" +msgstr "Esloveno" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" -msgstr "" +msgstr "Sueco" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" -msgstr "" +msgstr "Tailandês" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" -msgstr "" +msgstr "Turco" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" -msgstr "" +msgstr "Vietnamita" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" -msgstr "" +msgstr "Chinês" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" -msgstr "" +msgstr "Falha em verificar o histórico do trabalhador" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" -msgstr "" +msgstr "Serviço de fundo do e-mail não foi configurado" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" -msgstr "" +msgstr "Verificação de saúde do sistema InvenTree falhou" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" -msgstr "" +msgstr "Pendente" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" -msgstr "" +msgstr "Colocado" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" -msgstr "" +msgstr "Completado" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" -msgstr "" +msgstr "Cancelado" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" -msgstr "" +msgstr "Perdido" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" -msgstr "" +msgstr "Retornado" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "Em Progresso" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" -msgstr "" +msgstr "Enviado" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" -msgstr "" +msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" -msgstr "" +msgstr "Necessita de atenção" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" -msgstr "" +msgstr "Danificado" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" -msgstr "" +msgstr "Destruído" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" -msgstr "" +msgstr "Rejeitado" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:259 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:261 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:263 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:264 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:266 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:267 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:268 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:270 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:272 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:273 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:275 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:276 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:278 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:279 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:283 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:286 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:288 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:289 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:290 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "" +msgstr "Em quarentena" #: InvenTree/status_codes.py:307 +msgid "Legacy stock tracking entry" +msgstr "Entrada de rastreamento de estoque antiga" + +#: InvenTree/status_codes.py:309 +msgid "Stock item created" +msgstr "Item de estoque criado" + +#: InvenTree/status_codes.py:311 +msgid "Edited stock item" +msgstr "Item de estoque editado" + +#: InvenTree/status_codes.py:312 +msgid "Assigned serial number" +msgstr "Número de série atribuído" + +#: InvenTree/status_codes.py:314 +msgid "Stock counted" +msgstr "Estoque contado" + +#: InvenTree/status_codes.py:315 +msgid "Stock manually added" +msgstr "Estoque adicionado manualmente" + +#: InvenTree/status_codes.py:316 +msgid "Stock manually removed" +msgstr "Estoque removido manualmente" + +#: InvenTree/status_codes.py:318 +msgid "Location changed" +msgstr "Local alterado" + +#: InvenTree/status_codes.py:320 +msgid "Installed into assembly" +msgstr "Instalado na montagem" + +#: InvenTree/status_codes.py:321 +msgid "Removed from assembly" +msgstr "Removido da montagem" + +#: InvenTree/status_codes.py:323 +msgid "Installed component item" +msgstr "Instalado componente do Item" + +#: InvenTree/status_codes.py:324 +msgid "Removed component item" +msgstr "Removido componente do Item" + +#: InvenTree/status_codes.py:326 +msgid "Split from parent item" +msgstr "Separado do Item Paternal" + +#: InvenTree/status_codes.py:327 +msgid "Split child item" +msgstr "Separar o Item filho" + +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 +msgid "Merged stock items" +msgstr "Itens de estoque mesclados" + +#: InvenTree/status_codes.py:331 +msgid "Converted to variant" +msgstr "Convertido para variável" + +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 +msgid "Sent to customer" +msgstr "Enviado ao cliente" + +#: InvenTree/status_codes.py:334 +msgid "Returned from customer" +msgstr "Retornado ao cliente" + +#: InvenTree/status_codes.py:336 +msgid "Build order output created" +msgstr "Criação dos pedidos de produção criado" + +#: InvenTree/status_codes.py:337 +msgid "Build order output completed" +msgstr "Criação do pedido de produção completado" + +#: InvenTree/status_codes.py:338 +msgid "Consumed by build order" +msgstr "Usado na ordem de produção" + +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "Enviado contra o Pedido de Venda" + +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "Recebido referente ao Pedido de Compra" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "Devolvido contra Pedido de Retorno" + +#: InvenTree/status_codes.py:358 msgid "Production" -msgstr "" +msgstr "Produção" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "Devolução" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "Consertar" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "Reembolsar" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "Substituir" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "Recusar" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" -msgstr "" +msgstr "Não é um código de moeda válido" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" -msgstr "" +msgstr "Valor excedente não deve ser negativo" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" -msgstr "" +msgstr "Excedente não deve exceder 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" -msgstr "" +msgstr "Valor de excedente inválido" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" -msgstr "" +msgstr "Editar informações do usuário" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" -msgstr "" +msgstr "Definir senha" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" -msgstr "" +msgstr "Os campos de senha devem coincidir" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" -msgstr "" +msgstr "Senha incorreta fornecida" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" -msgstr "" +msgstr "Informação do Sistema" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" -msgstr "" +msgstr "Sobre o InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" -msgstr "" +msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:791 msgid "Build Order" -msgstr "" +msgstr "Ondem de Produção" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" -msgstr "" +msgstr "Ordens de Produções" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Escolha de Produção parental inválida" + +#: build/models.py:157 msgid "Build Order Reference" -msgstr "" +msgstr "Referência do pedido de produção" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" +msgstr "Referência" + +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "" - -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" -msgstr "" +msgstr "Produção Progenitor" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" -msgstr "" +msgstr "Ordem de produção para qual este serviço está alocado" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" -msgstr "" +msgstr "Peça" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" -msgstr "" +msgstr "Selecionar peça para produção" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" -msgstr "" +msgstr "Referência do pedido de venda" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" -msgstr "" +msgstr "Ordem de Venda para qual esta produção está alocada" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" -msgstr "" +msgstr "Local de Origem" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" +msgstr "Selecione a localização para pegar do estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" -msgstr "" +msgstr "Local de Destino" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" -msgstr "" +msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" -msgstr "" +msgstr "Quantidade de Produção" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" -msgstr "" - -#: build/models.py:227 -msgid "Completed items" -msgstr "" +msgstr "Número de itens em estoque para produzir" #: build/models.py:229 +msgid "Completed items" +msgstr "Itens concluídos" + +#: build/models.py:231 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "Número de itens em estoque concluídos" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" -msgstr "" +msgstr "Progresso da produção" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" -msgstr "" +msgstr "Código de situação da produção" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" -msgstr "" +msgstr "Código de Lote" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" -msgstr "" +msgstr "Código do lote para esta saída de produção" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" -msgstr "" +msgstr "Criado em" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" -msgstr "" +msgstr "Data alvo final" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "Data alvo para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" -msgstr "" +msgstr "Data de conclusão" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" -msgstr "" +msgstr "Concluído em" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" -msgstr "" +msgstr "Emitido em" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" -msgstr "" +msgstr "Usuário que emitiu esta ordem de produção" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" -msgstr "" +msgstr "Responsável" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "Usuário ou grupo responsável para esta ordem de produção" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" -msgstr "" +msgstr "Link Externo" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" -msgstr "" +msgstr "Notas de produção complementares" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" -msgstr "" +msgstr "Prioridade de Produção" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" -msgstr "" +msgstr "Prioridade desta ordem de produção" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "O Pedido de produção {build} foi concluído!" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" -msgstr "" +msgstr "Um pedido de produção foi concluído" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" -msgstr "" +msgstr "Nenhuma saída de produção especificada" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" -msgstr "" +msgstr "Saída de produção já completada" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" -msgstr "" +msgstr "Saída da produção não corresponde à Ordem de Produção" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" +msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" -msgstr "" +msgstr "O item do estoque está sobre-alocado" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "Quantidade alocada deve ser maior que zero" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" -msgstr "" +msgstr "Item do estoque selecionado não encontrado na LDM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" -msgstr "" +msgstr "Produção" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" -msgstr "" +msgstr "Faça uma Produção para atribuir peças" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" -msgstr "" +msgstr "Item de estoque" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" -msgstr "" +msgstr "Origem do item em estoque" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" -msgstr "" +msgstr "Quantidade" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" -msgstr "" +msgstr "Instalar em" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" -msgstr "" +msgstr "Destino do Item do Estoque" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" -msgstr "" +msgstr "Saída da Produção" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" -msgstr "" +msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" -msgstr "" +msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" -msgstr "" +msgstr "A saída de produção não está completamente alocada" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" -msgstr "" +msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "Quantidade deve ser maior que zero" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" -msgstr "" +msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" +msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" -msgstr "" +msgstr "Números de Série" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" -msgstr "" +msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" -msgstr "" +msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" -msgstr "" +msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" -msgstr "" +msgstr "Local" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" -msgstr "" +msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" -msgstr "" +msgstr "Situação" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" -msgstr "" +msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" -msgstr "" +msgstr "Remover Estoque Alocado" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" -msgstr "" +msgstr "Subtrair qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" -msgstr "" +msgstr "Remover Saídas Incompletas" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" -msgstr "" +msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "Desatribua antes de completar esta ordem de produção" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" -msgstr "" +msgstr "Estoque sobrealocado" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "Como deseja manejar itens de estoque extras atribuídos a ordem de produção" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" -msgstr "" +msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" -msgstr "" +msgstr "Aceitar não alocados" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta produção" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" -msgstr "" +msgstr "Aceitar Incompleto" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" -msgstr "" +msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" -msgstr "" +msgstr "Item LDM" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" -msgstr "" +msgstr "Saída da Produção" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" -msgstr "" +msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" -msgstr "" +msgstr "bin_item.part deve indicar a mesma peça da ordem de produção" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" -msgstr "" +msgstr "Item deve estar em estoque" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" +msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" -msgstr "" +msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" +msgstr "Saída de produção deve ser definida para alocação de peças não rastreadas" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" -msgstr "" +msgstr "O item em estoque já foi alocado para essa saída de produção" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" -msgstr "" +msgstr "Alocação do Item precisa ser fornecida" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "Local de estoque onde peças serão extraídas (deixar em branco para qualquer local)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" -msgstr "" +msgstr "Local não incluso" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" -msgstr "" +msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" -msgstr "" +msgstr "Estoque permutável" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" +msgstr "Itens de estoque em múltiplos locais pode ser permutável" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" -msgstr "" +msgstr "Substituir Estoque" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" -msgstr "" +msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" -msgstr "" +msgstr "Itens opcionais" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" -msgstr "" +msgstr "Alocar itens LDM opcionais para a ordem de produção" #: build/tasks.py:100 msgid "Stock required for build order" -msgstr "" +msgstr "Estoque obrigatório para o pedido de produção" #: build/tasks.py:118 msgid "Overdue Build Order" -msgstr "" +msgstr "Pedido de produção vencido" #: build/tasks.py:123 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "" +msgstr "Pedido de produção {bo} está atrasada" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" -msgstr "" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Ações de código de barras" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "Mostrar QR Code" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "Desatribuir Código de Barras" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "Atribuir Código de Barras" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "Ações de impressão" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" -msgstr "" +msgstr "Imprimir relatório do pedido de produção" -#: build/templates/build/build_base.html:50 -msgid "Build actions" -msgstr "" - -#: build/templates/build/build_base.html:54 -msgid "Edit Build" -msgstr "" - -#: build/templates/build/build_base.html:56 -msgid "Cancel Build" -msgstr "" - -#: build/templates/build/build_base.html:59 -msgid "Duplicate Build" -msgstr "" - -#: build/templates/build/build_base.html:62 -msgid "Delete Build" -msgstr "" - -#: build/templates/build/build_base.html:67 #: build/templates/build/build_base.html:68 +msgid "Build actions" +msgstr "Ações de produção" + +#: build/templates/build/build_base.html:72 +msgid "Edit Build" +msgstr "Editar produção" + +#: build/templates/build/build_base.html:74 +msgid "Cancel Build" +msgstr "Cancelar produção" + +#: build/templates/build/build_base.html:77 +msgid "Duplicate Build" +msgstr "Duplicar produção" + +#: build/templates/build/build_base.html:80 +msgid "Delete Build" +msgstr "Excluir produção" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" -msgstr "" +msgstr "Concluir produção" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" -msgstr "" +msgstr "Descrição da produção" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "" - -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 -#, python-format -msgid "This Build Order is a child of Build Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:118 -msgid "Build Order is ready to mark as completed" -msgstr "" +msgstr "Nenhuma saída de produção foi criada para esta ordem de serviço" #: build/templates/build/build_base.html:123 -msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "" - -#: build/templates/build/build_base.html:128 -msgid "Required build quantity has not yet been completed" -msgstr "" - -#: build/templates/build/build_base.html:133 -msgid "Stock has not been fully allocated to this Build Order" -msgstr "" - -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 -msgid "Target Date" -msgstr "" - -#: build/templates/build/build_base.html:159 #, python-format -msgid "This build was due on %(target)s" -msgstr "" +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "Essa ordem de produção é filha da ordem de produção %(link)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 -msgid "Overdue" -msgstr "" +#: build/templates/build/build_base.html:130 +msgid "Build Order is ready to mark as completed" +msgstr "Ordem de produção está pronta para ser marcada como concluída" + +#: build/templates/build/build_base.html:135 +msgid "Build Order cannot be completed as outstanding outputs remain" +msgstr "Ordem de produção não pode ser concluída, os resultados pendentes permanecem" + +#: build/templates/build/build_base.html:140 +msgid "Required build quantity has not yet been completed" +msgstr "A quantidade de produção necessária ainda não foi concluída" + +#: build/templates/build/build_base.html:145 +msgid "Stock has not been fully allocated to this Build Order" +msgstr "Estoque não foi totalmente alocado para este Pedido de Produção" #: build/templates/build/build_base.html:166 -#: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 -msgid "Completed" -msgstr "" +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 +msgid "Target Date" +msgstr "Data alvo" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:171 +#, python-format +msgid "This build was due on %(target)s" +msgstr "Essa produção expirou em %(target)s" + +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 +msgid "Overdue" +msgstr "Expirou" + +#: build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:67 build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 +msgid "Completed" +msgstr "Concluído" + +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" -msgstr "" +msgstr "Pedido de Venda" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" -msgstr "" +msgstr "Emitido por" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" -msgstr "" +msgstr "Prioridade" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" -msgstr "" +msgstr "Excluir Ordem de Produção" + +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "QR Code do Pedido de Produção" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "Vincular código de barras ao Pedido de Produção" #: build/templates/build/detail.html:15 msgid "Build Details" -msgstr "" +msgstr "Detalhes da produção" #: build/templates/build/detail.html:38 msgid "Stock Source" -msgstr "" +msgstr "Origem do estoque" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "" +msgstr "O estoque pode ser tirado de qualquer local disponível." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" -msgstr "" +msgstr "Destino" #: build/templates/build/detail.html:56 msgid "Destination location not specified" -msgstr "" +msgstr "Loca de destino não especificado" #: build/templates/build/detail.html:73 msgid "Allocated Parts" -msgstr "" +msgstr "Peças alocadas" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" -msgstr "" +msgstr "Lote" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" -msgstr "" +msgstr "Criado" #: build/templates/build/detail.html:144 msgid "No target date set" -msgstr "" +msgstr "Sem data alvo definida" #: build/templates/build/detail.html:153 msgid "Build not complete" -msgstr "" +msgstr "Produção não concluída" #: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" -msgstr "" +msgstr "Pedido de Produção Filho" #: build/templates/build/detail.html:179 msgid "Allocate Stock to Build" -msgstr "" +msgstr "Alocar Estoque para Produção" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" -msgstr "" +msgstr "Estoque não alocado" #: build/templates/build/detail.html:184 msgid "Unallocate Stock" -msgstr "" +msgstr "Estoque não Alocado" #: build/templates/build/detail.html:186 msgid "Automatically allocate stock to build" -msgstr "" +msgstr "Alocar o estoque para produção automaticamente" #: build/templates/build/detail.html:187 msgid "Auto Allocate" -msgstr "" +msgstr "Alocar automaticamente" #: build/templates/build/detail.html:189 msgid "Manually allocate stock to build" -msgstr "" +msgstr "Alocar estoque para a produção manualmente" #: build/templates/build/detail.html:190 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "" +msgstr "Alocar estoque" #: build/templates/build/detail.html:193 msgid "Order required parts" -msgstr "" +msgstr "Pedir peças necessárias" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" -msgstr "" +msgstr "Pedir Peças" #: build/templates/build/detail.html:206 msgid "Untracked stock has been fully allocated for this Build Order" -msgstr "" +msgstr "Estoque não rastreável foi totalmente alocado para este Pedido de Produção" #: build/templates/build/detail.html:210 msgid "Untracked stock has not been fully allocated for this Build Order" -msgstr "" +msgstr "Estoque não rastreável não foi totalmente alocado para este Pedido de Produção" #: build/templates/build/detail.html:217 msgid "Allocate selected items" -msgstr "" +msgstr "Alocar itens selecionados" #: build/templates/build/detail.html:227 msgid "This Build Order does not have any associated untracked BOM items" -msgstr "" +msgstr "Esse Pedido de Produção não possuí nenhum item não rastreável associado à LDM" #: build/templates/build/detail.html:236 msgid "Incomplete Build Outputs" -msgstr "" +msgstr "Saída de Produção Incompletas" #: build/templates/build/detail.html:240 msgid "Create new build output" -msgstr "" +msgstr "Criar nova saída de produção" #: build/templates/build/detail.html:241 msgid "New Build Output" -msgstr "" +msgstr "Nova saída de produção" #: build/templates/build/detail.html:255 msgid "Output Actions" -msgstr "" +msgstr "Ações de saídas" #: build/templates/build/detail.html:260 msgid "Complete selected build outputs" -msgstr "" +msgstr "Concluir saídas de produções selecionados" #: build/templates/build/detail.html:261 msgid "Complete outputs" -msgstr "" +msgstr "Saídas concluídas" #: build/templates/build/detail.html:265 msgid "Delete selected build outputs" -msgstr "" +msgstr "Excluir saídas de produções selecionados" #: build/templates/build/detail.html:266 msgid "Delete outputs" -msgstr "" +msgstr "Exlcuir saídas" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" -msgstr "" +msgstr "Saídas de Produção concluídas" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" -msgstr "" +msgstr "Anexos" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" -msgstr "" +msgstr "Notas de produção" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" -msgstr "" +msgstr "Alocação Concluída" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" -msgstr "" +msgstr "Todos os itens não rastreáveis foram alocados" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" -msgstr "" - -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" +msgstr "Novo Pedido de Produção" #: build/templates/build/sidebar.html:5 msgid "Build Order Details" -msgstr "" +msgstr "Detalhes do Pedido de Produção" #: build/templates/build/sidebar.html:12 msgid "Incomplete Outputs" -msgstr "" +msgstr "Saídas Incompletas" #: build/templates/build/sidebar.html:15 msgid "Completed Outputs" +msgstr "Saídas Concluídas" + +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "" - -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" -msgstr "" +msgstr "Erro ao ler arquivo (codificação inválida)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "" +msgstr "Erro ao ler arquivo (formato inválido)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "" +msgstr "Erro ao ler o arquivo (dimensão incorreta)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "" +msgstr "Erro ao ler o arquivo (dados podem estar corrompidos)" #: common/forms.py:13 msgid "File" -msgstr "" +msgstr "Arquivo" #: common/forms.py:14 msgid "Select file to upload" -msgstr "" +msgstr "Selecione um arquivo para carregar" #: common/forms.py:28 msgid "{name.title()} File" -msgstr "" +msgstr "Arquivo {name.title()}" #: common/forms.py:29 #, python-brace-format msgid "Select {name} file to upload" -msgstr "" - -#: common/models.py:65 templates/js/translated/part.js:781 -msgid "Updated" -msgstr "" +msgstr "Selecione {name} arquivo para carregar" #: common/models.py:66 +msgid "Updated" +msgstr "Atualizado" + +#: common/models.py:67 msgid "Timestamp of last update" -msgstr "" +msgstr "Tempo da última atualização" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" -msgstr "" +msgstr "Senha de configurações (deve ser única — diferencia maiúsculas de minúsculas)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" -msgstr "" +msgstr "Valor da Configuração" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" -msgstr "" +msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" -msgstr "" +msgstr "Valor deve ser um valor booleano" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" -msgstr "" +msgstr "Valor deve ser um número inteiro" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" -msgstr "" +msgstr "A frase senha deve ser diferenciada" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" -msgstr "" +msgstr "Nenhum grupo" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." -msgstr "" +msgstr "Um domínio vazio não é permitido." -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" - -#: common/models.py:873 -msgid "Restart required" -msgstr "" - -#: common/models.py:874 -msgid "A setting has been changed which requires a server restart" -msgstr "" - -#: common/models.py:881 -msgid "Server Instance Name" -msgstr "" - -#: common/models.py:883 -msgid "String descriptor for the server instance" -msgstr "" - -#: common/models.py:888 -msgid "Use instance name" -msgstr "" - -#: common/models.py:889 -msgid "Use the instance name in the title-bar" -msgstr "" +msgstr "Nome de domínio inválido: {domain}" #: common/models.py:895 -msgid "Restrict showing `about`" -msgstr "" +msgid "Restart required" +msgstr "Reinicialização necessária" #: common/models.py:896 -msgid "Show the `about` modal only to superusers" -msgstr "" - -#: common/models.py:902 company/models.py:98 company/models.py:99 -msgid "Company name" -msgstr "" +msgid "A setting has been changed which requires a server restart" +msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" #: common/models.py:903 -msgid "Internal company name" -msgstr "" +msgid "Server Instance Name" +msgstr "Nome da Instância do Servidor" -#: common/models.py:908 -msgid "Base URL" -msgstr "" +#: common/models.py:905 +msgid "String descriptor for the server instance" +msgstr "Descritor de frases para a instância do servidor" -#: common/models.py:909 -msgid "Base URL for server instance" -msgstr "" +#: common/models.py:910 +msgid "Use instance name" +msgstr "Usar nome da instância" -#: common/models.py:916 -msgid "Default Currency" -msgstr "" +#: common/models.py:911 +msgid "Use the instance name in the title-bar" +msgstr "Usar o nome da instância na barra de título" #: common/models.py:917 -msgid "Select base currency for pricing caluclations" -msgstr "" +msgid "Restrict showing `about`" +msgstr "Restringir a exibição 'sobre'" -#: common/models.py:924 -msgid "Download from URL" -msgstr "" +#: common/models.py:918 +msgid "Show the `about` modal only to superusers" +msgstr "Mostrar 'sobre' modal apenas para superusuários" + +#: common/models.py:924 company/models.py:98 company/models.py:99 +msgid "Company name" +msgstr "Nome da empresa" #: common/models.py:925 -msgid "Allow download of remote images and files from external URL" -msgstr "" +msgid "Internal company name" +msgstr "Nome interno da Empresa" + +#: common/models.py:930 +msgid "Base URL" +msgstr "URL de Base" #: common/models.py:931 +msgid "Base URL for server instance" +msgstr "URL Base da instância do servidor" + +#: common/models.py:938 +msgid "Default Currency" +msgstr "Moeda Padrão" + +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" +msgstr "Selecione a moeda padrão para os cálculos" + +#: common/models.py:946 +msgid "Download from URL" +msgstr "Baixar do URL" + +#: common/models.py:947 +msgid "Allow download of remote images and files from external URL" +msgstr "Permitir baixar imagens remotas e arquivos de URLs externos" + +#: common/models.py:953 msgid "Download Size Limit" -msgstr "" +msgstr "Limite de tamanho para baixar" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" -msgstr "" +msgstr "Maior tamanho de imagem remota baixada permitida" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" -msgstr "" - -#: common/models.py:944 -msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" - -#: common/models.py:949 -msgid "Require confirm" -msgstr "" - -#: common/models.py:950 -msgid "Require explicit user confirmation for certain action." -msgstr "" - -#: common/models.py:956 -msgid "Tree Depth" -msgstr "" - -#: common/models.py:957 -msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "" +msgstr "Usuário-agente utilizado para baixar da URL" #: common/models.py:966 +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" + +#: common/models.py:971 +msgid "Require confirm" +msgstr "Exigir confirmação" + +#: common/models.py:972 +msgid "Require explicit user confirmation for certain action." +msgstr "Exigir confirmação explícita do usuário para uma certa ação." + +#: common/models.py:978 +msgid "Tree Depth" +msgstr "Profundidade da árvore" + +#: common/models.py:979 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "Profundidade padrão de visualização da árvore. Níveis mais profundos podem ser carregados gradualmente conforme necessário." + +#: common/models.py:988 +msgid "Update Check Inverval" +msgstr "Atualizar Verificação de Intervalo" + +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" +msgstr "Frequência para verificar atualizações (defina como zero para desativar)" + +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 +msgid "days" +msgstr "dias" + +#: common/models.py:999 msgid "Automatic Backup" -msgstr "" +msgstr "Cópia de Segurança Automática" -#: common/models.py:967 +#: common/models.py:1000 msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" +msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" #: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" +msgid "Auto Backup Interval" +msgstr "Intervalo de Backup Automático" -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "Especificar o número de dia entre as cópias de segurança" #: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "Intervalo para Excluir da Tarefa" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "Intervalo para Excluir do Registro de Erro" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "Registros de erros serão excluídos após um número especificado de dias" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "Intervalo para Excluir de Notificação" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "Notificações de usuários será excluído após um número especificado de dias" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Suporte aos códigos de barras" + +#: common/models.py:1051 msgid "Enable barcode scanner support" -msgstr "" +msgstr "Habilitar suporte a leitor de códigos de barras" -#: common/models.py:1023 +#: common/models.py:1057 msgid "Barcode Input Delay" -msgstr "" +msgstr "Atraso na entrada de código de barras" -#: common/models.py:1024 +#: common/models.py:1058 msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" +msgstr "Tempo de atraso de processamento de entrada de barras" #: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" +msgid "Barcode Webcam Support" +msgstr "Suporte a código de barras via Câmera" -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "Permitir escanear código de barras por câmera pelo navegador" #: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" +msgid "Part Revisions" +msgstr "Revisões de peças" -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "Habilitar campo de revisão para a Peça" #: common/models.py:1082 +msgid "IPN Regex" +msgstr "Regex IPN" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Padrão de expressão regular adequado para Peça IPN" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Permitir Duplicação IPN" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Permitir que várias peças compartilhem o mesmo IPN" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Permitir Edição IPN" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "Copiar dados da LDM da Peça" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "Copiar dados da LDM por padrão quando duplicar a peça" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "Copiar Dados de Parâmetro da Peça" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "Copiar Dados Teste da Peça" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "Copiar dados de teste por padrão quando duplicar a peça" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Copiar Parâmetros dos Modelos de Categoria" + +#: common/models.py:1123 msgid "Copy category parameter templates when creating a part" -msgstr "" +msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 msgid "Template" -msgstr "" +msgstr "Modelo" -#: common/models.py:1089 +#: common/models.py:1130 msgid "Parts are templates by default" -msgstr "" +msgstr "Peças são modelos por padrão" -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" +msgstr "Montagem" #: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" +msgid "Parts can be assembled from other components by default" +msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Componente" #: common/models.py:1144 -msgid "Show related parts" -msgstr "" +msgid "Parts can be used as sub-components by default" +msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Comprável" #: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" +msgid "Parts are purchaseable by default" +msgstr "Peças são compráveis por padrão" -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Vendível" -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Peças vão vendíveis por padrão" -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Rastreável" #: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" +msgid "Parts are trackable by default" +msgstr "Peças vão rastreáveis por padrão" -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtual" -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Peças são virtuais por padrão" -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Mostrar Importações em Visualizações" #: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" +msgid "Display the import wizard in some part views" +msgstr "Exibir o assistente de importação em algumas visualizações de partes" -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Mostra peças relacionadas" -#: common/models.py:1190 +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Mostrar peças relacionadas para uma peça" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "Dados Iniciais de Estoque" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "Permitir Criação de estoque inicial quando adicional uma nova peça" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "Dados Iniciais de Fornecedor" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "Permitir criação de dados iniciais de fornecedor quando adicionar uma nova peça" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Formato de Exibição do Nome da Peça" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Formato para exibir o nome da peça" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "Ícone de Categoria de Peça Padrão" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "Mínimo de Casas Decimais do Preço" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "Máximo Casas Decimais de Preço" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" + +#: common/models.py:1242 msgid "Use Supplier Pricing" -msgstr "" +msgstr "Usar Preços do Fornecedor" -#: common/models.py:1191 +#: common/models.py:1243 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" +msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/models.py:1197 +#: common/models.py:1249 msgid "Purchase History Override" -msgstr "" +msgstr "Sobrescrever histórico de compra" -#: common/models.py:1198 +#: common/models.py:1250 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" +msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/models.py:1204 +#: common/models.py:1256 msgid "Use Stock Item Pricing" -msgstr "" +msgstr "Usar Preços do Item em Estoque" -#: common/models.py:1205 +#: common/models.py:1257 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" +msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/models.py:1211 +#: common/models.py:1263 msgid "Stock Item Pricing Age" -msgstr "" +msgstr "Idade do preço do Item em Estoque" -#: common/models.py:1212 +#: common/models.py:1264 msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" +msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/models.py:1222 +#: common/models.py:1274 msgid "Use Variant Pricing" -msgstr "" +msgstr "Usar Preço Variável" -#: common/models.py:1223 +#: common/models.py:1275 msgid "Include variant pricing in overall pricing calculations" -msgstr "" +msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/models.py:1229 +#: common/models.py:1281 msgid "Active Variants Only" -msgstr "" +msgstr "Apenas Ativar Variáveis" -#: common/models.py:1230 +#: common/models.py:1282 msgid "Only use active variant parts for calculating variant pricing" -msgstr "" +msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "Intervalo de Reconstrução de Preços" -#: common/models.py:1237 +#: common/models.py:1289 msgid "Number of days before part pricing is automatically updated" -msgstr "" +msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/models.py:1238 common/models.py:1361 -msgid "days" -msgstr "" - -#: common/models.py:1247 +#: common/models.py:1299 msgid "Internal Prices" -msgstr "" +msgstr "Preços Internos" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" -msgstr "" +msgstr "Habilitar preços internos para peças" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" -msgstr "" +msgstr "Sobrepor Valor Interno" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" -msgstr "" +msgstr "Se disponível, preços internos sobrepõe variação de cálculos de preço" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" -msgstr "" +msgstr "Ativar impressão de etiquetas" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" -msgstr "" +msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" -msgstr "" +msgstr "DPI da Imagem na Etiqueta" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" +msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" -msgstr "" - -#: common/models.py:1279 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1285 templates/stats.html:25 -msgid "Debug Mode" -msgstr "" - -#: common/models.py:1286 -msgid "Generate reports in debug mode (HTML output)" -msgstr "" - -#: common/models.py:1292 -msgid "Page Size" -msgstr "" - -#: common/models.py:1293 -msgid "Default page size for PDF reports" -msgstr "" - -#: common/models.py:1303 -msgid "Enable Test Reports" -msgstr "" - -#: common/models.py:1304 -msgid "Enable generation of test reports" -msgstr "" - -#: common/models.py:1310 -msgid "Attach Test Reports" -msgstr "" - -#: common/models.py:1311 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" -msgstr "" - -#: common/models.py:1317 -msgid "Globally Unique Serials" -msgstr "" - -#: common/models.py:1318 -msgid "Serial numbers for stock items must be globally unique" -msgstr "" - -#: common/models.py:1324 -msgid "Autofill Serial Numbers" -msgstr "" - -#: common/models.py:1325 -msgid "Autofill serial numbers in forms" -msgstr "" +msgstr "Habilitar Relatórios" #: common/models.py:1331 -msgid "Delete Depleted Stock" -msgstr "" +msgid "Enable generation of reports" +msgstr "Ativar geração de relatórios" -#: common/models.py:1332 -msgid "Determines default behaviour when a stock item is depleted" -msgstr "" +#: common/models.py:1337 templates/stats.html:25 +msgid "Debug Mode" +msgstr "Modo de depuração" #: common/models.py:1338 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1339 -msgid "Template for generating default batch codes for stock items" -msgstr "" +msgid "Generate reports in debug mode (HTML output)" +msgstr "Gerar relatórios em modo de depuração (saída HTML)" #: common/models.py:1344 -msgid "Stock Expiry" -msgstr "" +msgid "Page Size" +msgstr "Tamanho da página" #: common/models.py:1345 +msgid "Default page size for PDF reports" +msgstr "Tamanho padrão da página PDF para relatórios" + +#: common/models.py:1355 +msgid "Enable Test Reports" +msgstr "Ativar Relatórios Teste" + +#: common/models.py:1356 +msgid "Enable generation of test reports" +msgstr "Ativar geração de relatórios de teste" + +#: common/models.py:1362 +msgid "Attach Test Reports" +msgstr "Anexar Relatórios de Teste" + +#: common/models.py:1363 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +msgstr "Quando imprimir um Relatório de Teste, anexar uma cópia do mesmo ao item de estoque associado" + +#: common/models.py:1369 +msgid "Globally Unique Serials" +msgstr "Seriais Únicos Globais" + +#: common/models.py:1370 +msgid "Serial numbers for stock items must be globally unique" +msgstr "Números de série para itens de estoque devem ser globalmente únicos" + +#: common/models.py:1376 +msgid "Autofill Serial Numbers" +msgstr "Preenchimento automático de Números Seriais" + +#: common/models.py:1377 +msgid "Autofill serial numbers in forms" +msgstr "Preencher números de série automaticamente no formulário" + +#: common/models.py:1383 +msgid "Delete Depleted Stock" +msgstr "Excluir Estoque Esgotado" + +#: common/models.py:1384 +msgid "Determines default behaviour when a stock item is depleted" +msgstr "Determina o comportamento padrão quando um item de estoque é esgotado" + +#: common/models.py:1390 +msgid "Batch Code Template" +msgstr "Modelo de Código de Lote" + +#: common/models.py:1391 +msgid "Template for generating default batch codes for stock items" +msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" + +#: common/models.py:1396 +msgid "Stock Expiry" +msgstr "Validade do Estoque" + +#: common/models.py:1397 msgid "Enable stock expiry functionality" -msgstr "" +msgstr "Ativar função de validade de estoque" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" -msgstr "" +msgstr "Vender estoque expirado" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" -msgstr "" +msgstr "Permitir venda de estoque expirado" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" -msgstr "" +msgstr "Tempo de Estoque Inativo" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" -msgstr "" +msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" -msgstr "" +msgstr "Produzir Estoque Vencido" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" -msgstr "" +msgstr "Permitir produção com estoque vencido" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" -msgstr "" +msgstr "Controle de propriedade do estoque" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" -msgstr "" +msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" -msgstr "" +msgstr "Ícone padrão do local de estoque" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" -msgstr "" +msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" -msgstr "" +msgstr "Modelo de Referência de Pedidos de Produção" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" -msgstr "" +msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "Ativar Pedidos de Devolução" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "Ativar funcionalidade de pedido de retorno na interface do usuário" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "Modelo de Referência de Pedidos de Devolução" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "Modelo necessário para gerar campo de referência do Pedido de Devolução" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "Editar os Pedidos de Devolução Concluídos" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" -msgstr "" +msgstr "Modelo de Referência de Pedidos de Venda" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" -msgstr "" +msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" -msgstr "" +msgstr "Envio Padrão de Pedidos de Venda" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" -msgstr "" +msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" -msgstr "" +msgstr "Editar os Pedidos de Vendas concluídos" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" -msgstr "" +msgstr "Modelo de Referência de Pedidos de Compras" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "Editar Pedidos de Compra Concluídos" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" -msgstr "" +msgstr "Habitar esquecer senha" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "Habilitar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" -msgstr "" +msgstr "Habilitar cadastro" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" -msgstr "" +msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" -msgstr "" +msgstr "Ativar SSO" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" -msgstr "" - -#: common/models.py:1450 -msgid "Enable SSO registration" -msgstr "" - -#: common/models.py:1451 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" - -#: common/models.py:1457 -msgid "Email required" -msgstr "" - -#: common/models.py:1458 -msgid "Require user to supply mail on signup" -msgstr "" - -#: common/models.py:1464 -msgid "Auto-fill SSO users" -msgstr "" - -#: common/models.py:1465 -msgid "Automatically fill out user-details from SSO account-data" -msgstr "" - -#: common/models.py:1471 -msgid "Mail twice" -msgstr "" - -#: common/models.py:1472 -msgid "On signup ask users twice for their mail" -msgstr "" - -#: common/models.py:1478 -msgid "Password twice" -msgstr "" - -#: common/models.py:1479 -msgid "On signup ask users twice for their password" -msgstr "" - -#: common/models.py:1485 -msgid "Allowed domains" -msgstr "" - -#: common/models.py:1486 -msgid "Restrict signup to certain domains (comma-separated, strarting with @)" -msgstr "" - -#: common/models.py:1492 -msgid "Group on signup" -msgstr "" - -#: common/models.py:1493 -msgid "Group to which new users are assigned on registration" -msgstr "" - -#: common/models.py:1499 -msgid "Enforce MFA" -msgstr "" - -#: common/models.py:1500 -msgid "Users must use multifactor security." -msgstr "" - -#: common/models.py:1506 -msgid "Check plugins on startup" -msgstr "" - -#: common/models.py:1507 -msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" - -#: common/models.py:1514 -msgid "Check plugin signatures" -msgstr "" - -#: common/models.py:1515 -msgid "Check and show signatures for plugins" -msgstr "" - -#: common/models.py:1522 -msgid "Enable URL integration" -msgstr "" +msgstr "Ativar SSO na página de acesso" #: common/models.py:1523 -msgid "Enable plugins to add URL routes" -msgstr "" +msgid "Enable SSO registration" +msgstr "Ativar registro SSO" + +#: common/models.py:1524 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "Ativar auto-registro por SSO para usuários na página de entrada" #: common/models.py:1530 -msgid "Enable navigation integration" -msgstr "" +msgid "Email required" +msgstr "Email obrigatório" #: common/models.py:1531 -msgid "Enable plugins to integrate into navigation" -msgstr "" +msgid "Require user to supply mail on signup" +msgstr "Exigir do usuário o e-mail no cadastro" + +#: common/models.py:1537 +msgid "Auto-fill SSO users" +msgstr "Auto-preencher usuários SSO" #: common/models.py:1538 -msgid "Enable app integration" -msgstr "" +msgid "Automatically fill out user-details from SSO account-data" +msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/models.py:1539 -msgid "Enable plugins to add apps" -msgstr "" +#: common/models.py:1544 +msgid "Mail twice" +msgstr "Enviar email duplo" -#: common/models.py:1546 -msgid "Enable schedule integration" -msgstr "" +#: common/models.py:1545 +msgid "On signup ask users twice for their mail" +msgstr "No registro pedir aos usuários duas vezes pelo email" -#: common/models.py:1547 -msgid "Enable plugins to run scheduled tasks" -msgstr "" +#: common/models.py:1551 +msgid "Password twice" +msgstr "Senha duas vezes" -#: common/models.py:1554 -msgid "Enable event integration" -msgstr "" +#: common/models.py:1552 +msgid "On signup ask users twice for their password" +msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/models.py:1555 -msgid "Enable plugins to respond to internal events" -msgstr "" +#: common/models.py:1558 +msgid "Allowed domains" +msgstr "Domínios permitidos" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" -msgstr "" +#: common/models.py:1559 +msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" + +#: common/models.py:1565 +msgid "Group on signup" +msgstr "Grupo no cadastro" + +#: common/models.py:1566 +msgid "Group to which new users are assigned on registration" +msgstr "Grupo ao qual novos usuários são atribuídos no registro" + +#: common/models.py:1572 +msgid "Enforce MFA" +msgstr "Forçar AMF" + +#: common/models.py:1573 +msgid "Users must use multifactor security." +msgstr "Os usuários devem usar uma segurança multifator." + +#: common/models.py:1579 +msgid "Check plugins on startup" +msgstr "Checar extensões no início" + +#: common/models.py:1580 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" + +#: common/models.py:1587 +msgid "Check plugin signatures" +msgstr "Checar assinaturas de extensões" + +#: common/models.py:1588 +msgid "Check and show signatures for plugins" +msgstr "Checar e mostrar assinaturas das extensões" + +#: common/models.py:1595 +msgid "Enable URL integration" +msgstr "Ativar integração URL" #: common/models.py:1596 -msgid "Show subscribed parts" -msgstr "" - -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" -msgstr "" +msgid "Enable plugins to add URL routes" +msgstr "Ativar extensão para adicionar rotas URL" #: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" +msgid "Enable navigation integration" +msgstr "Ativar integração de navegação" #: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" +msgid "Enable plugins to integrate into navigation" +msgstr "Ativar extensões para integrar à navegação" #: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" +msgid "Enable app integration" +msgstr "Ativa integração com aplicativo" -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" +#: common/models.py:1612 +msgid "Enable plugins to add apps" +msgstr "Ativar extensões para adicionar aplicativos" -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" +#: common/models.py:1619 +msgid "Enable schedule integration" +msgstr "Ativar integração do calendário" -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" +#: common/models.py:1620 +msgid "Enable plugins to run scheduled tasks" +msgstr "Ativar extensões para executar tarefas agendadas" -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" +#: common/models.py:1627 +msgid "Enable event integration" +msgstr "Ativar integração de eventos" -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" +#: common/models.py:1628 +msgid "Enable plugins to respond to internal events" +msgstr "Ativar extensões para responder a eventos internos" -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "Funcionalidade de Balanço do Inventário" -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "Ativar funcionalidade de balanço para gravar níveis de estoque e calcular seu valor" -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "Período de Balanço Automático" -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" -msgstr "" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "Número de dias entre gravação do balanço de estoque (coloque zero para desativar)" #: common/models.py:1652 -msgid "Show depleted stock" -msgstr "" +msgid "Report Deletion Interval" +msgstr "Intervalo para Excluir o Relatório" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "Relatórios de balanço serão apagados após um número de dias especificado" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "Senha de configurações (deve ser única — diferencia maiúsculas de minúsculas" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "Nenhuma impressora (Exportar para PDF)" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "Mostrar peças subscritas" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "Mostrar peças subscritas na tela inicial" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "Mostrar categorias subscritas" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "Mostrar categorias de peças subscritas na tela inicial" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "Mostrar peças mais recentes" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "Mostrar as peças mais recentes na página inicial" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "Contagem de peças recentes" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "Número de peças recentes para mostrar no índice" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "Mostrar LDMs não validadas" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "Mostrar LDMs que aguardam validação na página inicial" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "Mostrar alterações recentes de estoque" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "Mostrar itens de estoque alterados recentemente na página inicial" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "Contagem de Estoque Recente" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "Número recentes itens do estoque para mostrar no índice" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "Mostrar baixo estoque" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "Mostrar itens de baixo estoque na página inicial" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "Mostrar estoque esgotado" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" -msgstr "" +msgstr "Mostrar itens sem estoque na página inicial" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" -msgstr "" +msgstr "Mostrar estoque necessário" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" -msgstr "" +msgstr "Mostrar itens de estoque necessários para produções na tela inicial" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" -msgstr "" +msgstr "Mostrar estoque expirado" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" -msgstr "" +msgstr "Mostrar expirados itens em estoque na tela inicial" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" -msgstr "" +msgstr "Mostrar estoque inativo" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" -msgstr "" +msgstr "Mostrar estoque inativo na tela inicial" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" -msgstr "" +msgstr "Mostrar produções pendentes" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" -msgstr "" +msgstr "Mostrar produções pendentes na tela inicial" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" -msgstr "" +msgstr "Mostrar produções atrasadas" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" -msgstr "" +msgstr "Mostrar produções atrasadas na tela inicial" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" -msgstr "" +msgstr "Mostrar pedidos de compra pendentes" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" -msgstr "" +msgstr "Mostrar os Pedidos de Compras pendentes na página inicial" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" -msgstr "" +msgstr "Mostrar Pedidos de Compra atrasados" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" -msgstr "" +msgstr "Mostrar os Pedidos de Compras atrasadas na tela inicial" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" -msgstr "" +msgstr "Mostrar pedidos de vendas pendentes" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" -msgstr "" +msgstr "Mostrar os Pedidos de Vendas pendentes na página inicial" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" -msgstr "" +msgstr "Mostrar Pedidos de Venda atrasados" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" -msgstr "" +msgstr "Mostrar os Pedidos de Vendas atrasadas na tela inicial" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" -msgstr "" +msgstr "Mostrar notícias" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" -msgstr "" +msgstr "Mostrar notícias na tela inicial" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" -msgstr "" +msgstr "Mostrar etiqueta em linha" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "Mostrar etiquetas em PDF no navegador, ao invés de baixar o arquivo" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "Impressora de etiquetas padrão" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "Configurar qual impressora de etiqueta deve ser selecionada por padrão" + +#: common/models.py:1857 msgid "Inline report display" -msgstr "" +msgstr "Mostrar relatório em linha" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "Mostrar relatórios em PDF no navegador, ao invés de baixar o arquivo" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" -msgstr "" +msgstr "Procurar Peças" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" -msgstr "" +msgstr "Mostrar peças na janela de visualização de pesquisa" -#: common/models.py:1750 -msgid "Seach Supplier Parts" -msgstr "" +#: common/models.py:1871 +msgid "Search Supplier Parts" +msgstr "Buscar Peças do Fornecedor" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" -msgstr "" +msgstr "Mostrar fornecedor de peças na janela de visualização de pesquisa" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "Buscar peças do fabricante" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" -msgstr "" - -#: common/models.py:1764 -msgid "Hide Inactive Parts" -msgstr "" - -#: common/models.py:1765 -msgid "Excluded inactive parts from search preview window" -msgstr "" - -#: common/models.py:1771 -msgid "Search Categories" -msgstr "" - -#: common/models.py:1772 -msgid "Display part categories in search preview window" -msgstr "" - -#: common/models.py:1778 -msgid "Search Stock" -msgstr "" - -#: common/models.py:1779 -msgid "Display stock items in search preview window" -msgstr "" - -#: common/models.py:1785 -msgid "Hide Unavailable Stock Items" -msgstr "" - -#: common/models.py:1786 -msgid "Exclude stock items which are not available from the search preview window" -msgstr "" - -#: common/models.py:1792 -msgid "Search Locations" -msgstr "" - -#: common/models.py:1793 -msgid "Display stock locations in search preview window" -msgstr "" - -#: common/models.py:1799 -msgid "Search Companies" -msgstr "" - -#: common/models.py:1800 -msgid "Display companies in search preview window" -msgstr "" - -#: common/models.py:1806 -msgid "Search Build Orders" -msgstr "" - -#: common/models.py:1807 -msgid "Display build orders in search preview window" -msgstr "" - -#: common/models.py:1813 -msgid "Search Purchase Orders" -msgstr "" - -#: common/models.py:1814 -msgid "Display purchase orders in search preview window" -msgstr "" - -#: common/models.py:1820 -msgid "Exclude Inactive Purchase Orders" -msgstr "" - -#: common/models.py:1821 -msgid "Exclude inactive purchase orders from search preview window" -msgstr "" - -#: common/models.py:1827 -msgid "Search Sales Orders" -msgstr "" - -#: common/models.py:1828 -msgid "Display sales orders in search preview window" -msgstr "" - -#: common/models.py:1834 -msgid "Exclude Inactive Sales Orders" -msgstr "" - -#: common/models.py:1835 -msgid "Exclude inactive sales orders from search preview window" -msgstr "" - -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" +msgstr "Mostrar fabricante de peças na janela de visualização de pesquisa" #: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" +msgid "Hide Inactive Parts" +msgstr "Ocultar peças inativas" -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" +#: common/models.py:1886 +msgid "Excluded inactive parts from search preview window" +msgstr "Não incluir peças inativas na janela de visualização de pesquisa" #: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" +msgid "Search Categories" +msgstr "Pesquisar Categorias" -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" +#: common/models.py:1893 +msgid "Display part categories in search preview window" +msgstr "Mostrar categoria das peças na janela de visualização de pesquisa" #: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" -msgstr "" +msgid "Search Stock" +msgstr "Pesquisar Estoque" + +#: common/models.py:1900 +msgid "Display stock items in search preview window" +msgstr "Mostrar itens do estoque na janela de visualização de pesquisa" + +#: common/models.py:1906 +msgid "Hide Unavailable Stock Items" +msgstr "Ocultar itens do estoque indisponíveis" + +#: common/models.py:1907 +msgid "Exclude stock items which are not available from the search preview window" +msgstr "Não incluir itens de estoque que não estão disponíveis na janela de visualização de pesquisa" + +#: common/models.py:1913 +msgid "Search Locations" +msgstr "Procurar Locais" + +#: common/models.py:1914 +msgid "Display stock locations in search preview window" +msgstr "Mostrar locais de estoque na janela de visualização de pesquisa" + +#: common/models.py:1920 +msgid "Search Companies" +msgstr "Pesquisar empresas" + +#: common/models.py:1921 +msgid "Display companies in search preview window" +msgstr "Mostrar empresas na janela de visualização de pesquisa" + +#: common/models.py:1927 +msgid "Search Build Orders" +msgstr "Procurar Pedidos de Produção" + +#: common/models.py:1928 +msgid "Display build orders in search preview window" +msgstr "Mostrar pedidos de produção na janela de visualização de pesquisa" + +#: common/models.py:1934 +msgid "Search Purchase Orders" +msgstr "Mostrar Pedido de Compras" + +#: common/models.py:1935 +msgid "Display purchase orders in search preview window" +msgstr "Mostrar pedidos de compra na janela de visualização de pesquisa" + +#: common/models.py:1941 +msgid "Exclude Inactive Purchase Orders" +msgstr "Não incluir Pedidos de Compras Inativos" + +#: common/models.py:1942 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "Não incluir pedidos de compras inativos na janela de visualização de pesquisa" + +#: common/models.py:1948 +msgid "Search Sales Orders" +msgstr "Procurar Pedidos de Vendas" + +#: common/models.py:1949 +msgid "Display sales orders in search preview window" +msgstr "Mostrar pedidos de vendas na janela de visualização de pesquisa" + +#: common/models.py:1955 +msgid "Exclude Inactive Sales Orders" +msgstr "Não Incluir Pedidos de Compras Inativas" + +#: common/models.py:1956 +msgid "Exclude inactive sales orders from search preview window" +msgstr "Não incluir pedidos de vendas inativos na janela de visualização de pesquisa" + +#: common/models.py:1962 +msgid "Search Return Orders" +msgstr "Procurar Pedidos de Devolução" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "Mostrar pedidos de devolução na janela de visualização de pesquisa" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "Não Incluir Pedidos de Devolução Inativas" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "Não incluir pedidos de devolução inativos na janela de visualização de pesquisa" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "Mostrar Resultados Anteriores" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "Número de resultados mostrados em cada seção da janela de visualização de pesquisa" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "Pesquisa de Regex" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "Permitir expressôes comuns nas conultas de pesquisas" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "Busca de Palavras Inteira" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "Pesquisa retorna que palavra inteira coincide" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "Mostrar Quantidade nos Formulários" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "Mostrar a quantidade de peças disponíveis em alguns formulários" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "Tecla Esc Fecha Formulários" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "Usar a tecla Esc para fechar fomulários modais" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "Fixar Navbar" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "A posição do Navbar é fixa no topo da tela" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "Formato da data" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "Formato preferido para mostrar datas" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "Agendamento de peças" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "Mostrar informações de agendamento de peças" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "Balanço de Peça" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "Mostrar informação de balanço da peça (se a funcionalidade de balanço estiver habilitada)" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "Comprimento da Tabela de Frases" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "Limite máximo de comprimento para frases exibidas nas visualizações de tabela" + +#: common/models.py:2103 msgid "Price break quantity" -msgstr "" +msgstr "Quantidade de Parcelamentos" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" -msgstr "" +msgstr "Preço" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" -msgstr "" +msgstr "Preço unitário na quantidade especificada" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" -msgstr "" +msgstr "Ponto final" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "Ponto final em qual o gancho web foi recebido" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" -msgstr "" +msgstr "Nome para este webhook" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" -msgstr "" +msgstr "Ativo" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" -msgstr "" - -#: common/models.py:2161 -msgid "Token" -msgstr "" - -#: common/models.py:2162 -msgid "Token for access" -msgstr "" - -#: common/models.py:2169 -msgid "Secret" -msgstr "" - -#: common/models.py:2170 -msgid "Shared secret for HMAC" -msgstr "" - -#: common/models.py:2276 -msgid "Message ID" -msgstr "" - -#: common/models.py:2277 -msgid "Unique identifier for this message" -msgstr "" - -#: common/models.py:2285 -msgid "Host" -msgstr "" - -#: common/models.py:2286 -msgid "Host from which this message was received" -msgstr "" - -#: common/models.py:2293 -msgid "Header" -msgstr "" - -#: common/models.py:2294 -msgid "Header of this message" -msgstr "" - -#: common/models.py:2300 -msgid "Body" -msgstr "" +msgstr "Este gancho web está ativo" #: common/models.py:2301 -msgid "Body of this message" -msgstr "" +msgid "Token" +msgstr "Token" + +#: common/models.py:2302 +msgid "Token for access" +msgstr "Token de acesso" + +#: common/models.py:2309 +msgid "Secret" +msgstr "Segredo" #: common/models.py:2310 +msgid "Shared secret for HMAC" +msgstr "Segredo compartilhado para HMAC" + +#: common/models.py:2416 +msgid "Message ID" +msgstr "ID da Mensagem" + +#: common/models.py:2417 +msgid "Unique identifier for this message" +msgstr "Identificador exclusivo desta mensagem" + +#: common/models.py:2425 +msgid "Host" +msgstr "Servidor" + +#: common/models.py:2426 +msgid "Host from which this message was received" +msgstr "Servidor do qual esta mensagem foi recebida" + +#: common/models.py:2433 +msgid "Header" +msgstr "Cabeçalho" + +#: common/models.py:2434 +msgid "Header of this message" +msgstr "Cabeçalho da mensagem" + +#: common/models.py:2440 +msgid "Body" +msgstr "Corpo" + +#: common/models.py:2441 +msgid "Body of this message" +msgstr "Corpo da mensagem" + +#: common/models.py:2450 msgid "Endpoint on which this message was received" -msgstr "" +msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" -msgstr "" +msgstr "Trabalhado em" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" -msgstr "" +msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" -msgstr "" +msgstr "Id" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" -msgstr "" +msgstr "Título" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" -msgstr "" +msgstr "Publicado" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" -msgstr "" +msgstr "Autor" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" -msgstr "" +msgstr "Resumo" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" -msgstr "" +msgstr "Lida" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" -msgstr "" +msgstr "Esta notícia do item foi lida?" #: common/notifications.py:294 #, python-brace-format msgid "New {verbose_name}" -msgstr "" +msgstr "Novo {verbose_name}" #: common/notifications.py:296 msgid "A new order has been created and assigned to you" -msgstr "" +msgstr "Um novo pedido foi criado e atribuído a você" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" -msgstr "" +msgstr "Itens Recebidos" #: common/notifications.py:304 msgid "Items have been received against a purchase order" -msgstr "" +msgstr "Os itens de um pedido de compra foram recebidos" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "Os itens de um pedido de devolução foram recebidos" + +#: common/notifications.py:423 msgid "Error raised by plugin" -msgstr "" +msgstr "Erro criado pela extensão" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" -msgstr "" +msgstr "Carregar Arquivo" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" -msgstr "" +msgstr "Coincidir campos" #: common/views.py:87 msgid "Match Items" -msgstr "" +msgstr "Coincindir Itens" #: common/views.py:420 msgid "Fields matching failed" -msgstr "" +msgstr "Os campos não correspondem" #: common/views.py:481 msgid "Parts imported" -msgstr "" +msgstr "Peças importadas" #: common/views.py:509 order/templates/order/order_wizard/match_fields.html:27 #: order/templates/order/order_wizard/match_parts.html:19 @@ -3048,1425 +3317,1518 @@ msgstr "" #: templates/patterns/wizard/match_fields.html:26 #: templates/patterns/wizard/upload.html:35 msgid "Previous Step" -msgstr "" +msgstr "Passo Anterior" #: company/models.py:103 msgid "Company description" -msgstr "" +msgstr "Descrição da empresa" #: company/models.py:104 msgid "Description of the company" -msgstr "" +msgstr "Descrição da empresa" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" -msgstr "" +msgstr "Página Web" #: company/models.py:111 msgid "Company website URL" -msgstr "" +msgstr "URL do Site da empresa" #: company/models.py:115 company/templates/company/company_base.html:119 msgid "Address" -msgstr "" +msgstr "Endereço" #: company/models.py:116 msgid "Company address" -msgstr "" +msgstr "Endereço da empresa" #: company/models.py:119 msgid "Phone number" -msgstr "" +msgstr "Número de telefone" #: company/models.py:120 msgid "Contact phone number" -msgstr "" +msgstr "Número de telefone do contato" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" -msgstr "" +msgstr "Email" #: company/models.py:123 msgid "Contact email address" -msgstr "" +msgstr "Endereço de e-mail do contato" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" -msgstr "" +msgstr "Contato" #: company/models.py:127 msgid "Point of contact" -msgstr "" +msgstr "Ponto de contato" #: company/models.py:129 msgid "Link to external company information" -msgstr "" +msgstr "Link para informações externas da empresa" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" -msgstr "" +msgstr "Imagem" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" -msgstr "" +msgstr "Notas da Empresa" #: company/models.py:145 msgid "is customer" -msgstr "" +msgstr "é cliente" #: company/models.py:145 msgid "Do you sell items to this company?" -msgstr "" +msgstr "Você vende itens para esta empresa?" #: company/models.py:147 msgid "is supplier" -msgstr "" +msgstr "é fornecedor" #: company/models.py:147 msgid "Do you purchase items from this company?" -msgstr "" +msgstr "Você compra itens desta empresa?" #: company/models.py:149 msgid "is manufacturer" -msgstr "" +msgstr "é fabricante" #: company/models.py:149 msgid "Does this company manufacture parts?" -msgstr "" - -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" +msgstr "Esta empresa fabrica peças?" #: company/models.py:156 msgid "Default currency used for this company" -msgstr "" +msgstr "Moeda padrão utilizada para esta empresa" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 +#: company/models.py:222 company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 +msgid "Company" +msgstr "Empresa" + +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 msgid "Base Part" -msgstr "" +msgstr "Peça base" -#: company/models.py:257 company/models.py:492 +#: company/models.py:281 company/models.py:516 msgid "Select part" -msgstr "" +msgstr "Selecionar peça" -#: company/models.py:268 company/templates/company/company_base.html:77 +#: company/models.py:292 company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 msgid "Manufacturer" -msgstr "" +msgstr "Fabricante" -#: company/models.py:269 +#: company/models.py:293 msgid "Select manufacturer" -msgstr "" +msgstr "Selecionar fabricante" -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 msgid "MPN" -msgstr "" +msgstr "NPF" -#: company/models.py:276 +#: company/models.py:300 msgid "Manufacturer Part Number" -msgstr "" +msgstr "Número de Peça do Fabricante" -#: company/models.py:282 +#: company/models.py:306 msgid "URL for external manufacturer part link" -msgstr "" +msgstr "URL do link externo da peça do fabricante" -#: company/models.py:288 +#: company/models.py:312 msgid "Manufacturer part description" -msgstr "" +msgstr "Descrição da peça do fabricante" -#: company/models.py:333 company/models.py:357 company/models.py:511 +#: company/models.py:357 company/models.py:381 company/models.py:535 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 +#: stock/templates/stock/item_base.html:218 msgid "Manufacturer Part" -msgstr "" +msgstr "Peça do Fabricante" -#: company/models.py:364 +#: company/models.py:388 msgid "Parameter name" -msgstr "" +msgstr "Nome do parâmetro" -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Value" -msgstr "" +msgstr "Valor" -#: company/models.py:371 +#: company/models.py:395 msgid "Parameter value" -msgstr "" +msgstr "Valor do Parâmetro" -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 msgid "Units" -msgstr "" +msgstr "Unidades" -#: company/models.py:378 +#: company/models.py:402 msgid "Parameter units" -msgstr "" +msgstr "Unidades do parâmetro" -#: company/models.py:456 +#: company/models.py:480 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 #: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 msgid "Supplier" -msgstr "" +msgstr "Fornecedor" -#: company/models.py:499 +#: company/models.py:523 msgid "Select supplier" -msgstr "" +msgstr "Selecione o fornecedor" -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 msgid "SKU" -msgstr "" +msgstr "Código (SKU)" -#: company/models.py:505 part/serializers.py:365 +#: company/models.py:529 part/serializers.py:354 msgid "Supplier stock keeping unit" -msgstr "" +msgstr "Unidade de reserva de estoque fornecedor" -#: company/models.py:512 +#: company/models.py:536 msgid "Select manufacturer part" -msgstr "" +msgstr "Selecionar peça do fabricante" -#: company/models.py:518 +#: company/models.py:542 msgid "URL for external supplier part link" -msgstr "" +msgstr "URL do link externo da peça do fabricante" -#: company/models.py:524 +#: company/models.py:548 msgid "Supplier part description" -msgstr "" +msgstr "Descrição da peça fornecedor" -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 msgid "Note" -msgstr "" +msgstr "Anotação" -#: company/models.py:533 part/models.py:1867 +#: company/models.py:557 part/models.py:1910 msgid "base cost" -msgstr "" +msgstr "preço base" -#: company/models.py:533 part/models.py:1867 +#: company/models.py:557 part/models.py:1910 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" +msgstr "Embalagem" #: company/models.py:559 +msgid "Part packaging" +msgstr "Embalagem de peças" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "Quantidade de embalagens" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "Quantidade fornecida em um único pacote" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "múltiplo" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "Pedir múltiplos" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Disponível" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "Quantidade disponível do fornecedor" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "Disponibilidade Atualizada" + +#: company/models.py:583 msgid "Date of last update of availability data" -msgstr "" +msgstr "Data da última atualização da disponibilidade dos dados" -#: company/serializers.py:72 +#: company/serializers.py:96 msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 -msgid "Company" -msgstr "" +msgstr "Moeda padrão utilizada para este fornecedor" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" -msgstr "" +msgstr "Criar Pedido de compra" #: company/templates/company/company_base.html:28 msgid "Company actions" -msgstr "" +msgstr "Ações da empresa" #: company/templates/company/company_base.html:33 msgid "Edit company information" -msgstr "" +msgstr "Editar Informações da Empresa" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" -msgstr "" +msgstr "Editar Empresa" #: company/templates/company/company_base.html:38 msgid "Delete company" -msgstr "" +msgstr "Excluir a empresa" #: company/templates/company/company_base.html:39 #: company/templates/company/company_base.html:163 msgid "Delete Company" -msgstr "" +msgstr "Excluir Empresa" #: company/templates/company/company_base.html:56 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "" +msgstr "Carregar nova imagem" #: company/templates/company/company_base.html:59 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "" +msgstr "Baixar imagem do URL" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "" +msgstr "Excluir imagem" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" -msgstr "" +msgstr "Cliente" #: company/templates/company/company_base.html:112 msgid "Uses default currency" -msgstr "" +msgstr "Usar moeda padrão" #: company/templates/company/company_base.html:126 msgid "Phone" -msgstr "" +msgstr "Telefone" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" -msgstr "" +msgstr "Remover imagem" #: company/templates/company/company_base.html:207 msgid "Remove associated image from this company" -msgstr "" +msgstr "Remover imagem associada a esta empresa" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" -msgstr "" +msgstr "Remover" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" -msgstr "" +msgstr "Enviar imagem" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" -msgstr "" +msgstr "Baixar Imagem" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" -msgstr "" - -#: company/templates/company/detail.html:18 -msgid "Create new supplier part" -msgstr "" +msgstr "Peças do Fornecedor" #: company/templates/company/detail.html:19 +msgid "Create new supplier part" +msgstr "Criar nova peça do fornecedor" + +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" -msgstr "" +msgstr "Nova peça do fornecedor" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" -msgstr "" - -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" +msgstr "Pedir peças" #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "Excluir peças" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" -msgstr "" +msgstr "Excluir Peças" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" -msgstr "" +msgstr "Fabricantes de peças" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" -msgstr "" +msgstr "Criar novo fabricante de peça" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" -msgstr "" +msgstr "Nova peça do fabricante" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" -msgstr "" +msgstr "Estoque do Fornecedor" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" -msgstr "" - -#: company/templates/company/detail.html:121 -#: order/templates/order/purchase_orders.html:17 -msgid "Create new purchase order" -msgstr "" +msgstr "Pedidos de compra" #: company/templates/company/detail.html:122 +#: order/templates/order/purchase_orders.html:17 +msgid "Create new purchase order" +msgstr "Criar novo pedido de compra" + +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" -msgstr "" +msgstr "Novo Pedido de Compra" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" -msgstr "" +msgstr "Pedidos de vendas" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" -msgstr "" +msgstr "Criar novo pedido de venda" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" -msgstr "" +msgstr "Novo Pedido de Venda" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" -msgstr "" +msgstr "Estoque Atribuído" + +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "Pedidos de Devolução" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "Criar novo pedido de devolução" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "Novo Pedido de Devolução" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "Contato da Empresa" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "Adicionar Contato" #: company/templates/company/index.html:8 msgid "Supplier List" -msgstr "" +msgstr "Lista de fornecedores" #: company/templates/company/manufacturer_part.html:15 company/views.py:38 #: templates/InvenTree/search.html:181 templates/navbar.html:49 msgid "Manufacturers" -msgstr "" +msgstr "Fabricantes" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" -msgstr "" +msgstr "Pedir peça" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" -msgstr "" +msgstr "Editar peça do fabricante" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" -msgstr "" +msgstr "Excluir peça do fabricante" #: company/templates/company/manufacturer_part.html:65 #: company/templates/company/supplier_part.html:98 msgid "Internal Part" -msgstr "" +msgstr "Peça Interna" #: company/templates/company/manufacturer_part.html:95 msgid "No manufacturer information available" -msgstr "" +msgstr "Nenhuma informação do fabricante disponível" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" -msgstr "" +msgstr "Fornecedores" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" -msgstr "" +msgstr "Excluir peças do fornecedor" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" -msgstr "" +msgstr "Excluir" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" -msgstr "" +msgstr "Parâmetros" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" -msgstr "" +msgstr "Novo parâmetro" #: company/templates/company/manufacturer_part.html:183 msgid "Delete parameters" -msgstr "" +msgstr "Excluir parâmetros" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" -msgstr "" +msgstr "Adicionar parâmetro" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" -msgstr "" +msgstr "Peças Fabricadas" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "" +msgstr "Peças fornecidas" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" -msgstr "" +msgstr "Itens fornecidos em estoque" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" -msgstr "" +msgstr "Itens de Estoque atribuídos" + +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "Contatos" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" -msgstr "" - -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" +msgstr "Fornecedor da Peça" #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" -msgstr "" +msgstr "Ações de peças do fornecedor" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" -msgstr "" +msgstr "Pedir Peça" #: company/templates/company/supplier_part.html:61 #: company/templates/company/supplier_part.html:62 msgid "Update Availability" -msgstr "" +msgstr "Atualizar disponibilidade" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" -msgstr "" +msgstr "Editar Fornecedor da Peça" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" -msgstr "" +msgstr "Duplicar Peça do Fornecedor" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "" +msgstr "Excluir Fornecedor da Peça" #: company/templates/company/supplier_part.html:75 msgid "Delete Supplier Part" -msgstr "" +msgstr "Excluir Fornecedor da Peça" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" -msgstr "" +msgstr "Nenhuma informação do fornecedor está disponível" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" -msgstr "" +msgstr "Estoque de Peça do Fornecedor" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" -msgstr "" +msgstr "Criar novo item de estoque" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" -msgstr "" +msgstr "Novo item de estoque" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" -msgstr "" +msgstr "Pedidos de peças do fornecedor" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" -msgstr "" +msgstr "Informações de Preço" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" -msgstr "" +msgstr "Adicionar parcela de preço" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "QR Code da Peça do Fornecedor" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" -msgstr "" +msgstr "Vincular Código de Barras à Parte do Fornecedor" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" -msgstr "" +msgstr "Atualizar disponibilidade de peças" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" -msgstr "" +msgstr "Itens de Estoque" + +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Preço do Fornecedor Peça" #: company/views.py:33 msgid "New Supplier" -msgstr "" +msgstr "Novo Fornecedor" #: company/views.py:39 msgid "New Manufacturer" -msgstr "" +msgstr "Novo Fabricante" #: company/views.py:44 templates/InvenTree/search.html:211 #: templates/navbar.html:60 msgid "Customers" -msgstr "" +msgstr "Clientes" #: company/views.py:45 msgid "New Customer" -msgstr "" +msgstr "Novo Cliente" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" -msgstr "" +msgstr "Empresas" #: company/views.py:53 msgid "New Company" -msgstr "" +msgstr "Nova Empresa" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" -msgstr "" +msgstr "Nome da etiqueta" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" -msgstr "" - -#: label/models.py:116 -msgid "Label" -msgstr "" +msgstr "Descrição da etiqueta" #: label/models.py:117 +msgid "Label" +msgstr "Etiqueta" + +#: label/models.py:118 msgid "Label template file" -msgstr "" +msgstr "Arquivo de modelo de etiqueta" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" -msgstr "" +msgstr "Habilitado" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" -msgstr "" - -#: label/models.py:129 -msgid "Width [mm]" -msgstr "" +msgstr "Modelo de Etiqueta Habilitado" #: label/models.py:130 -msgid "Label width, specified in mm" -msgstr "" +msgid "Width [mm]" +msgstr "Largura [mm]" -#: label/models.py:136 -msgid "Height [mm]" -msgstr "" +#: label/models.py:131 +msgid "Label width, specified in mm" +msgstr "Largura da etiqueta, em mm" #: label/models.py:137 +msgid "Height [mm]" +msgstr "Altura [mm]" + +#: label/models.py:138 msgid "Label height, specified in mm" -msgstr "" +msgstr "Altura da Etiqueta, em mm" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" -msgstr "" +msgstr "Padrão de Nome de Arquivo" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" -msgstr "" +msgstr "Padrão para gerar nomes do arquivo das etiquetas" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," -msgstr "" +msgstr "Filtros de consulta (lista de valores separados por vírgula)," -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" -msgstr "" +msgstr "Filtros" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" -msgstr "" +msgstr "Filtros de consulta (lista de valores separados por vírgula" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" -msgstr "" +msgstr "Filtros de consulta de peça (lista de valores separados por vírgula)" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" -msgstr "" +msgstr "Nenhum pedido de compra correspondente encontrado" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" -msgstr "" +msgstr "Pedido de Compra" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" +msgstr "Desconhecido" + +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Preço Total" + +#: order/models.py:68 +msgid "Total price for this order" +msgstr "Preço total deste pedido" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "O contato não corresponde à empresa selecionada" + +#: order/models.py:200 +msgid "Order description (optional)" msgstr "" -#: order/models.py:83 -msgid "Order description" -msgstr "" - -#: order/models.py:85 order/models.py:1283 +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" -msgstr "" +msgstr "Link para página externa" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" +msgstr "Data esperada para entrega do pedido. A ordem estará atrasada após esta data." -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Criado por" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "Usuário ou grupo responsável para este pedido" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "Ponto de contato para este pedido" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Observações do pedido" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Referência do pedido" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "Situação do pedido de compra" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Empresa da qual os itens estão sendo encomendados" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "Referencia do fornecedor" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "Código de referência do pedido fornecedor" + +#: order/models.py:366 +msgid "received by" +msgstr "recebido por" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "Data de emissão" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "Dia que o pedido foi feito" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" -msgstr "" +msgstr "Dia que o pedido foi concluído" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" -msgstr "" +msgstr "Quantidade deve ser um número positivo" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" -msgstr "" +msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " -msgstr "" +msgstr "Referência do Cliente " -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" -msgstr "" +msgstr "Código de Referência do pedido do cliente" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" -msgstr "" +msgstr "Data de Envio" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" -msgstr "" +msgstr "enviado por" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" -msgstr "" +msgstr "O pedido não pode ser concluído, pois nenhuma parte foi atribuída" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" +msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "Pedido não pode ser concluído, pois, há itens na linha incompletos" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" -msgstr "" +msgstr "Quantidade do item" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" -msgstr "" +msgstr "Referência do Item em Linha" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" -msgstr "" +msgstr "Observações do Item de Linha" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "Data alvo para este item de linha (deixe em branco para usar a data alvo a partir da ordem)" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" -msgstr "" +msgstr "Contexto" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" -msgstr "" +msgstr "Contexto adicional para esta linha" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" -msgstr "" +msgstr "Preço Unitário" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" -msgstr "" - -#: order/models.py:1014 -msgid "deleted" -msgstr "" - -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 -msgid "Order" -msgstr "" - -#: order/models.py:1039 -msgid "Supplier part" -msgstr "" - -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 -msgid "Received" -msgstr "" - -#: order/models.py:1047 -msgid "Number of items received" -msgstr "" - -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 -msgid "Purchase Price" -msgstr "" - -#: order/models.py:1055 -msgid "Unit purchase price" -msgstr "" - -#: order/models.py:1063 -msgid "Where does the Purchaser want this item to be stored?" -msgstr "" - -#: order/models.py:1129 -msgid "Virtual part cannot be assigned to a sales order" -msgstr "" +msgstr "A peça do fornecedor deve corresponder ao fornecedor" #: order/models.py:1134 +msgid "deleted" +msgstr "excluído" + +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 +msgid "Order" +msgstr "Pedido" + +#: order/models.py:1159 +msgid "Supplier part" +msgstr "Fornecedor da Peça" + +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 +msgid "Received" +msgstr "Recebido" + +#: order/models.py:1167 +msgid "Number of items received" +msgstr "Número de itens recebidos" + +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 +msgid "Purchase Price" +msgstr "Preço de Compra" + +#: order/models.py:1175 +msgid "Unit purchase price" +msgstr "Preço unitário de compra" + +#: order/models.py:1188 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "Onde o Comprador quer que este item seja armazenado?" + +#: order/models.py:1254 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "Peça virtual não pode ser atribuída a um pedido de venda" + +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" -msgstr "" +msgstr "Preço de Venda" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" -msgstr "" +msgstr "Preço de venda unitário" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" -msgstr "" +msgstr "Quantidade enviada" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" -msgstr "" +msgstr "Data do envio" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" -msgstr "" +msgstr "Verificado por" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" -msgstr "" +msgstr "Usuário que verificou esta remessa" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" -msgstr "" +msgstr "Remessa" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" -msgstr "" +msgstr "Número do Envio" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" -msgstr "" +msgstr "Notas de envio" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" -msgstr "" +msgstr "Número de Rastreamento" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" -msgstr "" +msgstr "Informação de rastreamento da remessa" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" -msgstr "" - -#: order/models.py:1277 -msgid "Reference number for associated invoice" -msgstr "" - -#: order/models.py:1295 -msgid "Shipment has already been sent" -msgstr "" - -#: order/models.py:1298 -msgid "Shipment has no allocated stock items" -msgstr "" - -#: order/models.py:1401 order/models.py:1403 -msgid "Stock item has not been assigned" -msgstr "" +msgstr "Número da Fatura" #: order/models.py:1407 -msgid "Cannot allocate stock item to a line with a different part" -msgstr "" - -#: order/models.py:1409 -msgid "Cannot allocate stock to a line without a part" -msgstr "" - -#: order/models.py:1412 -msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" - -#: order/models.py:1422 order/serializers.py:1083 -msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgid "Reference number for associated invoice" +msgstr "Número de referência para fatura associada" #: order/models.py:1425 +msgid "Shipment has already been sent" +msgstr "O pedido já foi enviado" + +#: order/models.py:1428 +msgid "Shipment has no allocated stock items" +msgstr "Remessa não foi alocada nos itens de estoque" + +#: order/models.py:1535 order/models.py:1537 +msgid "Stock item has not been assigned" +msgstr "O item do estoque não foi atribuído" + +#: order/models.py:1541 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "Não é possível alocar o item de estoque para uma linha de uma peça diferente" + +#: order/models.py:1543 +msgid "Cannot allocate stock to a line without a part" +msgstr "Não é possível alocar uma linha sem uma peça" + +#: order/models.py:1546 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" + +#: order/models.py:1556 order/serializers.py:1086 +msgid "Quantity must be 1 for serialized stock item" +msgstr "Quantidade deve ser 1 para item de estoque serializado" + +#: order/models.py:1559 msgid "Sales order does not match shipment" -msgstr "" +msgstr "Pedidos de venda não coincidem com a remessa" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" -msgstr "" +msgstr "Remessa não coincide com pedido de venda" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" -msgstr "" +msgstr "Linha" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" -msgstr "" +msgstr "Referência de remessa do pedido de venda" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" -msgstr "" +msgstr "Item" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" -msgstr "" +msgstr "Selecione o item de estoque para alocar" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "Insira a quantidade de atribuição de estoque" -#: order/serializers.py:63 -msgid "Price currency" -msgstr "" +#: order/models.py:1674 +msgid "Return Order reference" +msgstr "Referência de Pedidos de Devolução" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "Empresa da qual os itens estão sendo retornados" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "Estado do pedido de retorno" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "Somente itens da série podem ser devolvidos" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "Devolver pedido" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "Selecione o item a ser devolvido pelo cliente" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "Data de Recebimento" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "Data que o pedido a ser devolvido foi recebido" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "Despesa/gastos" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "Gastos com esta linha de itens" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "Gastos para reparar e/ou devolver esta linha de itens" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" -msgstr "" +msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "Permitir que o pedido seja fechado com itens de linha incompletos" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" -msgstr "" +msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" -msgstr "" +msgstr "O pedido não está aberto" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" -msgstr "" +msgstr "Moeda de preço de compra" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" -msgstr "" +msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" -msgstr "" +msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" -msgstr "" +msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" -msgstr "" +msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" -msgstr "" +msgstr "Itens de linha" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" -msgstr "" +msgstr "O item de linha não corresponde ao pedido de compra" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" -msgstr "" +msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" -msgstr "" +msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:478 -msgid "Unique identifier field" -msgstr "" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "Código de barras" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "Código de barras lido" + +#: order/serializers.py:526 msgid "Barcode is already in use" -msgstr "" +msgstr "Código de barras já em uso" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" -msgstr "" +msgstr "Quantidade inteira deve ser fornecida para peças rastreáveis" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" -msgstr "" +msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" -msgstr "" +msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" -msgstr "" +msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" -msgstr "" +msgstr "Moeda de preço de venda" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" -msgstr "" +msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" -msgstr "" +msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" -msgstr "" +msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" -msgstr "" - -#: order/serializers.py:1233 order/serializers.py:1357 -msgid "Shipment has already been shipped" -msgstr "" +msgstr "Digite números de série para alocar" #: order/serializers.py:1236 order/serializers.py:1360 +msgid "Shipment has already been shipped" +msgstr "O pedido já foi enviado" + +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" -msgstr "" +msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "Nenhuma correspondência encontrada para os seguintes números de série" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" -msgstr "" +msgstr "Os seguintes números de série já estão alocados" + +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "Devolver item do pedido" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "Item do pedido não bate com a ordem de devolução" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "Item do pedido já foi recebido" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "Itens só podem ser recebidos de pedidos em processamento" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "Tipo de moeda para o item do pedido" #: order/tasks.py:26 msgid "Overdue Purchase Order" -msgstr "" +msgstr "Pedido de compra vencido" #: order/tasks.py:31 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "" +msgstr "Pedido de compra {po} está atrasada" #: order/tasks.py:89 msgid "Overdue Sales Order" -msgstr "" +msgstr "Pedido de venda vencido" #: order/tasks.py:94 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "" +msgstr "Pedido de venda {so} está atrasada" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" -msgstr "" +msgstr "Imprimir relatório do pedido de compra" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" -msgstr "" +msgstr "Exportar pedido ao arquivo" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" -msgstr "" +msgstr "Ações de pedido" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" -msgstr "" +msgstr "Editar pedido" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" -msgstr "" +msgstr "Cancelar pedido" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" -msgstr "" +msgstr "Duplicar pedido" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" -msgstr "" - -#: order/templates/order/order_base.html:65 -msgid "Receive items" -msgstr "" - -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 -msgid "Receive Items" -msgstr "" - -#: order/templates/order/order_base.html:69 -msgid "Mark order as complete" -msgstr "" - -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 -msgid "Complete Order" -msgstr "" - -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 -msgid "Order Reference" -msgstr "" - -#: order/templates/order/order_base.html:98 +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 #: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" +msgstr "Emitir Pedido" + +#: order/templates/order/order_base.html:83 +msgid "Receive items" +msgstr "Receber itens" + +#: order/templates/order/order_base.html:85 +msgid "Receive Items" +msgstr "Receber Itens" + +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 +msgid "Mark order as complete" +msgstr "Marcar pedido como concluído" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 +msgid "Complete Order" +msgstr "Completar Pedido" + +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 +msgid "Order Reference" +msgstr "Referência do Pedido" + +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" -msgstr "" +msgstr "Descrição do Pedido" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" -msgstr "" +msgstr "Situação do pedido" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" -msgstr "" +msgstr "Nenhuma informação do fornecedor disponível" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" -msgstr "" +msgstr "Itens de Linha Concluídos" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" -msgstr "" +msgstr "Incompleto" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" -msgstr "" +msgstr "Emitido" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" -msgstr "" +msgstr "Custo total" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" -msgstr "" +msgstr "O custo total não pôde ser calculado" + +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "Código QR do pedido" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "Vincular o código de barras ao pedido" #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 #: templates/patterns/wizard/match_fields.html:8 msgid "Missing selections for the following required columns" -msgstr "" +msgstr "Seleções ausentes para as seguintes colunas necessárias" #: order/templates/order/order_wizard/match_fields.html:20 #: part/templates/part/import_wizard/ajax_match_fields.html:20 #: part/templates/part/import_wizard/match_fields.html:20 #: templates/patterns/wizard/match_fields.html:19 msgid "Duplicate selections found, see below. Fix them then retry submitting." -msgstr "" +msgstr "Seleções duplicadas encontradas, veja abaixo. Corrija-as e tente enviar novamente." #: order/templates/order/order_wizard/match_fields.html:29 #: order/templates/order/order_wizard/match_parts.html:21 @@ -4474,28 +4836,28 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:21 #: templates/patterns/wizard/match_fields.html:28 msgid "Submit Selections" -msgstr "" +msgstr "Enviar Seleções" #: order/templates/order/order_wizard/match_fields.html:35 #: part/templates/part/import_wizard/ajax_match_fields.html:28 #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "" +msgstr "Campos de arquivo" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 #: part/templates/part/import_wizard/match_fields.html:42 #: templates/patterns/wizard/match_fields.html:41 msgid "Remove column" -msgstr "" +msgstr "Remover coluna" #: order/templates/order/order_wizard/match_fields.html:60 #: part/templates/part/import_wizard/ajax_match_fields.html:53 #: part/templates/part/import_wizard/match_fields.html:60 #: templates/patterns/wizard/match_fields.html:59 msgid "Duplicate selection" -msgstr "" +msgstr "Duplicar seleção" #: order/templates/order/order_wizard/match_fields.html:71 #: order/templates/order/order_wizard/match_parts.html:52 @@ -4503,42 +4865,44 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" -msgstr "" +msgstr "Remover linha" #: order/templates/order/order_wizard/match_parts.html:12 #: part/templates/part/import_wizard/ajax_match_references.html:12 #: part/templates/part/import_wizard/match_references.html:12 msgid "Errors exist in the submitted data" -msgstr "" +msgstr "Há erros nos dados enviados" #: order/templates/order/order_wizard/match_parts.html:28 #: part/templates/part/import_wizard/ajax_match_references.html:21 #: part/templates/part/import_wizard/match_references.html:28 msgid "Row" -msgstr "" +msgstr "Linha" #: order/templates/order/order_wizard/match_parts.html:29 msgid "Select Supplier Part" -msgstr "" +msgstr "Selecionar Fornecedor da Peça" #: order/templates/order/order_wizard/po_upload.html:8 msgid "Return to Orders" -msgstr "" +msgstr "Retornar para Pedidos" #: order/templates/order/order_wizard/po_upload.html:13 msgid "Upload File for Purchase Order" -msgstr "" +msgstr "Carregar Arquivo para o Pedido de Compra" #: order/templates/order/order_wizard/po_upload.html:14 msgid "Order is already processed. Files cannot be uploaded." -msgstr "" +msgstr "O pedido já está processado. Arquivos não podem ser enviados." #: order/templates/order/order_wizard/po_upload.html:27 #: part/templates/part/import_wizard/ajax_part_upload.html:10 @@ -4546,1814 +4910,1988 @@ msgstr "" #: templates/patterns/wizard/upload.html:13 #, python-format msgid "Step %(step)s of %(count)s" -msgstr "" +msgstr "Passo %(step)s de %(count)s" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" -msgstr "" +msgstr "Itens de linha" #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "" +msgstr "Estoque Recebido" #: order/templates/order/purchase_order_detail.html:19 msgid "Purchase Order Items" -msgstr "" +msgstr "Itens do Pedido de Compra" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" -msgstr "" +msgstr "Adicionar item de linha" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" -msgstr "" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "Receber os itens do pedido" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "Excluir Itens de Linha" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" -msgstr "" +msgstr "Linhas Extra" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" -msgstr "" +msgstr "Adicionar Linha Extra" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" -msgstr "" +msgstr "Itens Recebidos" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" -msgstr "" +msgstr "Notas do Pedido" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" -msgstr "" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" +msgstr "Imprimir guia de devolução" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" -msgstr "" +msgstr "Imprimir lista de pacotes" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" -msgstr "" +msgstr "Referência do Cliente" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "Custo Total" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "Código QR da guia de devolução" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "Vincular Código de Barras a Pedido de Devolução" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "Detalhes do pedido" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "Imprimir Relatório do Pedido de Venda" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "Enviar itens" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "Concluir Pedido de Venda" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "Este Pedido de Venda não foi totalmente alocado" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" -msgstr "" +msgstr "Envios concluídos" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" -msgstr "" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "Código QR da venda" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" +msgstr "Código de barras da venda" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" -msgstr "" +msgstr "Itens do Pedido de Venda" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" -msgstr "" +msgstr "Envios Pendentes" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" -msgstr "" +msgstr "Ações" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" -msgstr "" +msgstr "Nova Remessa" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" -msgstr "" +msgstr "Corresponder Peças com Fornecedor" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" -msgstr "" +msgstr "Pedido de Venda não encontrado" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" -msgstr "" +msgstr "Preço não encontrado" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" -msgstr "" +msgstr "Atualizado {part} unid.-preço para {price}" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" -msgstr "" +msgstr "Atualizado {part} unid.-preço para {price} e quantidade para {qty}" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" -msgstr "" +msgstr "ID da Peça" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" -msgstr "" +msgstr "Nome da Peça" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" -msgstr "" +msgstr "Descrição da Peça" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" -msgstr "" +msgstr "IPN" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" -msgstr "" +msgstr "Revisão" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" -msgstr "" +msgstr "Palavras chave" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" -msgstr "" +msgstr "ID da Categoria" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" -msgstr "" +msgstr "Nome da Categoria" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" -msgstr "" +msgstr "ID Local Padrão" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" -msgstr "" +msgstr "ID de Fornecedor Padrão" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" -msgstr "" +msgstr "Estoque Mínimo" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" -msgstr "" +msgstr "Em Estoque" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" -msgstr "" +msgstr "No pedido" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "" +msgstr "Usado em" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" -msgstr "" +msgstr "Alocado" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" -msgstr "" +msgstr "Produzindo" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" -msgstr "" +msgstr "Custo Mínimo" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" -msgstr "" +msgstr "Custo Máximo" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" -msgstr "" +msgstr "ID Paternal" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" -msgstr "" +msgstr "Nome Paternal" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" -msgstr "" +msgstr "Caminho da Categoria" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" -msgstr "" +msgstr "Peças" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" -msgstr "" +msgstr "Nível da LDM" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" -msgstr "" +msgstr "ID Item LDM" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" -msgstr "" +msgstr "IPN Paternal" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" -msgstr "" +msgstr "IPN da Peça" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" -msgstr "" +msgstr "Preço Mínimo" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" -msgstr "" +msgstr "Preço Máximo" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" -msgstr "" +msgstr "Pedido de compra recebido" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" -msgstr "" +msgstr "Pedidos de Venda Feitos" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" -msgstr "" +msgstr "Estoque produzido por Ordem de Produção" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" -msgstr "" +msgstr "Estoque obrigatório para Pedido de Produção" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" -msgstr "" +msgstr "Válido" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" -msgstr "" +msgstr "Validar a Lista de Materiais completa" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" -msgstr "" +msgstr "Esta opção deve ser selecionada" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" -msgstr "" +msgstr "Local Padrão" #: part/bom.py:176 templates/email/low_stock_notification.html:17 msgid "Total Stock" -msgstr "" +msgstr "Estoque Total" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" -msgstr "" +msgstr "Estoque Disponível" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" -msgstr "" +msgstr "Quantidade para o cálculo de preço" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" -msgstr "" +msgstr "Categoria da Peça" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" -msgstr "" +msgstr "Categorias de Peça" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Local padrão para peças desta categoria" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "Estrutural" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "Peças não podem ser diretamente atribuídas a uma categoria estrutural, mas podem ser atribuídas a categorias filhas." + +#: part/models.py:133 +msgid "Default keywords" +msgstr "Palavras-chave Padrão" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "Palavras-chave padrão para peças nesta categoria" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "Ícone" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "Ícone (opcional)" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "Você não pode tornar esta categoria em estrutural, pois, algumas partes já estão alocadas!" + +#: part/models.py:466 msgid "Invalid choice for parent part" -msgstr "" +msgstr "Escolha inválida para peça parental" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" -msgstr "" +msgstr "Parte '{p1}' é usada na LDM para '{p2}' (recursiva)" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN deve corresponder ao padrão regex {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" -msgstr "" +msgstr "Item em estoque com este número de série já existe" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" -msgstr "" +msgstr "Não é permitido duplicar IPN em configurações de partes" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." -msgstr "" +msgstr "Uma parte com este Nome, IPN e Revisão já existe." -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" -msgstr "" +msgstr "Peças não podem ser atribuídas a categorias estruturais!" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" -msgstr "" +msgstr "Nome da peça" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" -msgstr "" +msgstr "É um modelo" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" -msgstr "" - -#: part/models.py:827 -msgid "Is this part a variant of another part?" -msgstr "" - -#: part/models.py:828 -msgid "Variant Of" -msgstr "" - -#: part/models.py:834 -msgid "Part description" -msgstr "" - -#: part/models.py:840 -msgid "Part keywords to improve visibility in search results" -msgstr "" - -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 -#: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 -msgid "Category" -msgstr "" - -#: part/models.py:848 -msgid "Part category" -msgstr "" +msgstr "Esta peça é uma peça modelo?" #: part/models.py:854 -msgid "Internal Part Number" +msgid "Is this part a variant of another part?" +msgstr "Esta peça é variante de outra peça?" + +#: part/models.py:855 part/templates/part/part_base.html:179 +msgid "Variant Of" +msgstr "Variante de" + +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:860 -msgid "Part revision or version number" -msgstr "" +#: part/models.py:867 +msgid "Part keywords to improve visibility in search results" +msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" + +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 +#: templates/js/translated/notification.js:50 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 +msgid "Category" +msgstr "Categoria" + +#: part/models.py:875 +msgid "Part category" +msgstr "Categoria da Peça" + +#: part/models.py:881 +msgid "Internal Part Number" +msgstr "Numero interno do produto" #: part/models.py:886 +msgid "Part revision or version number" +msgstr "Revisão de peça ou número de versão" + +#: part/models.py:912 msgid "Where is this item normally stored?" -msgstr "" +msgstr "Onde este item é armazenado normalmente?" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" -msgstr "" +msgstr "Fornecedor Padrão" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" -msgstr "" - -#: part/models.py:939 -msgid "Default Expiry" -msgstr "" - -#: part/models.py:940 -msgid "Expiry time (in days) for stock items of this part" -msgstr "" - -#: part/models.py:946 -msgid "Minimum allowed stock level" -msgstr "" - -#: part/models.py:953 -msgid "Units of measure for this part" -msgstr "" - -#: part/models.py:959 -msgid "Can this part be built from other parts?" -msgstr "" +msgstr "Fornecedor padrão da peça" #: part/models.py:965 -msgid "Can this part be used to build other parts?" -msgstr "" +msgid "Default Expiry" +msgstr "Validade Padrão" -#: part/models.py:971 -msgid "Does this part have tracking for unique items?" -msgstr "" +#: part/models.py:966 +msgid "Expiry time (in days) for stock items of this part" +msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:976 -msgid "Can this part be purchased from external suppliers?" -msgstr "" +#: part/models.py:972 +msgid "Minimum allowed stock level" +msgstr "Nível mínimo de estoque permitido" -#: part/models.py:981 -msgid "Can this part be sold to customers?" -msgstr "" +#: part/models.py:979 +msgid "Units of measure for this part" +msgstr "Unidade de medida para esta peça" -#: part/models.py:986 -msgid "Is this part active?" -msgstr "" +#: part/models.py:985 +msgid "Can this part be built from other parts?" +msgstr "Essa peça pode ser construída a partir de outras peças?" #: part/models.py:991 +msgid "Can this part be used to build other parts?" +msgstr "Essa peça pode ser usada para construir outras peças?" + +#: part/models.py:997 +msgid "Does this part have tracking for unique items?" +msgstr "Esta parte tem rastreamento para itens únicos?" + +#: part/models.py:1002 +msgid "Can this part be purchased from external suppliers?" +msgstr "Esta peça pode ser comprada de fornecedores externos?" + +#: part/models.py:1007 +msgid "Can this part be sold to customers?" +msgstr "Esta peça pode ser vendida a clientes?" + +#: part/models.py:1012 +msgid "Is this part active?" +msgstr "Esta parte está ativa?" + +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" -msgstr "" +msgstr "Esta é uma peça virtual, como um software de produto ou licença?" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" -msgstr "" +msgstr "Notas de Peça" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" -msgstr "" +msgstr "Soma de Verificação da LDM" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" -msgstr "" +msgstr "Soma de verificação da LDM armazenada" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" -msgstr "" +msgstr "LDM conferida por" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" -msgstr "" +msgstr "LDM verificada no dia" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" -msgstr "" +msgstr "Criação de Usuário" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "Usuário responsável por esta peça" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" -msgstr "" +msgstr "Último Balanço" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" -msgstr "" +msgstr "Venda múltipla" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" -msgstr "" +msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" -msgstr "" +msgstr "Custo Mínimo da LDM" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" -msgstr "" +msgstr "Custo mínimo das peças componentes" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" -msgstr "" +msgstr "Custo Máximo da LDM" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" -msgstr "" +msgstr "Custo máximo das peças componentes" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" -msgstr "" +msgstr "Custo Mínimo de Compra" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" -msgstr "" +msgstr "Custo mínimo histórico de compra" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" -msgstr "" +msgstr "Custo Máximo de Compra" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" -msgstr "" +msgstr "Custo máximo histórico de compra" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" -msgstr "" +msgstr "Preço Interno Mínimo" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" -msgstr "" +msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" -msgstr "" +msgstr "Preço Interno Máximo" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" -msgstr "" +msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" -msgstr "" +msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" -msgstr "" +msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" -msgstr "" +msgstr "Preço Máximo do Fornecedor" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" -msgstr "" +msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" -msgstr "" +msgstr "Custo Mínimo variável" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" -msgstr "" - -#: part/models.py:2846 -msgid "Maximum Variant Cost" -msgstr "" - -#: part/models.py:2847 -msgid "Calculated maximum cost of variant parts" -msgstr "" - -#: part/models.py:2853 -msgid "Calculated overall minimum cost" -msgstr "" - -#: part/models.py:2859 -msgid "Calculated overall maximum cost" -msgstr "" - -#: part/models.py:2864 -msgid "Minimum Sale Price" -msgstr "" - -#: part/models.py:2865 -msgid "Minimum sale price based on price breaks" -msgstr "" - -#: part/models.py:2870 -msgid "Maximum Sale Price" -msgstr "" - -#: part/models.py:2871 -msgid "Maximum sale price based on price breaks" -msgstr "" - -#: part/models.py:2876 -msgid "Minimum Sale Cost" -msgstr "" - -#: part/models.py:2877 -msgid "Minimum historical sale price" -msgstr "" - -#: part/models.py:2882 -msgid "Maximum Sale Cost" -msgstr "" - -#: part/models.py:2883 -msgid "Maximum historical sale price" -msgstr "" - -#: part/models.py:2901 -msgid "Part for stocktake" -msgstr "" +msgstr "Custo mínimo calculado das peças variáveis" #: part/models.py:2908 -msgid "Total available stock at time of stocktake" -msgstr "" +msgid "Maximum Variant Cost" +msgstr "Custo Máximo Variável" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:63 -#: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 -msgid "Date" -msgstr "" +#: part/models.py:2909 +msgid "Calculated maximum cost of variant parts" +msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:2913 -msgid "Date stocktake was performed" -msgstr "" +#: part/models.py:2915 +msgid "Calculated overall minimum cost" +msgstr "Custo total mínimo calculado" #: part/models.py:2921 +msgid "Calculated overall maximum cost" +msgstr "Custo total máximo calculado" + +#: part/models.py:2926 +msgid "Minimum Sale Price" +msgstr "Preço Mínimo de Venda" + +#: part/models.py:2927 +msgid "Minimum sale price based on price breaks" +msgstr "Preço mínimo de venda baseado nos intervalos de preço" + +#: part/models.py:2932 +msgid "Maximum Sale Price" +msgstr "Preço Máximo de Venda" + +#: part/models.py:2933 +msgid "Maximum sale price based on price breaks" +msgstr "Preço máximo de venda baseado nos intervalos de preço" + +#: part/models.py:2938 +msgid "Minimum Sale Cost" +msgstr "Custo Mínimo de Venda" + +#: part/models.py:2939 +msgid "Minimum historical sale price" +msgstr "Preço histórico mínimo de venda" + +#: part/models.py:2944 +msgid "Maximum Sale Cost" +msgstr "Custo Máximo de Venda" + +#: part/models.py:2945 +msgid "Maximum historical sale price" +msgstr "Preço histórico máximo de venda" + +#: part/models.py:2964 +msgid "Part for stocktake" +msgstr "Peça para Balanço" + +#: part/models.py:2969 +msgid "Item Count" +msgstr "Total de Itens" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "Número de entradas de estoques individuais no momento do balanço" + +#: part/models.py:2977 +msgid "Total available stock at time of stocktake" +msgstr "Estoque total disponível no momento do balanço" + +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 +#: templates/InvenTree/settings/plugin.html:63 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 +msgid "Date" +msgstr "Data" + +#: part/models.py:2982 +msgid "Date stocktake was performed" +msgstr "Data de realização do balanço" + +#: part/models.py:2990 msgid "Additional notes" -msgstr "" +msgstr "Notas adicionais" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" -msgstr "" +msgstr "Usuário que fez o balanço" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "Custo Mínimo de Estoque" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "Custo mínimo estimado de estoque disponível" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "Custo Máximo de Estoque" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "Custo máximo estimado de estoque disponível" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "Reportar" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "Arquivo de Relatório de Balanço (gerado internamente)" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "Contagem de Peças" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "Número de peças cobertas pelo Balanço" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "Usuário que solicitou este relatório de balanço" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" -msgstr "" +msgstr "Modelos de teste só podem ser criados para peças rastreáveis" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" -msgstr "" +msgstr "O teste com este nome já existe para esta peça" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" -msgstr "" +msgstr "Nome de Teste" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" -msgstr "" +msgstr "Insira um nome para o teste" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" -msgstr "" +msgstr "Descrição do Teste" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" -msgstr "" +msgstr "Digite a descrição para este teste" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" -msgstr "" +msgstr "Requerido" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" -msgstr "" +msgstr "Este teste é obrigatório passar?" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" -msgstr "" +msgstr "Requer Valor" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" -msgstr "" +msgstr "Este teste requer um valor ao adicionar um resultado de teste?" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" -msgstr "" +msgstr "Anexo obrigatório" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" -msgstr "" - -#: part/models.py:3182 -msgid "Parameter template name must be unique" -msgstr "" - -#: part/models.py:3190 -msgid "Parameter Name" -msgstr "" - -#: part/models.py:3194 -msgid "Parameter Units" -msgstr "" - -#: part/models.py:3199 -msgid "Parameter description" -msgstr "" - -#: part/models.py:3232 -msgid "Parent Part" -msgstr "" - -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 -msgid "Parameter Template" -msgstr "" - -#: part/models.py:3236 -msgid "Data" -msgstr "" - -#: part/models.py:3236 -msgid "Parameter Value" -msgstr "" - -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 -msgid "Default Value" -msgstr "" - -#: part/models.py:3288 -msgid "Default Parameter Value" -msgstr "" +msgstr "Este teste requer um anexo ao adicionar um resultado de teste?" #: part/models.py:3325 -msgid "Part ID or part name" -msgstr "" +msgid "Parameter template name must be unique" +msgstr "Nome do modelo de parâmetro deve ser único" -#: part/models.py:3329 -msgid "Unique part ID value" -msgstr "" +#: part/models.py:3333 +msgid "Parameter Name" +msgstr "Nome do Parâmetro" #: part/models.py:3337 +msgid "Parameter Units" +msgstr "Unidades do Parâmetro" + +#: part/models.py:3342 +msgid "Parameter description" +msgstr "Descrição do Parâmetro" + +#: part/models.py:3375 +msgid "Parent Part" +msgstr "Peça Paternal" + +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 +msgid "Parameter Template" +msgstr "Modelo de parâmetro" + +#: part/models.py:3379 +msgid "Data" +msgstr "Dados" + +#: part/models.py:3379 +msgid "Parameter Value" +msgstr "Valor do Parâmetro" + +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 +msgid "Default Value" +msgstr "Valor Padrão" + +#: part/models.py:3431 +msgid "Default Parameter Value" +msgstr "Valor Padrão do Parâmetro" + +#: part/models.py:3468 +msgid "Part ID or part name" +msgstr "ID da peça ou nome da peça" + +#: part/models.py:3472 +msgid "Unique part ID value" +msgstr "Valor exclusivo do ID de peça" + +#: part/models.py:3480 msgid "Part IPN value" -msgstr "" +msgstr "Valor da parte IPN" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" -msgstr "" +msgstr "Nível" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" -msgstr "" +msgstr "Nível da LDM" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" -msgstr "" +msgstr "Selecione a Peça Parental" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" -msgstr "" +msgstr "Sub peça" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" -msgstr "" +msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" -msgstr "" +msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" -msgstr "" +msgstr "Opcional" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" -msgstr "" +msgstr "Este item LDM é opcional" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" -msgstr "" +msgstr "Consumível" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" +msgstr "Este item LDM é consumível (não é rastreado nos pedidos de construção)" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" -msgstr "" +msgstr "Excedente" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "" +msgstr "Quantidade estimada de desperdício (absoluto ou porcentagem)" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" -msgstr "" +msgstr "Referência do Item LDM" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" -msgstr "" +msgstr "Notas do Item LDM" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" -msgstr "" +msgstr "Soma de verificação" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" -msgstr "" +msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "Validado" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "O item da LDM foi calidado" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "Obtém herdados" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" +msgstr "Este item da LDM é herdado por LDMs para peças variáveis" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" -msgstr "" +msgstr "Permitir variações" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" +msgstr "Itens de estoque para as peças das variantes podem ser usados para este item LDM" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" -msgstr "" +msgstr "Sub peça deve ser especificada" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" -msgstr "" +msgstr "Substituir Item da LDM" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" -msgstr "" +msgstr "A peça de substituição não pode ser a mesma que a peça mestre" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" -msgstr "" +msgstr "Item LDM Parental" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" -msgstr "" +msgstr "Substituir peça" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" -msgstr "" +msgstr "Parte 1" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" -msgstr "" +msgstr "Parte 2" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" -msgstr "" +msgstr "Selecionar Peça Relacionada" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" -msgstr "" +msgstr "Relacionamento da peça não pode ser criada com ela mesma" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" -msgstr "" +msgstr "Relação duplicada já existe" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" -msgstr "" +msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" -msgstr "" +msgstr "Peça Original" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" -msgstr "" +msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" -msgstr "" +msgstr "Copiar imagem" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" -msgstr "" +msgstr "Copiar imagem da peça original" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" -msgstr "" +msgstr "Copiar LDM" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" -msgstr "" +msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" -msgstr "" +msgstr "Copiar Parâmetros" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" -msgstr "" +msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" -msgstr "" +msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" +msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" -msgstr "" +msgstr "Local Inicial do Estoque" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" -msgstr "" +msgstr "Especifique o local do estoque inicial para esta Peça" + +#: part/serializers.py:348 +msgid "Select supplier (or leave blank to skip)" +msgstr "Selecione o fornecedor (ou deixe em branco para pular)" #: part/serializers.py:359 -msgid "Select supplier (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:370 msgid "Select manufacturer (or leave blank to skip)" -msgstr "" +msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" -msgstr "" +msgstr "Número de Peça do Fabricante" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" -msgstr "" +msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" -msgstr "" +msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" -msgstr "" +msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" -msgstr "" +msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" -msgstr "" +msgstr "Peça duplicada" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" -msgstr "" +msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" -msgstr "" +msgstr "Estoque inicial" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" -msgstr "" +msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" -msgstr "" +msgstr "Informações do Fornecedor" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" -msgstr "" +msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "Copiar Parâmetros da Categoria" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "Limitar o relatório de balanço a uma determinada peça e quaisquer peças variantes" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "Limitar o relatório de balanço a uma determinada categoria, e qualquer peças filhas" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "Limitar o relatório de balanço a um determinado local de estoque, e qualquer local filho" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "Gerar relatório" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "Gerar arquivo de relatório contendo dados de estoque calculados" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "Atualizar Peças" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "Atualizar peças especificadas com dados de estoque calculados" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "Função de Balanço de Estoque não está ativada" + +#: part/serializers.py:964 msgid "Update" -msgstr "" +msgstr "Atualizar" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" -msgstr "" +msgstr "Atualizar preços desta peça" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" -msgstr "" +msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" -msgstr "" - -#: part/serializers.py:1121 -msgid "Remove existing BOM items before copying" -msgstr "" - -#: part/serializers.py:1126 -msgid "Include Inherited" -msgstr "" - -#: part/serializers.py:1127 -msgid "Include BOM items which are inherited from templated parts" -msgstr "" - -#: part/serializers.py:1132 -msgid "Skip Invalid Rows" -msgstr "" - -#: part/serializers.py:1133 -msgid "Enable this option to skip invalid rows" -msgstr "" - -#: part/serializers.py:1138 -msgid "Copy Substitute Parts" -msgstr "" - -#: part/serializers.py:1139 -msgid "Copy substitute parts when duplicate BOM items" -msgstr "" - -#: part/serializers.py:1179 -msgid "Clear Existing BOM" -msgstr "" - -#: part/serializers.py:1180 -msgid "Delete existing BOM items before uploading" -msgstr "" - -#: part/serializers.py:1210 -msgid "No part column specified" -msgstr "" - -#: part/serializers.py:1253 -msgid "Multiple matching parts found" -msgstr "" +msgstr "Remover Dado Existente" #: part/serializers.py:1256 -msgid "No matching part found" -msgstr "" +msgid "Remove existing BOM items before copying" +msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1259 -msgid "Part is not designated as a component" -msgstr "" +#: part/serializers.py:1261 +msgid "Include Inherited" +msgstr "Incluir Herdados" + +#: part/serializers.py:1262 +msgid "Include BOM items which are inherited from templated parts" +msgstr "Incluir itens LDM que são herdados de peças modelo" + +#: part/serializers.py:1267 +msgid "Skip Invalid Rows" +msgstr "Pular Linhas inválidas" #: part/serializers.py:1268 +msgid "Enable this option to skip invalid rows" +msgstr "Habilitar esta opção para pular linhas inválidas" + +#: part/serializers.py:1273 +msgid "Copy Substitute Parts" +msgstr "Copiar Peças Substitutas" + +#: part/serializers.py:1274 +msgid "Copy substitute parts when duplicate BOM items" +msgstr "Copiar peças de substitutas quando duplicar itens de LDM" + +#: part/serializers.py:1314 +msgid "Clear Existing BOM" +msgstr "Limpar LDM Existente" + +#: part/serializers.py:1315 +msgid "Delete existing BOM items before uploading" +msgstr "Apagar itens LDM existentes antes de carregar" + +#: part/serializers.py:1345 +msgid "No part column specified" +msgstr "Nenhuma coluna de peça especificada" + +#: part/serializers.py:1388 +msgid "Multiple matching parts found" +msgstr "Múltiplas peças correspondentes encontradas" + +#: part/serializers.py:1391 +msgid "No matching part found" +msgstr "Nenhuma peça correspondente encontrada" + +#: part/serializers.py:1394 +msgid "Part is not designated as a component" +msgstr "Peça não está designada como componente" + +#: part/serializers.py:1403 msgid "Quantity not provided" -msgstr "" +msgstr "Quantidade não foi fornecida" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" -msgstr "" +msgstr "Quantidade Inválida" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" -msgstr "" +msgstr "Pelo menos um item LDM é necessário" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" -msgstr "" +msgstr "Notificação de estoque baixo" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" +msgstr "O estoque disponível para {part.name} caiu abaixo do nível mínimo definido" + +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "Quantidade Total" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "Custo Min Total" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "Custo Max Total" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "Balanço de Estoque Disponível" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "Um novo relatório de balanço do estoque está disponível para baixar" #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." -msgstr "" +msgstr "Você não tem permissões para editar a LDM." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 #, python-format msgid "The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" -msgstr "" +msgstr "A LDM de %(part)s foi verificada pela última vez por %(checker)s em %(check_date)s" #: part/templates/part/bom.html:21 #, python-format msgid "The BOM for %(part)s has not been validated." -msgstr "" +msgstr "A LDM para %(part)s não foi validada." -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" -msgstr "" +msgstr "Ações da LDM" #: part/templates/part/bom.html:34 msgid "Delete Items" -msgstr "" +msgstr "Excluir itens" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "Fazer balanço de estoque para esta categoria de peça" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" -msgstr "" - -#: part/templates/part/category.html:42 -msgid "Subscribe to notifications for this category" -msgstr "" +msgstr "Você está inscrito para notificações desta categoria" #: part/templates/part/category.html:48 -msgid "Category Actions" -msgstr "" - -#: part/templates/part/category.html:53 -msgid "Edit category" -msgstr "" +msgid "Subscribe to notifications for this category" +msgstr "Inscrever-se para notificações desta categoria" #: part/templates/part/category.html:54 -msgid "Edit Category" -msgstr "" - -#: part/templates/part/category.html:58 -msgid "Delete category" -msgstr "" +msgid "Category Actions" +msgstr "Ações de Categoria" #: part/templates/part/category.html:59 +msgid "Edit category" +msgstr "Editar categoria" + +#: part/templates/part/category.html:60 +msgid "Edit Category" +msgstr "Editar Categoria" + +#: part/templates/part/category.html:64 +msgid "Delete category" +msgstr "Excluir categoria" + +#: part/templates/part/category.html:65 msgid "Delete Category" -msgstr "" +msgstr "Excluir Categoria" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" -msgstr "" +msgstr "Categoria de peça de nível superior" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" -msgstr "" +msgstr "Sub-categorias" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" -msgstr "" +msgstr "Peças (incluindo subcategorias)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" -msgstr "" +msgstr "Criar nova peça" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" -msgstr "" +msgstr "Nova Peça" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" -msgstr "" +msgstr "Opções" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" -msgstr "" +msgstr "Definir categoria" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" -msgstr "" +msgstr "Definir Categoria" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" -msgstr "" - -#: part/templates/part/category.html:228 -msgid "Create new part category" -msgstr "" +msgstr "Parâmetros da Peça" #: part/templates/part/category.html:229 -msgid "New Category" -msgstr "" +msgid "Create new part category" +msgstr "Criar categoria de peça" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:230 +msgid "New Category" +msgstr "Nova Categoria" + +#: part/templates/part/category.html:347 msgid "Create Part Category" -msgstr "" +msgstr "Criar Categoria de Peça" #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" -msgstr "" +msgstr "Importar Peças" #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." -msgstr "" +msgstr "Faça uma cópia da peça '%(full_name)s'." #: part/templates/part/copy_part.html:14 #: part/templates/part/create_part.html:11 msgid "Possible Matching Parts" -msgstr "" +msgstr "Possíveis peças correspondentes" #: part/templates/part/copy_part.html:15 #: part/templates/part/create_part.html:12 msgid "The new part may be a duplicate of these existing parts" -msgstr "" +msgstr "A nova peça pode ser uma duplicata dessas peças existentes" #: part/templates/part/create_part.html:17 #, python-format msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "" +msgstr "%(full_name)s - %(desc)s (%(match_per)s%% correspondência)" #: part/templates/part/detail.html:20 msgid "Part Stock" -msgstr "" +msgstr "Estoque da Peça" #: part/templates/part/detail.html:44 msgid "Refresh scheduling data" -msgstr "" +msgstr "Atualizar dados de agendamento" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" -msgstr "" +msgstr "Recarregar" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" -msgstr "" +msgstr "Adicionar informações de balanço de estoque" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" -msgstr "" +msgstr "Balanço" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" -msgstr "" +msgstr "Modelos de Teste de Peça" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" -msgstr "" +msgstr "Adicionar Modelo de Teste" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" -msgstr "" +msgstr "Alocações do Pedido de Vendas" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" -msgstr "" +msgstr "Notas de Peça" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" -msgstr "" - -#: part/templates/part/detail.html:183 -msgid "Create new variant" -msgstr "" +msgstr "Variantes de Peça" #: part/templates/part/detail.html:184 +msgid "Create new variant" +msgstr "Criar variante" + +#: part/templates/part/detail.html:185 msgid "New Variant" -msgstr "" +msgstr "Nova Variação" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" -msgstr "" +msgstr "Adicionar um novo parâmetro" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" -msgstr "" +msgstr "Peças Relacionadas" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" -msgstr "" +msgstr "Adicionar Relacionado" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "" +msgstr "Lista de Materiais" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" -msgstr "" +msgstr "Exportar Ações" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" -msgstr "" +msgstr "Exportar LDM" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" -msgstr "" +msgstr "Imprimir Relatório da LDM" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" -msgstr "" +msgstr "Carregar LDM" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" -msgstr "" +msgstr "Validar LDM" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" -msgstr "" +msgstr "Adicionar Item LDM" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" -msgstr "" +msgstr "Montagens" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" -msgstr "" +msgstr "Produções de peça" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" -msgstr "" +msgstr "Alocações de Pedido de Produção" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" -msgstr "" +msgstr "Fornecedores da peça" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" -msgstr "" +msgstr "Fabricantes da peça" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" -msgstr "" +msgstr "Apagar peças do fabricante" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" -msgstr "" +msgstr "Peça Relacionada" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" -msgstr "" +msgstr "Adicionar peça relacionada" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" -msgstr "" +msgstr "Adicionar Modelo de Resultado de Teste" #: part/templates/part/import_wizard/ajax_part_upload.html:29 #: part/templates/part/import_wizard/part_upload.html:14 msgid "Insufficient privileges." -msgstr "" +msgstr "Permissões insuficientes." #: part/templates/part/import_wizard/part_upload.html:8 msgid "Return to Parts" -msgstr "" +msgstr "Retornar para Peças" #: part/templates/part/import_wizard/part_upload.html:13 msgid "Import Parts from File" -msgstr "" +msgstr "Importar Peças de um Arquivo" #: part/templates/part/import_wizard/part_upload.html:31 msgid "Requirements for part import" -msgstr "" +msgstr "Requerimentos para importar peça" #: part/templates/part/import_wizard/part_upload.html:33 msgid "The part import file must contain the required named columns as provided in the " -msgstr "" +msgstr "O arquivo para importar peças deve conter as colunas nomeadas como fornecido na " #: part/templates/part/import_wizard/part_upload.html:33 msgid "Part Import Template" -msgstr "" +msgstr "Modelo de importação de Peças" #: part/templates/part/import_wizard/part_upload.html:89 msgid "Download Part Import Template" -msgstr "" +msgstr "Baixar Modelo de Importação de Peça" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" -msgstr "" +msgstr "Formato" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" -msgstr "" +msgstr "Selecione o formato de arquivo" #: part/templates/part/part_app_base.html:12 msgid "Part List" -msgstr "" +msgstr "Lista de Peças" #: part/templates/part/part_base.html:27 part/templates/part/part_base.html:31 msgid "You are subscribed to notifications for this part" -msgstr "" +msgstr "Você está inscrito para notificações desta peça" #: part/templates/part/part_base.html:35 msgid "Subscribe to notifications for this part" -msgstr "" +msgstr "Inscrever-se para notificações desta peça" #: part/templates/part/part_base.html:49 msgid "Unink Barcode" -msgstr "" +msgstr "Desatribuir Código de Barras" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" -msgstr "" +msgstr "Imprimir Etiqueta" #: part/templates/part/part_base.html:60 msgid "Show pricing information" -msgstr "" +msgstr "Mostrar informações de preços" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" -msgstr "" +msgstr "Ações de Estoque" #: part/templates/part/part_base.html:72 msgid "Count part stock" -msgstr "" +msgstr "Contagem peça em estoque" #: part/templates/part/part_base.html:78 msgid "Transfer part stock" -msgstr "" +msgstr "Transferir estoque de peça" #: part/templates/part/part_base.html:93 msgid "Part actions" -msgstr "" +msgstr "Ações de peça" #: part/templates/part/part_base.html:96 msgid "Duplicate part" -msgstr "" +msgstr "Peça duplicada" #: part/templates/part/part_base.html:99 msgid "Edit part" -msgstr "" +msgstr "Editar peça" #: part/templates/part/part_base.html:102 msgid "Delete part" -msgstr "" +msgstr "Excluir peça" #: part/templates/part/part_base.html:121 msgid "Part is a template part (variants can be made from this part)" -msgstr "" +msgstr "Esta é uma peça modelo (as variantes podem ser feitas a partir desta peça)" #: part/templates/part/part_base.html:125 msgid "Part can be assembled from other parts" -msgstr "" +msgstr "Peças pode ser montada a partir de outras peças" #: part/templates/part/part_base.html:129 msgid "Part can be used in assemblies" -msgstr "" +msgstr "Peça pode ser usada em montagens" #: part/templates/part/part_base.html:133 msgid "Part stock is tracked by serial number" -msgstr "" +msgstr "Peça em estoque é controlada por número de série" #: part/templates/part/part_base.html:137 msgid "Part can be purchased from external suppliers" -msgstr "" +msgstr "Peça pode ser comprada de fornecedores externos" #: part/templates/part/part_base.html:141 msgid "Part can be sold to customers" -msgstr "" +msgstr "Peça pode ser vendida a clientes" #: part/templates/part/part_base.html:147 -#: part/templates/part/part_base.html:155 -msgid "Part is virtual (not a physical part)" -msgstr "" +msgid "Part is not active" +msgstr "Item bloqueado" #: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 msgid "Inactive" -msgstr "" +msgstr "Inativo" + +#: part/templates/part/part_base.html:155 +msgid "Part is virtual (not a physical part)" +msgstr "Peça é virtual (não é algo físico)" #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" -msgstr "" +msgstr "Mostrar Detalhes de Peça" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" -msgstr "" +msgstr "Alocado para Pedidos de Construção" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "Alocado para Pedidos de Venda" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" -msgstr "" +msgstr "Pode Produzir" #: part/templates/part/part_base.html:293 msgid "Minimum stock level" -msgstr "" +msgstr "Nível mínimo de estoque" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" -msgstr "" +msgstr "Faixa de Preço" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" -msgstr "" +msgstr "Último Número de Série" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" -msgstr "" +msgstr "Procurar por número serial" + +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "QR Code da Peça" #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" -msgstr "" +msgstr "Vincular Código de Barras à Peça" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" -msgstr "" +msgstr "Calcular" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" -msgstr "" +msgstr "Remover imagem associada a esta peça" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" -msgstr "" +msgstr "Nenhuma imagem correspondente encontrada" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" -msgstr "" +msgstr "Esconder Detalhes da Peça" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" -msgstr "" +msgstr "Preço do fornecedor" #: part/templates/part/part_pricing.html:26 #: part/templates/part/part_pricing.html:52 #: part/templates/part/part_pricing.html:95 #: part/templates/part/part_pricing.html:110 msgid "Unit Cost" -msgstr "" - -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" +msgstr "Custo unitário" #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" -msgstr "" +msgstr "Nenhuma informação dos preços do fornecedor disponível" #: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:87 #: part/templates/part/prices.html:240 msgid "BOM Pricing" -msgstr "" +msgstr "Preço LDM" #: part/templates/part/part_pricing.html:66 msgid "Unit Purchase Price" -msgstr "" +msgstr "Preço Unitário de Compra" #: part/templates/part/part_pricing.html:72 msgid "Total Purchase Price" -msgstr "" +msgstr "Preço Total de Compra" #: part/templates/part/part_pricing.html:83 msgid "No BOM pricing available" -msgstr "" +msgstr "Preços LDM indisponíveis" #: part/templates/part/part_pricing.html:92 msgid "Internal Price" -msgstr "" +msgstr "Preço Interno" #: part/templates/part/part_pricing.html:123 msgid "No pricing information is available for this part." -msgstr "" +msgstr "Nenhuma informação de preço está disponível para esta peça." #: part/templates/part/part_scheduling.html:14 msgid "Scheduled Quantity" -msgstr "" +msgstr "Quantidade Agendada" #: part/templates/part/part_sidebar.html:11 msgid "Variants" -msgstr "" +msgstr "Variantes" + +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Estoque" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Preços" #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" -msgstr "" +msgstr "Agendamento" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" -msgstr "" +msgstr "Testar Modelos" #: part/templates/part/part_thumb.html:11 msgid "Select from existing images" -msgstr "" +msgstr "Selecionar de imagens existentes" #: part/templates/part/prices.html:11 msgid "Pricing Overview" -msgstr "" +msgstr "Resumo de Preços" #: part/templates/part/prices.html:14 msgid "Refresh Part Pricing" -msgstr "" +msgstr "Atualizar Preço da Peça" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" -msgstr "" +msgstr "Última atualização" #: part/templates/part/prices.html:34 part/templates/part/prices.html:116 msgid "Price Category" -msgstr "" +msgstr "Categoria de preço" #: part/templates/part/prices.html:35 part/templates/part/prices.html:117 msgid "Minimum" -msgstr "" +msgstr "Mínimo" #: part/templates/part/prices.html:36 part/templates/part/prices.html:118 msgid "Maximum" -msgstr "" +msgstr "Máximo" #: part/templates/part/prices.html:48 part/templates/part/prices.html:163 msgid "Internal Pricing" -msgstr "" +msgstr "Preço Interno" #: part/templates/part/prices.html:61 part/templates/part/prices.html:195 msgid "Purchase History" -msgstr "" +msgstr "Histórico de Compras" #: part/templates/part/prices.html:95 part/templates/part/prices.html:264 msgid "Variant Pricing" -msgstr "" +msgstr "Preço Variável" #: part/templates/part/prices.html:102 msgid "Overall Pricing" -msgstr "" +msgstr "Preços Gerais" #: part/templates/part/prices.html:138 part/templates/part/prices.html:316 msgid "Sale History" -msgstr "" +msgstr "Histórico de vendas" #: part/templates/part/prices.html:146 msgid "Sale price data is not available for this part" -msgstr "" +msgstr "Dados de preço de venda não estão disponíveis para esta peça" #: part/templates/part/prices.html:153 msgid "Price range data is not available for this part." -msgstr "" +msgstr "Dados do intervalo de preços não estão disponíveis para esta peça." #: part/templates/part/prices.html:164 part/templates/part/prices.html:196 #: part/templates/part/prices.html:217 part/templates/part/prices.html:241 #: part/templates/part/prices.html:265 part/templates/part/prices.html:288 #: part/templates/part/prices.html:317 msgid "Jump to overview" -msgstr "" +msgstr "Ir para visão geral" #: part/templates/part/prices.html:169 msgid "Add Internal Price Break" -msgstr "" +msgstr "Adicionar intervalo de preço interno" #: part/templates/part/prices.html:287 msgid "Sale Pricing" -msgstr "" +msgstr "Preço de Venda" #: part/templates/part/prices.html:293 msgid "Add Sell Price Break" -msgstr "" +msgstr "Adicionar intervalo de preço de venda" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" -msgstr "" +msgstr "Sem Estoque" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:158 msgid "Low Stock" -msgstr "" +msgstr "Estoque Baixo" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" -msgstr "" +msgstr "Voltar à LDM" #: part/templates/part/upload_bom.html:13 msgid "Upload Bill of Materials" -msgstr "" +msgstr "Carregar a Lista de materiais" #: part/templates/part/upload_bom.html:19 msgid "BOM upload requirements" -msgstr "" +msgstr "Requisitos para carregar LDM" #: part/templates/part/upload_bom.html:23 #: part/templates/part/upload_bom.html:90 msgid "Upload BOM File" -msgstr "" +msgstr "Carregar Arquivo LDM" #: part/templates/part/upload_bom.html:29 msgid "Submit BOM Data" -msgstr "" +msgstr "Enviar Dados LDM" #: part/templates/part/upload_bom.html:37 msgid "Requirements for BOM upload" -msgstr "" +msgstr "Requisitos para carregar a LDM" #: part/templates/part/upload_bom.html:39 msgid "The BOM file must contain the required named columns as provided in the " -msgstr "" +msgstr "O arquivo da LDM deve conter as colunas nomeadas como fornecido na " #: part/templates/part/upload_bom.html:39 msgid "BOM Upload Template" -msgstr "" +msgstr "Carregar Modelo de LDM" #: part/templates/part/upload_bom.html:40 msgid "Each part must already exist in the database" -msgstr "" +msgstr "Cada peça deve existir no banco de dados" #: part/templates/part/variant_part.html:9 msgid "Create new part variant" -msgstr "" +msgstr "Criar variante de peça" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" -msgstr "" +msgstr "Banco de dados desconhecido" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" -msgstr "" +msgstr "{title} v{version}" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" -msgstr "" +msgstr "Referências de combinações" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" -msgstr "" +msgstr "Não é possível importar a peça {name} pois não há uma categoria atribuída" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" -msgstr "" +msgstr "Selecionar Imagem da Peça" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" -msgstr "" +msgstr "Atualizar imagem da peça" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" -msgstr "" +msgstr "Imagem da peça não encontrada" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" -msgstr "" +msgstr "Preço Peça" #: plugin/apps.py:55 msgid "Your environment has an outdated git version. This prevents InvenTree from loading plugin details." -msgstr "" +msgstr "Seu ambiente tem uma versão git desatualizada. Isto impede que o InvenTree carregue detalhes da extensão." #: plugin/base/action/api.py:27 msgid "No action specified" @@ -6365,677 +6903,748 @@ msgstr "Nenhuma ação correspondente encontrada" #: plugin/base/barcodes/api.py:54 plugin/base/barcodes/api.py:110 msgid "Missing barcode data" -msgstr "" +msgstr "Faltando dados do código de barras" #: plugin/base/barcodes/api.py:80 msgid "No match found for barcode data" -msgstr "" +msgstr "Nenhum resultado encontrado para os dados do código de barras" #: plugin/base/barcodes/api.py:84 msgid "Match found for barcode data" -msgstr "" +msgstr "Coincidência encontrada para dados de código de barras" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" -msgstr "" +msgstr "Código de barras corresponde ao item existente" #: plugin/base/barcodes/api.py:217 msgid "No match found for provided value" -msgstr "" +msgstr "Nenhuma correspondência encontrada para o valor fornecido" #: plugin/base/label/label.py:60 msgid "Label printing failed" -msgstr "" +msgstr "Impressão de etiqueta falhou" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "Provides native support for barcodes" -msgstr "" +msgstr "Códigos de Barras InvenTree" #: plugin/builtin/barcodes/inventree_barcode.py:29 +msgid "Provides native support for barcodes" +msgstr "Fornece suporte nativo para códigos de barras" + +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" -msgstr "" +msgstr "Contribuidores do InvenTree" #: plugin/builtin/integration/core_notifications.py:32 msgid "InvenTree Notifications" -msgstr "" +msgstr "Notificações do InvenTree" #: plugin/builtin/integration/core_notifications.py:34 msgid "Integrated outgoing notificaton methods" -msgstr "" +msgstr "Métodos de envio de notificação integrados" #: plugin/builtin/integration/core_notifications.py:39 #: plugin/builtin/integration/core_notifications.py:80 msgid "Enable email notifications" -msgstr "" +msgstr "Habilitar notificações por email" #: plugin/builtin/integration/core_notifications.py:40 #: plugin/builtin/integration/core_notifications.py:81 msgid "Allow sending of emails for event notifications" -msgstr "" +msgstr "Permitir enviar emails para notificações de eventos" #: plugin/builtin/integration/core_notifications.py:45 msgid "Enable slack notifications" -msgstr "" +msgstr "Habilitar notificações por Slack" #: plugin/builtin/integration/core_notifications.py:46 msgid "Allow sending of slack channel messages for event notifications" -msgstr "" +msgstr "Permitir envio de notificações de eventos pelo canal de mensagens do slack" #: plugin/builtin/integration/core_notifications.py:51 msgid "Slack incoming webhook url" -msgstr "" +msgstr "Link do gancho de entrada do Slack" #: plugin/builtin/integration/core_notifications.py:52 msgid "URL that is used to send messages to a slack channel" -msgstr "" +msgstr "URL usada para enviar mensagens para um canal do Slack" #: plugin/builtin/integration/core_notifications.py:162 msgid "Open link" -msgstr "" +msgstr "Abrir link" #: plugin/models.py:33 msgid "Plugin Metadata" -msgstr "" +msgstr "Metadados da Extensão" #: plugin/models.py:34 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "Campo de metadados JSON, para uso por extensões externas" #: plugin/models.py:80 msgid "Plugin Configuration" -msgstr "" +msgstr "Configuração de Extensão" #: plugin/models.py:81 msgid "Plugin Configurations" -msgstr "" +msgstr "Configuração de Extensões" #: plugin/models.py:86 templates/InvenTree/settings/plugin.html:61 msgid "Key" -msgstr "" +msgstr "Chave" #: plugin/models.py:87 msgid "Key of plugin" -msgstr "" +msgstr "Chave da extensão" #: plugin/models.py:95 msgid "PluginName of the plugin" -msgstr "" +msgstr "Nome da Extensão" #: plugin/models.py:101 msgid "Is the plugin active" -msgstr "" +msgstr "O plug-in está ativo" #: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 msgid "Unvailable" -msgstr "" +msgstr "Indisponível" #: plugin/models.py:164 msgid "Sample plugin" -msgstr "" +msgstr "Plug-in de exemplo" #: plugin/models.py:173 msgid "Builtin Plugin" -msgstr "" +msgstr "Plugin embutido" #: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" -msgstr "" +msgstr "Extensões" #: plugin/models.py:263 msgid "Method" -msgstr "" +msgstr "Método" #: plugin/plugin.py:257 msgid "No author found" -msgstr "" +msgstr "Nenhum autor encontrado" #: plugin/plugin.py:269 msgid "No date found" -msgstr "" +msgstr "Nenhum dado encontrado" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" -msgstr "" - -#: plugin/registry.py:446 +#: plugin/registry.py:452 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 msgid "Enable PO" -msgstr "" +msgstr "Ativar PO" #: plugin/samples/integration/sample.py:40 msgid "Enable PO functionality in InvenTree interface" -msgstr "" +msgstr "Ativar a funcionalidade PO na interface InvenTree" #: plugin/samples/integration/sample.py:45 msgid "API Key" -msgstr "" +msgstr "Chave API" #: plugin/samples/integration/sample.py:46 msgid "Key required for accessing external API" -msgstr "" +msgstr "Chave necessária para acesso à API externa" #: plugin/samples/integration/sample.py:49 msgid "Numerical" -msgstr "" +msgstr "Numérico" #: plugin/samples/integration/sample.py:50 msgid "A numerical setting" -msgstr "" +msgstr "Uma configuração numérica" #: plugin/samples/integration/sample.py:55 msgid "Choice Setting" -msgstr "" +msgstr "Configurações de Escolha" #: plugin/samples/integration/sample.py:56 msgid "A setting with multiple choices" -msgstr "" +msgstr "Uma configuração com várias escolhas" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" -msgstr "" - -#: plugin/serializers.py:73 -msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" - -#: plugin/serializers.py:78 -msgid "Package Name" -msgstr "" - -#: plugin/serializers.py:79 -msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" +msgstr "URL de origem" #: plugin/serializers.py:82 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "Fonte do pacote — este pode ser um registro personalizado ou um caminho de VCS" + +#: plugin/serializers.py:87 +msgid "Package Name" +msgstr "Nome do Pacote" + +#: plugin/serializers.py:88 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "Nome para o Pacote da Extensão — também pode conter um indicador de versão" + +#: plugin/serializers.py:91 msgid "Confirm plugin installation" -msgstr "" +msgstr "Confirmar instalação da extensão" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" +msgstr "Isto instalará a extensão agora na instância atual. A instância irá entrar em manutenção." -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" -msgstr "" +msgstr "Instalação não confirmada" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" -msgstr "" +msgstr "Qualquer nome do pacote URL deve ser fornecido" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" -msgstr "" +msgstr "Nenhum objeto válido fornecido para o modelo" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" -msgstr "" +msgstr "Arquivo modelo '{template}' perdido ou não existe" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" -msgstr "" - -#: report/models.py:153 -msgid "Template name" -msgstr "" +msgstr "Relatório de teste" #: report/models.py:159 -msgid "Report template file" -msgstr "" +msgid "Template name" +msgstr "Nome do modelo" -#: report/models.py:166 -msgid "Report template description" -msgstr "" +#: report/models.py:165 +msgid "Report template file" +msgstr "Arquivo modelo de relatório" #: report/models.py:172 +msgid "Report template description" +msgstr "Descrição do modelo de relatório" + +#: report/models.py:178 msgid "Report revision number (auto-increments)" -msgstr "" +msgstr "Relatar número de revisão (auto-incrementos)" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" -msgstr "" +msgstr "Padrão para gerar nomes de arquivo de relatórios" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" -msgstr "" +msgstr "Modelo de relatório Habilitado" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "Filtros de consulta de itens de estoque(lista de valores separados por vírgula)" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" -msgstr "" +msgstr "Incluir testes instalados" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" -msgstr "" +msgstr "Incluir resultados de testes para itens de estoque instalados dentro de item montado" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" -msgstr "" +msgstr "Filtros de Produção" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "" +msgstr "Filtros de consulta de produção (lista de valores separados por vírgula" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" -msgstr "" +msgstr "Filtros de Peças" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "" +msgstr "Filtros de consulta de peças (lista de valores separados por vírgula" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" -msgstr "" +msgstr "Filtros de consultas de pedidos de compra" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" -msgstr "" +msgstr "Filtros de consultas de pedidos de venda" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "Filtrar pesquisa de itens devolvidos" + +#: report/models.py:573 msgid "Snippet" -msgstr "" +msgstr "Recorte" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" -msgstr "" +msgstr "Relatar arquivo de recorte" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" -msgstr "" +msgstr "Descrição do arquivo de recorte" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" -msgstr "" +msgstr "Ativos" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" -msgstr "" +msgstr "Reportar arquivo de ativos" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" -msgstr "" +msgstr "Descrição do arquivo de ativos" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "" +msgstr "Materiais necessários" #: report/templates/report/inventree_build_order_base.html:146 msgid "Required For" -msgstr "" +msgstr "Necessário para" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" -msgstr "" +msgstr "Fornecedor foi excluído" + +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "Preço unitário" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "Extra Itens de Linha" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "Total" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Número de Sério" #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" -msgstr "" +msgstr "Relatório Teste do Item em Estoque" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" -msgstr "" +msgstr "Resultados do teste" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" -msgstr "" +msgstr "Teste" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" -msgstr "" +msgstr "Resultado" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" -msgstr "" +msgstr "Aprovado" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" -msgstr "" +msgstr "Não Aprovado" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "Sem resultado (obrigatório)" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "Nenhum resultado" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" -msgstr "" +msgstr "Itens instalados" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" -msgstr "" +msgstr "Série" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" -msgstr "" +msgstr "ID do local" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" -msgstr "" +msgstr "Nome do Local" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" -msgstr "" - -#: stock/admin.py:83 -msgid "Stock Item ID" -msgstr "" - -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 -msgid "Supplier Part ID" -msgstr "" - -#: stock/admin.py:93 -msgid "Supplier ID" -msgstr "" - -#: stock/admin.py:94 -msgid "Supplier Name" -msgstr "" - -#: stock/admin.py:95 -msgid "Customer ID" -msgstr "" - -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 -msgid "Installed In" -msgstr "" - -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 -msgid "Build ID" -msgstr "" - -#: stock/admin.py:99 -msgid "Sales Order ID" -msgstr "" +msgstr "Caminho do local" #: stock/admin.py:100 +msgid "Stock Item ID" +msgstr "ID do item estoque" + +#: stock/admin.py:107 +msgid "Status Code" +msgstr "Código da situação" + +#: stock/admin.py:110 +msgid "Supplier Part ID" +msgstr "Número da Peça do Fornecedor" + +#: stock/admin.py:111 +msgid "Supplier ID" +msgstr "ID do Fornecedor" + +#: stock/admin.py:112 +msgid "Supplier Name" +msgstr "Nome do Fornecedor" + +#: stock/admin.py:113 +msgid "Customer ID" +msgstr "ID Cliente" + +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 +msgid "Installed In" +msgstr "Instalado em" + +#: stock/admin.py:115 +msgid "Build ID" +msgstr "ID da Produção" + +#: stock/admin.py:117 +msgid "Sales Order ID" +msgstr "ID do pedido de venda" + +#: stock/admin.py:118 msgid "Purchase Order ID" -msgstr "" +msgstr "ID da ordem de compra" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "Revisão Necessária" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "Excluir quando esgotado" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" -msgstr "" +msgstr "Data de validade" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "Localização externa" + +#: stock/api.py:570 msgid "Quantity is required" -msgstr "" +msgstr "Quantidade obrigatória" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" -msgstr "" +msgstr "Uma peça válida deve ser fornecida" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "Números de série não podem ser fornecidos para uma parte não rastreável" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" -msgstr "" +msgstr "Localizacao do estoque" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Locais de estoque" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "Responsavel" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "Selecionar Responsável" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "Os itens de estoque podem não estar diretamente localizados em um local de estoque estrutural, mas podem ser localizados em locais filhos." + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "Externo" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "Esta é uma localização de estoque externo" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "Você não pode tornar este local do estoque estrutural, pois alguns itens de estoque já estão localizados nele!" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "Os itens de estoque não podem estar localizados em locais de estoque estrutural!" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "Item de estoque não pode ser criado para peças virtuais" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "Tipo da peça ('{pf}') deve ser {pe}" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "A quantidade deve ser 1 para um item com número de série" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "Número de série não pode ser definido se quantidade maior que 1" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "O item não pode pertencer a si mesmo" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "Item deve ter uma referência de produção se is_building=True" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "Referência de produção não aponta ao mesmo objeto da peça" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Item de Estoque Parental" + +#: stock/models.py:670 +msgid "Base part" +msgstr "Peça base" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Selecione uma peça do fornecedor correspondente para este item de estoque" + +#: stock/models.py:688 msgid "Where is this stock item located?" -msgstr "" +msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" -msgstr "" +msgstr "Embalagem deste item de estoque está armazenado em" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" -msgstr "" +msgstr "Este item está instalado em outro item?" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" -msgstr "" - -#: stock/models.py:722 -msgid "Batch code for this stock item" -msgstr "" - -#: stock/models.py:727 -msgid "Stock Quantity" -msgstr "" +msgstr "Número de série para este item" #: stock/models.py:734 +msgid "Batch code for this stock item" +msgstr "Código do lote para este item de estoque" + +#: stock/models.py:739 +msgid "Stock Quantity" +msgstr "Quantidade de Estoque" + +#: stock/models.py:746 msgid "Source Build" -msgstr "" +msgstr "Produção de Origem" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" -msgstr "" +msgstr "Produção para este item de estoque" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" -msgstr "" +msgstr "Pedido de compra Fonte" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" -msgstr "" +msgstr "Pedido de Compra para este item de estoque" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" -msgstr "" +msgstr "Destino do Pedido de Venda" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "Data de validade para o item de estoque. Estoque será considerado expirado após este dia" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" -msgstr "" +msgstr "Excluir quando esgotado" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "Excluir este item de estoque quando o estoque for esgotado" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" -msgstr "" +msgstr "Notas de Item Estoque" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "Preço de compra unitário único no momento da compra" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" -msgstr "" +msgstr "Convertido para peça" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" -msgstr "" +msgstr "Peça não está definida como rastreável" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" -msgstr "" +msgstr "Quantidade deve ser inteira" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" -msgstr "" +msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({n})" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" -msgstr "" +msgstr "Números de série devem ser uma lista de números inteiros" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" +msgstr "A quantidade não corresponde aos números de série" + +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" - -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "Item em estoque foi reservado para um pedido" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" -msgstr "" +msgstr "Item em estoque está instalado em outro item" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" -msgstr "" +msgstr "item em estoque contem outro(s) items" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" -msgstr "" +msgstr "Item em estoque foi reservado para outro cliente" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" -msgstr "" +msgstr "Item no estoque está em produção no momento" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" -msgstr "" +msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" -msgstr "" +msgstr "Item de estoque duplicado" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" -msgstr "" +msgstr "Itens de estoque devem se referir à mesma peça" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" -msgstr "" +msgstr "Itens de estoque devem se referir à mesma peça do fornecedor" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" -msgstr "" +msgstr "Códigos de estado do estoque devem corresponder" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" -msgstr "" +msgstr "Item do estoque não pode ser realocado se não houver estoque da mesma" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" -msgstr "" +msgstr "Observações de entrada" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" -msgstr "" +msgstr "Deve-se fornecer o valor desse teste" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" -msgstr "" +msgstr "O anexo deve ser enviado para este teste" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" -msgstr "" +msgstr "Nome de teste" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" -msgstr "" +msgstr "Permitir estado incompatível" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" -msgstr "" +msgstr "Permitir a fusão de itens de estoque com estado diferentes" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,186 +7836,194 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" -msgstr "" +msgstr "Adicionar estoque" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" -msgstr "" +msgstr "Remover estoque" #: stock/templates/stock/item_base.html:86 msgid "Serialize stock" -msgstr "" +msgstr "Serializar estoque" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" -msgstr "" +msgstr "Transferir estoque" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" -msgstr "" +msgstr "Disponibilizar para o cliente" #: stock/templates/stock/item_base.html:95 msgid "Return to stock" -msgstr "" +msgstr "Devolver ao estoque" #: stock/templates/stock/item_base.html:98 msgid "Uninstall stock item" -msgstr "" +msgstr "Desinstalar o item do estoque" #: stock/templates/stock/item_base.html:98 msgid "Uninstall" -msgstr "" +msgstr "Desinstalar" #: stock/templates/stock/item_base.html:102 msgid "Install stock item" -msgstr "" +msgstr "Instalar item do estoque" #: stock/templates/stock/item_base.html:102 msgid "Install" -msgstr "" +msgstr "Instalar" #: stock/templates/stock/item_base.html:116 msgid "Convert to variant" -msgstr "" +msgstr "Converter em variante" #: stock/templates/stock/item_base.html:119 msgid "Duplicate stock item" -msgstr "" +msgstr "Duplicar item" #: stock/templates/stock/item_base.html:121 msgid "Edit stock item" -msgstr "" +msgstr "Editar item de estoque" #: stock/templates/stock/item_base.html:124 msgid "Delete stock item" -msgstr "" +msgstr "Excluir item de estoque" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" -msgstr "" +msgstr "Item Primário" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" -msgstr "" +msgstr "Nenhum fabricante definido" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." -msgstr "" +msgstr "Vc não está autorizado a editar esse item." -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" -msgstr "" +msgstr "Somente leitura" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "Este item não está disponível no estoque" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." -msgstr "" +msgstr "Este item de estoque está em produção e não pode ser editado." -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." -msgstr "" +msgstr "Edite este item usando o formulário de construçao." -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" -msgstr "" +msgstr "Inativo" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" -msgstr "" +msgstr "Nenhum balanço feito" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" +msgstr "Editar Situação do Estoque" + +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "Fazer balanço para o estoque deste local" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7600,7 +8213,7 @@ msgstr "" #: templates/InvenTree/index.html:202 msgid "Stale Stock" -msgstr "" +msgstr "Estoque Inativo" #: templates/InvenTree/index.html:224 msgid "Build Orders In Progress" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "Apagar notificações" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "Configurações de Balanço" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "Relatório de Balanço" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7882,7 +8509,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:127 msgid "Sign Status" -msgstr "" +msgstr "Placa da Situação" #: templates/InvenTree/settings/plugin_settings.html:132 msgid "Sign Key" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Confirmar" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "Identificador de Código de Barras" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" -msgstr "" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." +msgstr "Programar geração de um novo relatório de balanço." -#: templates/js/translated/part.js:744 -msgid "Update item" -msgstr "" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." +msgstr "Uma vez concluído, o relatório de estoque estará disponível para baixar." -#: templates/js/translated/part.js:745 -msgid "Delete item" -msgstr "" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" +msgstr "Gerar Relatório de Balanço" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "Relatório de balanço agendado" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" -msgstr "" +msgstr "Nenhuma informação de balanço disponível" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" -msgstr "" +msgstr "Editar Lançamento de Balanço" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" -msgstr "" +msgstr "Apagar Lançamento de Balanço" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "Situação do Estoque" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "Envios concluídos" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" -msgstr "" +msgstr "Definir Estado do Estoque" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" -msgstr "" +msgstr "Selecionar Código de Situação" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" -msgstr "" +msgstr "Código de Situação deve ser selecionado" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" -msgstr "" +msgstr "Situação dos Pedidos" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "Estado do Estoque" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "Estado da Produção" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" -msgstr "" +msgstr "Tem entradas em balanço" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11405,7 +12103,7 @@ msgstr "" #: templates/stats.html:52 msgid "Server status" -msgstr "" +msgstr "Estado do Servidor" #: templates/stats.html:55 msgid "Healthy" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" -msgstr "" +msgstr "Fazer balanço de itens do estoque selecionados" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" -msgstr "" +msgstr "Alterar a situação" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" -msgstr "" +msgstr "Alterar a situação do estoque" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" -msgstr "" +msgstr "Grupo" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/pt_br/LC_MESSAGES/django.po b/InvenTree/locale/pt_br/LC_MESSAGES/django.po index 54eedf5a69..b4a9227c68 100644 --- a/InvenTree/locale/pt_br/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt_br/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-09 10:12+0000\n" +"POT-Creation-Date: 2023-04-17 14:52+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,11 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -30,52 +34,55 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:204 build/serializers.py:387 -#: build/templates/build/sidebar.html:21 company/models.py:529 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2935 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2061 stock/models.py:2169 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1212 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2435 templates/js/translated/order.js:2569 -#: templates/js/translated/order.js:3067 templates/js/translated/order.js:4004 -#: templates/js/translated/order.js:4385 templates/js/translated/part.js:882 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "" -#: InvenTree/format.py:142 +#: InvenTree/format.py:152 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" msgstr "" -#: InvenTree/format.py:152 +#: InvenTree/format.py:162 msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "" @@ -91,103 +98,103 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/forms.py:227 InvenTree/forms.py:233 +#: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/forms.py:239 +#: InvenTree/forms.py:242 msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -195,1144 +202,1241 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2163 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:412 common/models.py:2408 company/models.py:129 -#: company/models.py:281 company/models.py:516 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3056 templates/js/translated/part.js:1886 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:290 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1852 -#: common/models.py:1853 common/models.py:2076 common/models.py:2077 -#: common/models.py:2338 common/models.py:2339 part/models.py:2943 -#: part/models.py:3029 part/models.py:3049 plugin/models.py:264 -#: plugin/models.py:265 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2062 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3204 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:345 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:982 templates/js/translated/part.js:1151 -#: templates/js/translated/part.js:2291 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "" -#: InvenTree/models.py:564 build/models.py:163 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:522 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3213 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:356 -#: templates/js/translated/bom.js:592 templates/js/translated/bom.js:895 -#: templates/js/translated/build.js:2596 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2030 -#: templates/js/translated/order.js:2267 templates/js/translated/order.js:2845 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1494 -#: templates/js/translated/part.js:1768 templates/js/translated/part.js:2327 -#: templates/js/translated/part.js:2402 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2336 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3549 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:266 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "" -#: InvenTree/serializers.py:301 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:323 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:324 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:345 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:372 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:375 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:498 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:501 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:578 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:587 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:607 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:621 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:643 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:644 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:645 +#: InvenTree/settings.py:710 msgid "German" msgstr "" -#: InvenTree/settings.py:646 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "" -#: InvenTree/settings.py:647 +#: InvenTree/settings.py:712 msgid "English" msgstr "" -#: InvenTree/settings.py:648 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:649 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:650 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:651 +#: InvenTree/settings.py:716 msgid "French" msgstr "" -#: InvenTree/settings.py:652 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:653 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:654 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "" -#: InvenTree/settings.py:655 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:656 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "" -#: InvenTree/settings.py:657 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:658 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:659 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "" -#: InvenTree/settings.py:660 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:661 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:662 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3644 templates/js/translated/order.js:3979 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:703 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "" -#: InvenTree/views.py:710 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:226 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:105 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:110 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 -#: templates/js/translated/build.js:790 +#: templates/js/translated/build.js:791 msgid "Build Order" msgstr "" -#: build/models.py:111 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:154 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:155 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3459 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:729 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1853 templates/js/translated/order.js:2298 -#: templates/js/translated/order.js:2516 templates/js/translated/order.js:3841 -#: templates/js/translated/order.js:4332 templates/js/translated/pricing.js:119 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:166 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:174 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:175 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:180 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:684 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2802 part/models.py:2915 -#: part/models.py:2975 part/models.py:2990 part/models.py:3009 -#: part/models.py:3027 part/models.py:3126 part/models.py:3247 -#: part/models.py:3339 part/models.py:3424 part/models.py:3740 -#: part/serializers.py:894 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:591 -#: templates/js/translated/bom.js:728 templates/js/translated/bom.js:849 -#: templates/js/translated/build.js:1224 templates/js/translated/build.js:1721 -#: templates/js/translated/build.js:2204 templates/js/translated/build.js:2601 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:106 -#: templates/js/translated/order.js:1172 templates/js/translated/order.js:1676 -#: templates/js/translated/order.js:2252 templates/js/translated/order.js:3199 -#: templates/js/translated/order.js:3595 templates/js/translated/order.js:3825 -#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1551 -#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:102 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "" -#: build/models.py:188 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:193 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:197 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:202 build/serializers.py:823 -#: templates/js/translated/build.js:2192 templates/js/translated/order.js:3187 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:206 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:211 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:215 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:219 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:226 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:228 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:232 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:236 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:245 build/serializers.py:224 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1534 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:249 build/serializers.py:225 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:252 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2858 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:256 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:257 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:260 order/models.py:292 -#: templates/js/translated/build.js:2678 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:266 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:274 templates/js/translated/build.js:2646 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:283 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:115 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2658 templates/js/translated/order.js:2064 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:284 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:289 build/templates/build/detail.html:101 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:532 +#: build/models.py:301 +msgid "Build Priority" +msgstr "" + +#: build/models.py:304 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:538 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:717 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:720 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:723 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1180 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1189 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1199 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1205 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1211 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1268 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1337 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2580 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1338 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1354 build/serializers.py:663 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 -#: templates/js/translated/build.js:800 templates/js/translated/build.js:805 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2763 -#: templates/js/translated/order.js:107 templates/js/translated/order.js:3200 -#: templates/js/translated/order.js:3502 templates/js/translated/order.js:3507 -#: templates/js/translated/order.js:3602 templates/js/translated/order.js:3694 -#: templates/js/translated/part.js:803 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: stock/templates/stock/item_base.html:195 +#: templates/js/translated/build.js:801 templates/js/translated/build.js:806 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1355 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1367 build/serializers.py:192 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1884 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2922 part/models.py:3440 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:730 -#: templates/js/translated/bom.js:913 templates/js/translated/build.js:480 -#: templates/js/translated/build.js:636 templates/js/translated/build.js:827 -#: templates/js/translated/build.js:1246 templates/js/translated/build.js:1747 -#: templates/js/translated/build.js:2207 -#: templates/js/translated/company.js:1159 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:123 templates/js/translated/order.js:1175 -#: templates/js/translated/order.js:2304 templates/js/translated/order.js:2522 -#: templates/js/translated/order.js:3201 templates/js/translated/order.js:3521 -#: templates/js/translated/order.js:3608 templates/js/translated/order.js:3700 -#: templates/js/translated/order.js:3847 templates/js/translated/order.js:4338 -#: templates/js/translated/part.js:805 templates/js/translated/part.js:876 -#: templates/js/translated/part.js:1349 templates/js/translated/part.js:2849 -#: templates/js/translated/pricing.js:114 -#: templates/js/translated/pricing.js:207 -#: templates/js/translated/pricing.js:255 -#: templates/js/translated/pricing.js:349 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1368 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1376 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1377 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:137 build/serializers.py:692 -#: templates/js/translated/build.js:1234 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:149 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:153 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:157 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:168 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:193 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:207 build/serializers.py:683 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:686 -#: part/serializers.py:1057 stock/models.py:574 stock/models.py:1312 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:214 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:217 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:231 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1545 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:232 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:245 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:281 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:330 build/serializers.py:399 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:369 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:812 -#: templates/js/translated/build.js:1759 templates/js/translated/order.js:1572 -#: templates/js/translated/order.js:3514 templates/js/translated/order.js:3619 -#: templates/js/translated/order.js:3627 templates/js/translated/order.js:3708 -#: templates/js/translated/part.js:186 templates/js/translated/part.js:804 -#: templates/js/translated/stock.js:619 templates/js/translated/stock.js:784 -#: templates/js/translated/stock.js:994 templates/js/translated/stock.js:1898 -#: templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:370 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:376 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2630 -#: templates/js/translated/order.js:1681 templates/js/translated/order.js:2034 -#: templates/js/translated/order.js:2850 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:382 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:452 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:459 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:514 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:524 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:529 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:540 templates/js/translated/build.js:264 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:545 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:556 templates/js/translated/build.js:268 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:565 templates/js/translated/build.js:252 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:595 build/serializers.py:640 part/models.py:3576 -#: part/models.py:3732 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:605 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:613 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:654 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:669 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:727 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:733 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:740 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:768 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:832 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:838 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:844 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:850 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1350,130 +1454,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:131 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2670 templates/js/translated/order.js:2051 -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2866 -#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1364 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:204 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 -#: build/templates/build/detail.html:67 build/templates/build/detail.html:142 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:67 build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:94 order/api.py:1256 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2812 templates/js/translated/pricing.js:637 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 -#: build/templates/build/detail.html:108 +#: build/templates/build/build_base.html:203 +#: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:252 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1486,8 +1653,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1682 templates/js/translated/order.js:2424 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1499,169 +1666,162 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1250 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" -#: build/templates/build/detail.html:126 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2638 +#: build/templates/build/detail.html:133 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" -#: build/templates/build/detail.html:137 +#: build/templates/build/detail.html:144 msgid "No target date set" msgstr "" -#: build/templates/build/detail.html:146 +#: build/templates/build/detail.html:153 msgid "Build not complete" msgstr "" -#: build/templates/build/detail.html:157 build/templates/build/sidebar.html:17 +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 msgid "Child Build Orders" msgstr "" -#: build/templates/build/detail.html:172 +#: build/templates/build/detail.html:179 msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:176 templates/js/translated/build.js:2015 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" -#: build/templates/build/detail.html:177 +#: build/templates/build/detail.html:184 msgid "Unallocate Stock" msgstr "" -#: build/templates/build/detail.html:179 +#: build/templates/build/detail.html:186 msgid "Automatically allocate stock to build" msgstr "" -#: build/templates/build/detail.html:180 +#: build/templates/build/detail.html:187 msgid "Auto Allocate" msgstr "" -#: build/templates/build/detail.html:182 +#: build/templates/build/detail.html:189 msgid "Manually allocate stock to build" msgstr "" -#: build/templates/build/detail.html:183 build/templates/build/sidebar.html:8 +#: build/templates/build/detail.html:190 build/templates/build/sidebar.html:8 msgid "Allocate Stock" msgstr "" -#: build/templates/build/detail.html:186 +#: build/templates/build/detail.html:193 msgid "Order required parts" msgstr "" -#: build/templates/build/detail.html:187 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1215 +#: build/templates/build/detail.html:194 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:199 +#: build/templates/build/detail.html:206 msgid "Untracked stock has been fully allocated for this Build Order" msgstr "" -#: build/templates/build/detail.html:203 +#: build/templates/build/detail.html:210 msgid "Untracked stock has not been fully allocated for this Build Order" msgstr "" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:217 msgid "Allocate selected items" msgstr "" -#: build/templates/build/detail.html:220 +#: build/templates/build/detail.html:227 msgid "This Build Order does not have any associated untracked BOM items" msgstr "" -#: build/templates/build/detail.html:229 +#: build/templates/build/detail.html:236 msgid "Incomplete Build Outputs" msgstr "" -#: build/templates/build/detail.html:233 +#: build/templates/build/detail.html:240 msgid "Create new build output" msgstr "" -#: build/templates/build/detail.html:234 +#: build/templates/build/detail.html:241 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:248 +#: build/templates/build/detail.html:255 msgid "Output Actions" msgstr "" -#: build/templates/build/detail.html:253 +#: build/templates/build/detail.html:260 msgid "Complete selected build outputs" msgstr "" -#: build/templates/build/detail.html:254 +#: build/templates/build/detail.html:261 msgid "Complete outputs" msgstr "" -#: build/templates/build/detail.html:258 +#: build/templates/build/detail.html:265 msgid "Delete selected build outputs" msgstr "" -#: build/templates/build/detail.html:259 +#: build/templates/build/detail.html:266 msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:267 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:271 build/templates/build/detail.html:272 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:294 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:306 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:321 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:504 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:505 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1674,23 +1834,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1711,1222 +1872,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:472 +#: common/models.py:66 +msgid "Updated" +msgstr "" + +#: common/models.py:67 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:474 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:515 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:532 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:543 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:588 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:772 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:797 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:799 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:838 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:839 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:846 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:848 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:853 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:854 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:860 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:861 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:867 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:868 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:873 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:874 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:881 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:882 -msgid "Default currency" +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:888 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:889 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:895 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:896 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:907 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:908 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:913 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:914 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:920 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:921 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:930 -msgid "Automatic Backup" -msgstr "" - -#: common/models.py:931 -msgid "Enable automatic backup of database and media files" -msgstr "" - -#: common/models.py:937 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:938 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:948 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:949 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:959 -msgid "Delete Noficiations" -msgstr "" - -#: common/models.py:960 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:970 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:971 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:977 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:978 -msgid "Barcode input processing delay time" -msgstr "" - #: common/models.py:988 -msgid "Barcode Webcam Support" +msgid "Update Check Inverval" msgstr "" #: common/models.py:989 -msgid "Allow barcode scanning via webcam in browser" +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:995 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:996 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1000 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1001 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1007 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1008 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1014 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1015 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1021 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1022 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1028 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1029 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1035 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1036 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1042 part/admin.py:41 part/models.py:3249 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1043 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1049 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1595 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1050 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1056 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1057 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1063 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1064 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1070 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1071 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1077 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1078 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1084 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1085 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1091 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1092 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1098 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1099 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1105 -msgid "Create initial stock" -msgstr "" - -#: common/models.py:1106 -msgid "Create initial stock on part creation" -msgstr "" - -#: common/models.py:1112 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1113 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1120 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1121 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1126 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1127 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1137 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1138 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1144 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1145 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1151 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1152 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1158 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1159 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1165 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1166 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1167 common/models.py:1290 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1176 -msgid "Internal Prices" +#: common/models.py:999 +msgid "Automatic Backup" msgstr "" -#: common/models.py:1177 -msgid "Enable internal prices for parts" +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1183 -msgid "Internal Price Override" +#: common/models.py:1006 +msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1184 -msgid "If available, internal prices override price range calculations" +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1190 -msgid "Enable label printing" +#: common/models.py:1017 +msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1191 -msgid "Enable label printing from the web interface" +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1197 -msgid "Label Image DPI" +#: common/models.py:1028 +msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1198 -msgid "DPI resolution when generating image files to supply to label printing plugins" +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" msgstr "" #: common/models.py:1207 -msgid "Enable Reports" +msgid "Format to display the part name" msgstr "" -#: common/models.py:1208 -msgid "Enable generation of reports" -msgstr "" - -#: common/models.py:1214 templates/stats.html:25 -msgid "Debug Mode" +#: common/models.py:1214 +msgid "Part Category Default Icon" msgstr "" #: common/models.py:1215 -msgid "Generate reports in debug mode (HTML output)" +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" msgstr "" #: common/models.py:1221 -msgid "Page Size" +msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1222 -msgid "Default page size for PDF reports" +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" msgstr "" #: common/models.py:1232 -msgid "Enable Test Reports" +msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1233 -msgid "Enable generation of test reports" +#: common/models.py:1242 +msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1239 -msgid "Attach Test Reports" +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1240 -msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +#: common/models.py:1249 +msgid "Purchase History Override" msgstr "" -#: common/models.py:1246 -msgid "Globally Unique Serials" +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1247 -msgid "Serial numbers for stock items must be globally unique" +#: common/models.py:1256 +msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1253 -msgid "Autofill Serial Numbers" +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1254 -msgid "Autofill serial numbers in forms" +#: common/models.py:1263 +msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1260 -msgid "Delete Depleted Stock" -msgstr "" - -#: common/models.py:1261 -msgid "Determines default behaviour when a stock item is depleted" -msgstr "" - -#: common/models.py:1267 -msgid "Batch Code Template" -msgstr "" - -#: common/models.py:1268 -msgid "Template for generating default batch codes for stock items" -msgstr "" - -#: common/models.py:1273 -msgid "Stock Expiry" +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" #: common/models.py:1274 -msgid "Enable stock expiry functionality" +msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1280 -msgid "Sell Expired Stock" +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" msgstr "" #: common/models.py:1281 -msgid "Allow sale of expired stock" +msgid "Active Variants Only" msgstr "" -#: common/models.py:1287 -msgid "Stock Stale Time" +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" msgstr "" #: common/models.py:1288 -msgid "Number of days stock items are considered stale before expiring" +msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1295 -msgid "Build Expired Stock" +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1296 -msgid "Allow building with expired stock" +#: common/models.py:1299 +msgid "Internal Prices" msgstr "" -#: common/models.py:1302 -msgid "Stock Ownership Control" +#: common/models.py:1300 +msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1303 -msgid "Enable ownership control over stock locations and items" +#: common/models.py:1306 +msgid "Internal Price Override" msgstr "" -#: common/models.py:1309 -msgid "Stock Location Default Icon" +#: common/models.py:1307 +msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1310 -msgid "Stock location default icon (empty means no icon)" +#: common/models.py:1313 +msgid "Enable label printing" msgstr "" -#: common/models.py:1315 -msgid "Build Order Reference Pattern" +#: common/models.py:1314 +msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1316 -msgid "Required pattern for generating Build Order reference field" +#: common/models.py:1320 +msgid "Label Image DPI" msgstr "" -#: common/models.py:1322 -msgid "Sales Order Reference Pattern" -msgstr "" - -#: common/models.py:1323 -msgid "Required pattern for generating Sales Order reference field" -msgstr "" - -#: common/models.py:1329 -msgid "Sales Order Default Shipment" +#: common/models.py:1321 +msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" #: common/models.py:1330 -msgid "Enable creation of default shipment with sales orders" +msgid "Enable Reports" msgstr "" -#: common/models.py:1336 -msgid "Edit Completed Sales Orders" +#: common/models.py:1331 +msgid "Enable generation of reports" msgstr "" -#: common/models.py:1337 -msgid "Allow editing of sales orders after they have been shipped or completed" +#: common/models.py:1337 templates/stats.html:25 +msgid "Debug Mode" msgstr "" -#: common/models.py:1343 -msgid "Purchase Order Reference Pattern" +#: common/models.py:1338 +msgid "Generate reports in debug mode (HTML output)" msgstr "" #: common/models.py:1344 -msgid "Required pattern for generating Purchase Order reference field" +msgid "Page Size" msgstr "" -#: common/models.py:1350 -msgid "Edit Completed Purchase Orders" +#: common/models.py:1345 +msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1351 -msgid "Allow editing of purchase orders after they have been shipped or completed" +#: common/models.py:1355 +msgid "Enable Test Reports" msgstr "" -#: common/models.py:1358 -msgid "Enable password forgot" +#: common/models.py:1356 +msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1359 -msgid "Enable password forgot function on the login pages" +#: common/models.py:1362 +msgid "Attach Test Reports" msgstr "" -#: common/models.py:1365 -msgid "Enable registration" +#: common/models.py:1363 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1366 -msgid "Enable self-registration for users on the login pages" +#: common/models.py:1369 +msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1372 -msgid "Enable SSO" +#: common/models.py:1370 +msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1373 -msgid "Enable SSO on the login pages" +#: common/models.py:1376 +msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1379 -msgid "Email required" +#: common/models.py:1377 +msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1380 -msgid "Require user to supply mail on signup" +#: common/models.py:1383 +msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1386 -msgid "Auto-fill SSO users" +#: common/models.py:1384 +msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1387 -msgid "Automatically fill out user-details from SSO account-data" +#: common/models.py:1390 +msgid "Batch Code Template" msgstr "" -#: common/models.py:1393 -msgid "Mail twice" +#: common/models.py:1391 +msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1394 -msgid "On signup ask users twice for their mail" +#: common/models.py:1396 +msgid "Stock Expiry" msgstr "" -#: common/models.py:1400 -msgid "Password twice" +#: common/models.py:1397 +msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1401 -msgid "On signup ask users twice for their password" +#: common/models.py:1403 +msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1407 -msgid "Allowed domains" +#: common/models.py:1404 +msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1408 -msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +#: common/models.py:1410 +msgid "Stock Stale Time" msgstr "" -#: common/models.py:1414 -msgid "Group on signup" +#: common/models.py:1411 +msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1415 -msgid "Group to which new users are assigned on registration" +#: common/models.py:1418 +msgid "Build Expired Stock" msgstr "" -#: common/models.py:1421 -msgid "Enforce MFA" +#: common/models.py:1419 +msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1422 -msgid "Users must use multifactor security." +#: common/models.py:1425 +msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1428 -msgid "Check plugins on startup" +#: common/models.py:1426 +msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1429 -msgid "Check that all plugins are installed on startup - enable in container environments" +#: common/models.py:1432 +msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1436 -msgid "Check plugin signatures" +#: common/models.py:1433 +msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1437 -msgid "Check and show signatures for plugins" +#: common/models.py:1438 +msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1444 -msgid "Enable URL integration" +#: common/models.py:1439 +msgid "Required pattern for generating Build Order reference field" msgstr "" #: common/models.py:1445 -msgid "Enable plugins to add URL routes" +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" msgstr "" #: common/models.py:1452 -msgid "Enable navigation integration" +msgid "Return Order Reference Pattern" msgstr "" #: common/models.py:1453 -msgid "Enable plugins to integrate into navigation" +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" msgstr "" #: common/models.py:1460 -msgid "Enable app integration" +msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1461 -msgid "Enable plugins to add apps" +#: common/models.py:1466 +msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1468 -msgid "Enable schedule integration" +#: common/models.py:1467 +msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1469 -msgid "Enable plugins to run scheduled tasks" +#: common/models.py:1473 +msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1476 -msgid "Enable event integration" +#: common/models.py:1474 +msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1477 -msgid "Enable plugins to respond to internal events" +#: common/models.py:1480 +msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1496 common/models.py:1845 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1481 +msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1518 -msgid "Show subscribed parts" +#: common/models.py:1487 +msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1519 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1488 +msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1525 -msgid "Show subscribed categories" +#: common/models.py:1494 +msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1526 -msgid "Show subscribed part categories on the homepage" +#: common/models.py:1495 +msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1532 -msgid "Show latest parts" +#: common/models.py:1502 +msgid "Enable password forgot" msgstr "" -#: common/models.py:1533 -msgid "Show latest parts on the homepage" +#: common/models.py:1503 +msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1539 -msgid "Recent Part Count" +#: common/models.py:1509 +msgid "Enable registration" msgstr "" -#: common/models.py:1540 -msgid "Number of recent parts to display on index page" +#: common/models.py:1510 +msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1546 -msgid "Show unvalidated BOMs" +#: common/models.py:1516 +msgid "Enable SSO" msgstr "" -#: common/models.py:1547 -msgid "Show BOMs that await validation on the homepage" +#: common/models.py:1517 +msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1553 -msgid "Show recent stock changes" +#: common/models.py:1523 +msgid "Enable SSO registration" msgstr "" -#: common/models.py:1554 -msgid "Show recently changed stock items on the homepage" +#: common/models.py:1524 +msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1560 -msgid "Recent Stock Count" +#: common/models.py:1530 +msgid "Email required" msgstr "" -#: common/models.py:1561 -msgid "Number of recent stock items to display on index page" +#: common/models.py:1531 +msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1567 -msgid "Show low stock" +#: common/models.py:1537 +msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1568 -msgid "Show low stock items on the homepage" +#: common/models.py:1538 +msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1574 -msgid "Show depleted stock" +#: common/models.py:1544 +msgid "Mail twice" msgstr "" -#: common/models.py:1575 -msgid "Show depleted stock items on the homepage" +#: common/models.py:1545 +msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1581 -msgid "Show needed stock" +#: common/models.py:1551 +msgid "Password twice" msgstr "" -#: common/models.py:1582 -msgid "Show stock items needed for builds on the homepage" +#: common/models.py:1552 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:1558 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:1559 +msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +msgstr "" + +#: common/models.py:1565 +msgid "Group on signup" +msgstr "" + +#: common/models.py:1566 +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1572 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:1573 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1579 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1580 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:1587 +msgid "Check plugin signatures" msgstr "" #: common/models.py:1588 -msgid "Show expired stock" -msgstr "" - -#: common/models.py:1589 -msgid "Show expired stock items on the homepage" +msgid "Check and show signatures for plugins" msgstr "" #: common/models.py:1595 -msgid "Show stale stock" +msgid "Enable URL integration" msgstr "" #: common/models.py:1596 -msgid "Show stale stock items on the homepage" -msgstr "" - -#: common/models.py:1602 -msgid "Show pending builds" +msgid "Enable plugins to add URL routes" msgstr "" #: common/models.py:1603 -msgid "Show pending builds on the homepage" +msgid "Enable navigation integration" msgstr "" -#: common/models.py:1609 -msgid "Show overdue builds" +#: common/models.py:1604 +msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1610 -msgid "Show overdue builds on the homepage" +#: common/models.py:1611 +msgid "Enable app integration" msgstr "" -#: common/models.py:1616 -msgid "Show outstanding POs" +#: common/models.py:1612 +msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1617 -msgid "Show outstanding POs on the homepage" +#: common/models.py:1619 +msgid "Enable schedule integration" msgstr "" -#: common/models.py:1623 -msgid "Show overdue POs" +#: common/models.py:1620 +msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1624 -msgid "Show overdue POs on the homepage" +#: common/models.py:1627 +msgid "Enable event integration" msgstr "" -#: common/models.py:1630 -msgid "Show outstanding SOs" +#: common/models.py:1628 +msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1631 -msgid "Show outstanding SOs on the homepage" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1637 -msgid "Show overdue SOs" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1638 -msgid "Show overdue SOs on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1644 -msgid "Show News" -msgstr "" - -#: common/models.py:1645 -msgid "Show news on the homepage" -msgstr "" - -#: common/models.py:1651 -msgid "Inline label display" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:1773 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:1774 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:1780 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:1781 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:1787 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:1788 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:1794 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:1795 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:1801 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:1802 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:1808 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:1809 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:1815 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:1816 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:1822 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:1823 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:1829 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:1830 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:1836 +msgid "Show News" +msgstr "" + +#: common/models.py:1837 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:1843 +msgid "Inline label display" +msgstr "" + +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1658 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1659 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1665 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1666 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1672 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1673 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1679 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1680 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1686 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1687 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1693 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1694 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1700 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1701 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1707 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1708 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1714 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1715 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1721 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1722 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1728 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1729 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1735 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1736 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1742 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1743 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1749 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1750 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1756 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1757 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1763 +#: common/models.py:1962 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 msgid "Search Preview Results" msgstr "" -#: common/models.py:1764 +#: common/models.py:1977 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:1770 +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1771 +#: common/models.py:1998 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1777 +#: common/models.py:2004 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1778 +#: common/models.py:2005 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1784 +#: common/models.py:2011 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1785 +#: common/models.py:2012 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1791 +#: common/models.py:2018 msgid "Date Format" msgstr "" -#: common/models.py:1792 +#: common/models.py:2019 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:1806 part/templates/part/detail.html:41 +#: common/models.py:2033 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:1807 +#: common/models.py:2034 msgid "Display part scheduling information" msgstr "" -#: common/models.py:1813 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:822 +#: common/models.py:2040 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:1814 -msgid "Display part stocktake information" +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:1820 +#: common/models.py:2047 msgid "Table String Length" msgstr "" -#: common/models.py:1821 +#: common/models.py:2048 msgid "Maximimum length limit for strings displayed in table views" msgstr "" -#: common/models.py:1885 +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1892 company/serializers.py:393 order/models.py:975 -#: templates/js/translated/company.js:1164 templates/js/translated/part.js:1416 -#: templates/js/translated/pricing.js:354 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1893 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2053 common/models.py:2231 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2054 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2063 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2068 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2069 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2083 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2084 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2091 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2092 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2198 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2199 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2207 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2208 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2215 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2216 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2222 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2223 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2232 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2237 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2238 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2397 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2403 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2413 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2418 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2423 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2428 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2429 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -2939,7 +3266,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -2947,21 +3274,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -2999,7 +3330,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3025,6 +3356,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3033,6 +3365,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3044,11 +3379,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3076,234 +3411,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:399 -#: company/templates/company/company_base.html:107 part/models.py:2783 -#: part/serializers.py:156 part/serializers.py:184 stock/serializers.py:182 -#: templates/InvenTree/settings/pricing.html:64 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:487 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:581 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:491 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 templates/js/translated/part.js:241 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 templates/js/translated/part.js:242 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2286 -#: templates/js/translated/part.js:252 templates/js/translated/part.js:1338 -msgid "MPN" -msgstr "" - -#: company/models.py:276 templates/js/translated/part.js:253 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:510 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2156 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1160 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3209 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:350 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1166 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:455 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:497 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:252 part/bom.py:280 -#: stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2017 -#: templates/js/translated/part.js:222 templates/js/translated/part.js:1306 -#: templates/js/translated/pricing.js:231 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:498 templates/js/translated/part.js:223 -msgid "Select supplier" -msgstr "" - -#: company/models.py:503 company/templates/company/supplier_part.html:146 -#: part/bom.py:253 part/bom.py:281 templates/js/translated/company.js:303 -#: templates/js/translated/order.js:2273 templates/js/translated/part.js:233 -#: templates/js/translated/part.js:1324 templates/js/translated/pricing.js:243 -msgid "SKU" -msgstr "" - -#: company/models.py:504 templates/js/translated/part.js:234 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:511 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:517 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:523 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:528 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3462 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:532 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:532 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:534 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:534 -msgid "Part packaging" -msgstr "" - -#: company/models.py:537 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:826 -#: templates/js/translated/order.js:1253 templates/js/translated/order.js:1508 -#: templates/js/translated/order.js:2317 templates/js/translated/order.js:2334 -#: templates/js/translated/part.js:1356 templates/js/translated/part.js:1408 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:538 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:544 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:544 -msgid "Order multiple" -msgstr "" - -#: company/models.py:552 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1118 templates/js/translated/build.js:1883 -#: templates/js/translated/build.js:2770 templates/js/translated/part.js:626 -#: templates/js/translated/part.js:629 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:553 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:557 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:558 -msgid "Date of last update of availability data" -msgstr "" - -#: company/models.py:686 -msgid "last updated" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:689 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3316,7 +3647,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3344,14 +3675,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2827 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3364,7 +3698,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3373,123 +3707,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1732 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3500,18 +3864,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3526,36 +3890,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:38 -#: templates/js/translated/part.js:354 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:62 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3563,8 +3927,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:865 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3580,55 +3944,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1173 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3639,13 +3979,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3657,95 +3997,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:413 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1048 templates/js/translated/part.js:1649 -#: templates/js/translated/part.js:1805 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3763,7 +4076,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3771,519 +4084,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1254 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:619 templates/js/translated/order.js:1174 -#: templates/js/translated/order.js:2001 templates/js/translated/part.js:1283 -#: templates/js/translated/pricing.js:515 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1258 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2026 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2874 templates/js/translated/order.js:3036 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:419 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 -msgid "Target shipping date for this line item" +#: order/models.py:1069 +msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3492 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1679 templates/js/translated/order.js:2404 -#: templates/js/translated/part.js:1400 templates/js/translated/part.js:1432 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:800 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:665 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1535 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1546 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4302,102 +4700,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4448,10 +4867,12 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 -#: templates/js/translated/build.js:641 templates/js/translated/build.js:2088 -#: templates/js/translated/order.js:1122 templates/js/translated/order.js:1624 -#: templates/js/translated/order.js:3111 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4493,9 +4914,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4508,1029 +4931,1269 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:260 -#: templates/js/translated/order.js:728 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:291 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:232 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:397 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2840 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1224 -#: templates/js/translated/build.js:1989 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3343 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3347 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1034 templates/js/translated/part.js:1762 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1039 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:145 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1156 templates/js/translated/build.js:1935 -#: templates/js/translated/part.js:616 templates/js/translated/part.js:636 -#: templates/js/translated/part.js:1652 templates/js/translated/part.js:1830 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1947 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2777 -#: templates/js/translated/order.js:3951 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:619 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:1656 templates/js/translated/part.js:1837 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2867 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2873 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2346 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3351 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:91 -#: templates/js/translated/pricing.js:732 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:86 -#: templates/js/translated/pricing.js:740 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:539 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:559 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:577 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:663 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:821 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:822 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:828 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/api.py:1282 -msgid "Must be greater than zero" -msgstr "" - -#: part/api.py:1286 -msgid "Must be a valid quantity" -msgstr "" - -#: part/api.py:1301 -msgid "Specify location for initial part stock" -msgstr "" - -#: part/api.py:1332 part/api.py:1336 part/api.py:1351 part/api.py:1355 -msgid "This field is required" -msgstr "" - -#: part/bom.py:142 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" -#: part/bom.py:143 templates/email/low_stock_notification.html:17 +#: part/bom.py:176 templates/email/low_stock_notification.html:17 msgid "Total Stock" msgstr "" -#: part/bom.py:144 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3918 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3292 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3348 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3047 part/models.py:3291 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:230 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1784 templates/js/translated/part.js:2051 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 -msgid "Stock keeping units for this part" +#: part/models.py:979 +msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1901 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2784 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2789 templates/js/translated/part.js:806 -msgid "Updated" -msgstr "" - -#: part/models.py:2790 -msgid "Timestamp of last pricing update" -msgstr "" - -#: part/models.py:2807 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2808 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2813 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2814 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2819 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2820 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2825 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2826 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2831 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2832 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2837 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2838 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2843 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2844 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2849 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2850 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2855 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2856 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2861 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2862 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2868 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2874 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2879 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2880 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2885 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2886 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2891 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2892 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2897 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2898 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2916 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2923 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2927 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2043 templates/js/translated/part.js:887 -#: templates/js/translated/pricing.js:537 -#: templates/js/translated/pricing.js:658 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2928 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2936 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2944 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3094 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3111 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3131 templates/js/translated/part.js:2397 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3132 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3137 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3138 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3143 templates/js/translated/part.js:2406 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3144 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3149 templates/js/translated/part.js:2414 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3150 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3155 templates/js/translated/part.js:2421 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3156 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3197 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3205 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3209 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3214 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3247 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3249 part/models.py:3297 part/models.py:3298 -#: templates/InvenTree/settings/settings.html:225 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3251 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3251 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3302 templates/InvenTree/settings/settings.html:234 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3303 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3344 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3352 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3355 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3356 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3425 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3433 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3434 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3440 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3444 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:933 templates/js/translated/bom.js:986 -#: templates/js/translated/build.js:1868 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3445 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3450 templates/js/translated/bom.js:929 -#: templates/js/translated/bom.js:995 templates/js/translated/build.js:1859 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3451 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3455 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3456 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3459 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3462 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3464 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3464 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3468 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1012 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3469 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3474 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1004 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3475 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3561 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3570 part/models.py:3572 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3699 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3720 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3733 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3741 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3756 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3760 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3760 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3778 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3782 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:157 part/serializers.py:185 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:584 +#: part/serializers.py:307 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:307 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:317 part/templates/part/detail.html:296 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:317 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:332 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:332 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:338 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:338 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:348 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:359 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:365 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:372 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:380 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:392 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:400 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:621 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:626 templates/js/translated/part.js:68 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:626 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:631 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:631 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:585 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:895 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:904 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:909 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:910 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:915 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:921 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:922 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:962 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:963 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1039 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1051 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1080 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5543,7 +6206,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5551,108 +6214,92 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:405 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" -#: part/templates/part/category.html:352 -msgid "Create Part" -msgstr "" - -#: part/templates/part/category.html:355 -msgid "Create another part after this one" -msgstr "" - -#: part/templates/part/category.html:356 -msgid "Part created successfully" -msgstr "" - #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:407 -msgid "Duplicate Part" -msgstr "" - #: part/templates/part/copy_part.html:10 #, python-format msgid "Make a copy of part '%(full_name)s'." @@ -5682,126 +6329,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:295 templates/js/translated/part.js:279 -msgid "Copy BOM" -msgstr "" - -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 -#: templates/js/translated/bom.js:1268 templates/js/translated/bom.js:1269 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 +#: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:796 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5836,13 +6481,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:998 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:999 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5864,7 +6509,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5874,7 +6519,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -5927,39 +6572,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:680 templates/js/translated/part.js:1026 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1166 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -5967,44 +6610,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1032 -#: templates/js/translated/part.js:1069 templates/js/translated/part.js:1875 -#: templates/js/translated/pricing.js:124 -#: templates/js/translated/pricing.js:762 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" -#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:78 -#: part/templates/part/prices.html:238 templates/js/translated/pricing.js:218 +#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6015,19 +6662,12 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" -#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:94 -#: part/templates/part/prices.html:262 +#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:87 +#: part/templates/part/prices.html:240 msgid "BOM Pricing" msgstr "" @@ -6059,11 +6699,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6079,74 +6735,75 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" -#: part/templates/part/prices.html:34 part/templates/part/prices.html:126 +#: part/templates/part/prices.html:34 part/templates/part/prices.html:116 msgid "Price Category" msgstr "" -#: part/templates/part/prices.html:35 part/templates/part/prices.html:127 +#: part/templates/part/prices.html:35 part/templates/part/prices.html:117 msgid "Minimum" msgstr "" -#: part/templates/part/prices.html:36 part/templates/part/prices.html:128 +#: part/templates/part/prices.html:36 part/templates/part/prices.html:118 msgid "Maximum" msgstr "" -#: part/templates/part/prices.html:49 part/templates/part/prices.html:185 +#: part/templates/part/prices.html:48 part/templates/part/prices.html:163 msgid "Internal Pricing" msgstr "" -#: part/templates/part/prices.html:64 part/templates/part/prices.html:217 +#: part/templates/part/prices.html:61 part/templates/part/prices.html:195 msgid "Purchase History" msgstr "" -#: part/templates/part/prices.html:103 part/templates/part/prices.html:286 +#: part/templates/part/prices.html:95 part/templates/part/prices.html:264 msgid "Variant Pricing" msgstr "" -#: part/templates/part/prices.html:111 +#: part/templates/part/prices.html:102 msgid "Overall Pricing" msgstr "" -#: part/templates/part/prices.html:155 part/templates/part/prices.html:338 +#: part/templates/part/prices.html:138 part/templates/part/prices.html:316 msgid "Sale History" msgstr "" -#: part/templates/part/prices.html:168 +#: part/templates/part/prices.html:146 msgid "Sale price data is not available for this part" msgstr "" -#: part/templates/part/prices.html:175 +#: part/templates/part/prices.html:153 msgid "Price range data is not available for this part." msgstr "" -#: part/templates/part/prices.html:186 part/templates/part/prices.html:218 -#: part/templates/part/prices.html:239 part/templates/part/prices.html:263 -#: part/templates/part/prices.html:287 part/templates/part/prices.html:310 -#: part/templates/part/prices.html:339 +#: part/templates/part/prices.html:164 part/templates/part/prices.html:196 +#: part/templates/part/prices.html:217 part/templates/part/prices.html:241 +#: part/templates/part/prices.html:265 part/templates/part/prices.html:288 +#: part/templates/part/prices.html:317 msgid "Jump to overview" msgstr "" -#: part/templates/part/prices.html:191 +#: part/templates/part/prices.html:169 msgid "Add Internal Price Break" msgstr "" -#: part/templates/part/prices.html:309 +#: part/templates/part/prices.html:287 msgid "Sale Pricing" msgstr "" -#: part/templates/part/prices.html:315 +#: part/templates/part/prices.html:293 msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:642 -#: templates/js/translated/part.js:1644 templates/js/translated/part.js:1646 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6196,45 +6853,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:210 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:262 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:517 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6263,6 +6915,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6274,15 +6927,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 -msgid "Inventree Barcodes" -msgstr "" - -#: plugin/builtin/barcodes/inventree_barcode.py:27 -msgid "Provides native support for barcodes" +#: plugin/builtin/barcodes/inventree_barcode.py:28 +msgid "InvenTree Barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:29 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6357,19 +7010,23 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:158 +#: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 +msgid "Unvailable" +msgstr "" + +#: plugin/models.py:164 msgid "Sample plugin" msgstr "" -#: plugin/models.py:167 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:192 templates/InvenTree/settings/plugin_settings.html:10 +#: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 msgid "Plugin" msgstr "" -#: plugin/models.py:257 +#: plugin/models.py:263 msgid "Method" msgstr "" @@ -6381,18 +7038,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:439 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:441 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:443 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6427,132 +7085,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6564,361 +7226,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:478 templates/js/translated/build.js:634 -#: templates/js/translated/build.js:1244 templates/js/translated/build.js:1745 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:121 templates/js/translated/order.js:3611 -#: templates/js/translated/order.js:3698 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2144 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2150 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:749 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:764 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:805 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:806 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:736 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:738 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:749 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:752 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:758 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:765 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:780 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:780 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:793 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:801 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:829 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1303 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1309 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1315 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1318 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1321 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1328 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1398 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1401 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1404 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1407 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1410 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1413 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1420 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1428 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1432 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1601 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2062 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2120 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2126 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2145 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2151 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2157 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2164 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2170 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -6926,128 +7653,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7072,7 +7795,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7084,15 +7807,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7105,7 +7828,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7114,15 +7837,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7131,11 +7854,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7175,125 +7898,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1768 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7305,47 +8036,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7355,11 +8090,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7368,11 +8098,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7392,10 +8126,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7412,7 +8142,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7539,7 +8270,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7555,8 +8286,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7594,7 +8325,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7612,7 +8342,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7630,7 +8360,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7641,20 +8372,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:40 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:44 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:58 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7663,7 +8402,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7698,7 +8437,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7711,10 +8450,6 @@ msgstr "" msgid "Sample" msgstr "" -#: templates/InvenTree/settings/plugin_details.html:47 -msgid "Unvailable" -msgstr "" - #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" msgstr "" @@ -7789,41 +8524,33 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:29 -msgid "Currency Settings" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:35 -msgid "Update Now" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:44 -#: templates/InvenTree/settings/pricing.html:48 -msgid "Last Update" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:48 -msgid "Never" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:58 -msgid "Base Currency" -msgstr "" - -#: templates/InvenTree/settings/pricing.html:63 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:65 -msgid "Rate" +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" -#: templates/InvenTree/settings/setting.html:37 +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7831,67 +8558,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:215 +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:237 -#: templates/InvenTree/settings/settings.html:362 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:238 -#: templates/InvenTree/settings/settings.html:363 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:278 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:323 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:335 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:339 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:400 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:414 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:422 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -7901,13 +8632,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -7915,29 +8644,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -7949,6 +8679,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -7956,8 +8690,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:33 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8107,6 +8841,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8172,8 +8910,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8242,7 +8980,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:649 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8301,7 +9039,7 @@ msgstr "" msgid "Reset My Password" msgstr "" -#: templates/account/password_reset.html:27 templates/account/signup.html:36 +#: templates/account/password_reset.html:27 templates/account/signup.html:37 msgid "This function is currently disabled. Please contact an administrator." msgstr "" @@ -8327,8 +9065,8 @@ msgstr "" msgid "Already have an account? Then please sign in." msgstr "" -#: templates/account/signup.html:27 -msgid "Or use a SSO-provider for signup" +#: templates/account/signup.html:28 +msgid "Use a SSO-provider for signup" msgstr "" #: templates/account/signup_closed.html:5 @@ -8410,11 +9148,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8422,32 +9160,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8469,7 +9208,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1630 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8483,214 +9222,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2726 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8706,10 +9437,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:659 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1217 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8735,243 +9466,251 @@ msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" #: templates/js/translated/bom.js:334 -msgid "Include Parameter Data" +msgid "Include Alternative Parts" msgstr "" #: templates/js/translated/bom.js:335 -msgid "Include part parameter data in exported BOM" +msgid "Include alternative parts in exported BOM" msgstr "" #: templates/js/translated/bom.js:340 -msgid "Include Stock Data" +msgid "Include Parameter Data" msgstr "" #: templates/js/translated/bom.js:341 -msgid "Include part stock data in exported BOM" +msgid "Include part parameter data in exported BOM" msgstr "" #: templates/js/translated/bom.js:346 -msgid "Include Manufacturer Data" +msgid "Include Stock Data" msgstr "" #: templates/js/translated/bom.js:347 -msgid "Include part manufacturer data in exported BOM" +msgid "Include part stock data in exported BOM" msgstr "" #: templates/js/translated/bom.js:352 -msgid "Include Supplier Data" +msgid "Include Manufacturer Data" msgstr "" #: templates/js/translated/bom.js:353 -msgid "Include part supplier data in exported BOM" +msgid "Include part manufacturer data in exported BOM" msgstr "" #: templates/js/translated/bom.js:358 -msgid "Include Pricing Data" +msgid "Include Supplier Data" msgstr "" #: templates/js/translated/bom.js:359 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:364 +msgid "Include Pricing Data" +msgstr "" + +#: templates/js/translated/bom.js:365 msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:550 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:604 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:615 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:621 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:660 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:661 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:723 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:739 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:868 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:878 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:882 templates/js/translated/build.js:1845 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:972 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1023 templates/js/translated/bom.js:1261 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1095 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1100 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1138 templates/js/translated/build.js:1917 -#: templates/js/translated/order.js:3932 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1921 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1923 -#: templates/js/translated/part.js:1061 templates/js/translated/part.js:1843 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1147 templates/js/translated/build.js:1925 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1172 templates/js/translated/build.js:1908 -#: templates/js/translated/build.js:1995 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1232 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1234 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1236 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1238 templates/js/translated/bom.js:1434 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1240 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1345 templates/js/translated/build.js:1689 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1613 templates/js/translated/build.js:1828 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1639 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:95 +#: templates/js/translated/build.js:96 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:138 +#: templates/js/translated/build.js:139 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:171 +#: templates/js/translated/build.js:172 msgid "Cancel Build Order" msgstr "" -#: templates/js/translated/build.js:180 +#: templates/js/translated/build.js:181 msgid "Are you sure you wish to cancel this build?" msgstr "" -#: templates/js/translated/build.js:186 +#: templates/js/translated/build.js:187 msgid "Stock items have been allocated to this build order" msgstr "" -#: templates/js/translated/build.js:193 +#: templates/js/translated/build.js:194 msgid "There are incomplete outputs remaining for this build order" msgstr "" -#: templates/js/translated/build.js:245 +#: templates/js/translated/build.js:246 msgid "Build order is ready to be completed" msgstr "" -#: templates/js/translated/build.js:253 +#: templates/js/translated/build.js:254 msgid "This build order cannot be completed as there are incomplete outputs" msgstr "" -#: templates/js/translated/build.js:258 +#: templates/js/translated/build.js:259 msgid "Build Order is incomplete" msgstr "" -#: templates/js/translated/build.js:276 +#: templates/js/translated/build.js:277 msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:317 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:319 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" -#: templates/js/translated/build.js:328 +#: templates/js/translated/build.js:329 msgid "The Bill of Materials contains trackable parts" msgstr "" -#: templates/js/translated/build.js:329 +#: templates/js/translated/build.js:330 msgid "Build outputs must be generated individually" msgstr "" -#: templates/js/translated/build.js:337 +#: templates/js/translated/build.js:338 msgid "Trackable parts can have serial numbers specified" msgstr "" -#: templates/js/translated/build.js:338 +#: templates/js/translated/build.js:339 msgid "Enter serial numbers to generate multiple single build outputs" msgstr "" -#: templates/js/translated/build.js:345 +#: templates/js/translated/build.js:346 msgid "Create Build Output" msgstr "" -#: templates/js/translated/build.js:376 +#: templates/js/translated/build.js:377 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:387 +#: templates/js/translated/build.js:388 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:396 +#: templates/js/translated/build.js:397 msgid "Complete build output" msgstr "" @@ -8979,577 +9718,594 @@ msgstr "" msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:427 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:445 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:465 templates/js/translated/build.js:621 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:520 templates/js/translated/build.js:676 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:542 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:689 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" -#: templates/js/translated/build.js:779 +#: templates/js/translated/build.js:780 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:816 +#: templates/js/translated/build.js:817 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1204 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1275 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1282 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1304 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1309 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1785 templates/js/translated/build.js:2781 -#: templates/js/translated/order.js:3646 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1787 templates/js/translated/build.js:2782 -#: templates/js/translated/order.js:3647 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1805 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1815 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1841 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1877 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1911 templates/js/translated/order.js:3939 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1913 templates/js/translated/order.js:3937 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2003 templates/js/translated/order.js:4031 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2007 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2010 templates/js/translated/order.js:4024 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2049 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1045 templates/js/translated/order.js:3173 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/order.js:3174 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2099 templates/js/translated/order.js:3122 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2178 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3188 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2221 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2232 templates/js/translated/order.js:3285 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2304 templates/js/translated/order.js:3362 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2401 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2404 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2433 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2539 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2574 templates/js/translated/part.js:1737 -#: templates/js/translated/part.js:2284 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2588 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2616 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2652 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2758 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:576 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:862 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:664 -#: templates/js/translated/part.js:1018 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:668 -#: templates/js/translated/part.js:1022 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1141 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1183 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1184 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1201 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1213 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1056 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1057 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1112 -#: templates/js/translated/pricing.js:423 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1128 -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1145 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1174 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1180 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1181 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:675 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:776 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1269 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1706 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1922 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2175 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2631 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2631 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2643 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:28 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:434 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:324 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9558,795 +10314,384 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:97 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:102 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:142 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:162 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:218 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:222 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:254 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:284 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:301 templates/js/translated/order.js:413 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:307 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:312 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:313 templates/js/translated/order.js:427 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:336 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:341 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:347 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:370 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:375 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:426 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:450 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:455 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:509 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:534 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:559 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:620 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:627 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:628 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:635 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:636 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:653 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:670 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:995 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1046 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1071 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1080 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1098 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1131 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1271 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1290 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1467 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1468 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1488 templates/js/translated/order.js:1601 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1494 templates/js/translated/order.js:1612 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1509 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1520 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1584 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1677 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1678 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1680 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1703 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1704 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:1982 templates/js/translated/part.js:1254 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2009 templates/js/translated/order.js:2817 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2059 templates/js/translated/order.js:2882 -#: templates/js/translated/order.js:3023 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2162 templates/js/translated/order.js:4083 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2179 templates/js/translated/order.js:4105 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2192 templates/js/translated/order.js:4116 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2235 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2262 templates/js/translated/order.js:3835 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2317 templates/js/translated/part.js:1356 -#: templates/js/translated/part.js:1408 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2348 templates/js/translated/order.js:2535 -#: templates/js/translated/order.js:3860 templates/js/translated/order.js:4351 -#: templates/js/translated/pricing.js:260 -#: templates/js/translated/pricing.js:329 -#: templates/js/translated/pricing.js:545 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2358 templates/js/translated/order.js:2545 -#: templates/js/translated/order.js:3870 templates/js/translated/order.js:4361 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2388 templates/js/translated/order.js:3900 -#: templates/js/translated/part.js:1392 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2447 templates/js/translated/part.js:1437 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2451 templates/js/translated/order.js:4037 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2452 templates/js/translated/order.js:4038 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2453 templates/js/translated/order.js:4042 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2582 templates/js/translated/order.js:4397 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2583 templates/js/translated/order.js:4398 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2584 templates/js/translated/order.js:4399 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4428 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2635 templates/js/translated/order.js:4449 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2646 templates/js/translated/order.js:4460 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2657 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2768 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2831 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2929 -msgid "Edit shipment" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" -#: templates/js/translated/order.js:2932 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2937 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2957 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:2974 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3008 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3018 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3042 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3052 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3221 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3272 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3273 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3481 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3560 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3577 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3578 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3623 templates/js/translated/order.js:3712 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3631 templates/js/translated/order.js:3721 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4021 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4027 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4034 templates/js/translated/order.js:4232 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4046 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4131 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4240 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4254 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4471 -msgid "No matching lines" -msgstr "" - -#: templates/js/translated/part.js:55 +#: templates/js/translated/part.js:56 msgid "Part Attributes" msgstr "" -#: templates/js/translated/part.js:59 +#: templates/js/translated/part.js:60 msgid "Part Creation Options" msgstr "" -#: templates/js/translated/part.js:63 +#: templates/js/translated/part.js:64 msgid "Part Duplication Options" msgstr "" -#: templates/js/translated/part.js:67 -msgid "Supplier Options" -msgstr "" - -#: templates/js/translated/part.js:81 +#: templates/js/translated/part.js:87 msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:171 -msgid "Create Initial Stock" -msgstr "" - -#: templates/js/translated/part.js:172 -msgid "Create an initial stock item for this part" -msgstr "" - -#: templates/js/translated/part.js:179 -msgid "Initial Stock Quantity" -msgstr "" - -#: templates/js/translated/part.js:180 -msgid "Specify initial stock quantity for this part" -msgstr "" - -#: templates/js/translated/part.js:187 -msgid "Select destination stock location" -msgstr "" - -#: templates/js/translated/part.js:205 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:206 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:214 -msgid "Add Supplier Data" -msgstr "" - -#: templates/js/translated/part.js:215 -msgid "Create initial supplier data for this part" -msgstr "" - -#: templates/js/translated/part.js:271 -msgid "Copy Image" -msgstr "" - -#: templates/js/translated/part.js:272 -msgid "Copy image from original part" -msgstr "" - -#: templates/js/translated/part.js:280 -msgid "Copy bill of materials from original part" -msgstr "" - -#: templates/js/translated/part.js:287 -msgid "Copy Parameters" -msgstr "" - -#: templates/js/translated/part.js:288 -msgid "Copy parameter data from original part" -msgstr "" - -#: templates/js/translated/part.js:301 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:316 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:332 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:345 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:350 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:359 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:363 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:368 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:397 +#: templates/js/translated/part.js:351 +msgid "Create Part" +msgstr "" + +#: templates/js/translated/part.js:353 +msgid "Create another part after this one" +msgstr "" + +#: templates/js/translated/part.js:354 +msgid "Part created successfully" +msgstr "" + +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:399 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:410 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:462 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:477 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:479 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:480 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:481 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:488 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:524 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:526 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:531 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:533 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:550 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:560 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:588 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1825 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:622 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:656 templates/js/translated/part.js:1010 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:660 templates/js/translated/part.js:1014 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:672 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:676 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:761 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:769 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:770 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:871 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:910 templates/js/translated/part.js:933 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:914 templates/js/translated/part.js:945 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1086 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1507 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1531 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1598 templates/js/translated/part.js:1936 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1792 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1823 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1847 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1851 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1960 templates/js/translated/part.js:2203 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1976 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2042 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2047 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2052 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2065 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2223 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2303 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2319 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2383 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2434 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2435 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2441 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2463 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2477 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2558 templates/js/translated/part.js:2559 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2561 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2567 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2617 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2623 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2719 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2735 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2780 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10354,831 +10699,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:54 +#: templates/js/translated/pricing.js:141 +msgid "Error fetching currency data" +msgstr "" + +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:196 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:305 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:361 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:362 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:480 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:502 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:602 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:624 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:713 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:753 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11190,19 +11976,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11214,10 +12000,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11238,18 +12020,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11297,10 +12071,6 @@ msgid "" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11365,55 +12135,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11433,50 +12199,50 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po index 04fcf4888d..76cb4d0615 100644 --- a/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Подробности об ошибке можно найти в панели администратора" @@ -29,23 +33,26 @@ msgstr "Подробности об ошибке можно найти в пан msgid "Enter date" msgstr "Введите дату" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Заметки" @@ -56,25 +63,25 @@ msgstr "" #: InvenTree/format.py:162 msgid "Provided value does not match required pattern: " -msgstr "" +msgstr "Предоставленное значение не соответствует требуемому формату: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Введите пароль" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Введите новый пароль" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Подтвердить пароль" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Подтвердите новый пароль" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Старый пароль" @@ -96,97 +103,97 @@ msgstr "Указанный основной адрес электронной п #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Указанный домен электронной почты не утверждён." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "недопустимое количество" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Файл не найден" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Вложения" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Выберите файл для вложения" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Ссылка" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Ссылка на внешний URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Комментарий" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Комментарий к файлу" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Пользователь" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "дата загрузки" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Имя файла не должно быть пустым" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Неверная директория вложений" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Имя файла содержит запрещенные символы '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Отсутствует расширение для имени файла" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Вложение с таким именем файла уже существует" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Ошибка переименования файла" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Название" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Описание" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "родитель" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Путь" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Валюта" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Имя файла" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Файл данных" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Выберите файл данных для загрузки" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Неподдерживаемый тип файла" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Файл слишком большой" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Столбцы в файле не найдены" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Строки данных в файле не найдены" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Строки данных в файле не найдены" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Повторяющийся столбец: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "Ссылка" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Чешский" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Датский" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Немецкий" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Греческий" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Английский" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Испанский" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Испанский (Мексика)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Фарси / Персидский" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Французский" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Иврит" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Венгерский" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Итальянский" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Японский" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Корейский" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Голландский" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Норвежский" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Польский" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Португальский" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Португальский (Бразильский диалект)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Русский" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Словенский" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Шведский" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Тайский" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Турецкий" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Китайский" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Проверка фонового работника не удалась" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Сервер электронной почты не настроен" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Ошибка проверки состояния системы InvenTree" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Ожидаемый" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Размещены" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Готово" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Отменено" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Потерян" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Возвращено" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Доставлено" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "Да" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Требует внимания" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Поврежденный" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Разрушено" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Отклоненный" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Отслеживание устаревших запасов" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Товар создан" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Отредактированный товар" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Присвоенный серийный номер" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Склад подсчитан" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Добавлен вручную" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Удалено вручную" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Расположение изменено" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Укомплектовано" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Удалено из сборки" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Установленный элемент компонента" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Удален элемент компонента" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Отделить от родительского элемента" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Разбить дочерний элемент" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Объединенные позиции на складе" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Отправлено клиенту" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Возвращено от клиента" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Создан вывод заказа сборки" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Вывод заказа сборки завершён" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Получено по заказу на покупку" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Продукция" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN должен совпадать с регулярным выражением {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Значение перегрузки не должно быть отрицательным" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Перегрузка не может превысить 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Редактировать информацию о пользователе" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Установить пароль" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Пароли должны совпадать" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Информация о системе" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Неверный выбор для родительской сборки" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Неверный выбор для родительской сборки msgid "Build Order" msgstr "Порядок сборки" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Порядок сборки" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Неверный выбор для родительской сборки" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Отсылка" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Краткое описание сборки" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Родительская сборка" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Детали" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Выберите часть для сборки" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Отсылка на заказ" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Расположение источника" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Место назначения" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Количество сборки" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Количество складских предметов для сборки" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Завершенные предметы" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Количество предметов на складе, которые были завершены" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Статус сборки" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Код статуса сборки" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Код партии для этого вывода сборки" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для сборки. Сборка будет просрочена после этой даты." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "выполнено" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Выдал/ла" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Пользователь, выпустивший этот заказ на сборку" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Пользователь, ответственный за этот заказ сборки" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Дополнительные заметки к сборке" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Вывод сборки не указан" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Вывод сборки уже завершен" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Вывод сборки не совпадает с порядком сборки" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент сборки должен указать вывод сборки, так как основная часть помечена как отслеживаемая" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Предмет на складе перераспределен" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Выделенное количество должно быть больше нуля" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Выбранная единица хранения не найдена в BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Сборка" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Предметы на складе" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Исходный складской предмет" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Количество" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" -msgstr "" +msgstr "Установить в" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" -msgstr "" +msgstr "Результат сборки не совпадает с родительской сборкой" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" -msgstr "" +msgstr "Результат этой сборки уже помечен как завершенный" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Введите количество для вывода сборки" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для результатов сборки" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Расположение" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Статус" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "BOM Компонент" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "Компонент должен быть в наличии" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Действия со штрих-кодом" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Печать" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "Печать отчета о заказе сборки" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Действия со сборкой" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Редактировать сборку" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Отменить сборку" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Удалить сборку" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Завершить сборку" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Описание сборки" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Целевая дата" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Просрочено" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Завершённые" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Заказ покупателя" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Выдано" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Удалить заказ на сборку" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Подробности сборки" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Назначение" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Партия" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Создано" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Заказать детали" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Печать" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Приложения" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Заметки сборки" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Новый заказ на сборку" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Печатать заказ на сборку" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "Незавершенные выходные данные" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Неподдерживаемый формат файла: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Ошибка чтения файла (неверная кодировка)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Ошибка чтения файла (неверный формат)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Ошибка чтения файла (неверный размер)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Ошибка чтения файла (данные могут быть повреждены)" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "Выберите {name} файл для загрузки" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Название компании" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Базовая ссылка" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Разрешить повторяющиеся IPN" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "Разрешить редактирование IPN" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Шаблон" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "По умолчанию детали являются шаблонами" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Сборка" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Компонент" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Можно продавать" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Отслеживание" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "По умолчанию детали являются отслеживаемыми" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Показывать связанные детали" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Разрешить повторяющиеся IPN" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "Разрешить редактирование IPN" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Шаблон" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "По умолчанию детали являются шаблонами" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Сборка" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Компонент" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Можно продавать" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Отслеживание" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "По умолчанию детали являются отслеживаемыми" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Показывать связанные детали" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Режим отладки" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:1596 +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 msgid "Show subscribed parts" msgstr "Показывать детали, на которые включены уведомления" -#: common/models.py:1597 +#: common/models.py:1711 msgid "Show subscribed parts on the homepage" msgstr "Показывать детали, на которые включены уведомления, на главной странице" -#: common/models.py:1603 +#: common/models.py:1717 msgid "Show subscribed categories" msgstr "Показывать категории, на которые включены уведомления" -#: common/models.py:1604 +#: common/models.py:1718 msgid "Show subscribed part categories on the homepage" msgstr "Показывать категории, на которые включены уведомления, на главной странице" -#: common/models.py:1610 +#: common/models.py:1724 msgid "Show latest parts" msgstr "Показывать последние детали" -#: common/models.py:1611 +#: common/models.py:1725 msgid "Show latest parts on the homepage" msgstr "Показывать последние детали на главной странице" -#: common/models.py:1617 +#: common/models.py:1731 msgid "Recent Part Count" msgstr "" -#: common/models.py:1618 +#: common/models.py:1732 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1624 +#: common/models.py:1738 msgid "Show unvalidated BOMs" msgstr "Показывать непроверенные BOMы" -#: common/models.py:1625 +#: common/models.py:1739 msgid "Show BOMs that await validation on the homepage" msgstr "Показывать BOMы, ожидающие проверки, на главной странице" -#: common/models.py:1631 +#: common/models.py:1745 msgid "Show recent stock changes" msgstr "Показывать изменившиеся складские запасы" -#: common/models.py:1632 +#: common/models.py:1746 msgid "Show recently changed stock items on the homepage" msgstr "Показывать единицы хранения с недавно изменившимися складскими запасами на главной странице" -#: common/models.py:1638 +#: common/models.py:1752 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1639 +#: common/models.py:1753 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1645 +#: common/models.py:1759 msgid "Show low stock" msgstr "Показывать низкие складские запасы" -#: common/models.py:1646 +#: common/models.py:1760 msgid "Show low stock items on the homepage" msgstr "Показывать единицы хранения с низкими складскими запасами на главной странице" -#: common/models.py:1652 +#: common/models.py:1766 msgid "Show depleted stock" msgstr "Показывать закончившиеся детали" -#: common/models.py:1653 +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "Показывать закончившиеся на складе единицы хранения на главной странице" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "Показывать требуемые детали" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "Показывать требуемые для сборки единицы хранения на главной странице" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "Показывать просрочку" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "Показывать единицы хранения с истёкшим сроком годности на главной странице" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "Показывать залежалые" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "Показывать залежалые единицы хранения на главной странице" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "Показывать незавершённые сборки" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "Показывать незавершённые сборки на главной странице" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "Показывать просроченные сборки" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "Показывать просроченные сборки на главной странице" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Цена" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Загрузить файл" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "Описание компании" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "Сайт" @@ -3086,6 +3355,7 @@ msgstr "Контактный телефон" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "EMail" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "Контактный EMail" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "Контакт" @@ -3105,11 +3378,11 @@ msgstr "Контактное лицо" msgid "Link to external company information" msgstr "Ссылка на описание компании" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Изображение" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "Заметки о компании" @@ -3137,229 +3410,230 @@ msgstr "производитель" msgid "Does this company manufacture parts?" msgstr "Является ли компания производителем деталей?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Валюта" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Для этой компании используется валюта по умолчанию" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Базовая деталь" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Выберите деталь" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Производитель" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Выберите производителя" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Код производителя" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "Ссылка на сайт производителя" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "Деталь производителя" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Наименование параметра" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Значение" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Значение параметра" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "Ед.изм" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "Единицы измерения" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Поставщик" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Выберите поставщика" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "Код поставщика" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "Ссылка на сайт поставщика" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Заметка" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Упаковка" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "Для этого поставщика используется валюта по умолчанию" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Код валюты" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "Компания" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Базовая деталь" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Выберите деталь" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Производитель" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Выберите производителя" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Код производителя" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "Ссылка на сайт производителя" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "Деталь производителя" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Наименование параметра" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Значение" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Значение параметра" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "Ед.изм" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "Единицы измерения" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Поставщик" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Выберите поставщика" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "Код поставщика" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "Ссылка на сайт поставщика" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Заметка" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Упаковка" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "Для этого поставщика используется валюта по умолчанию" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Создать заказ на закупку" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "Редактировать информацию о компании" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "Редактировать компанию" @@ -3400,14 +3674,17 @@ msgstr "Скачать изображение по ссылке" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Покупатель" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "Телефон" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "Загрузить изображение" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Скачать изображение" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Детали поставщиков" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Создать новую деталь поставщика" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Новая деталь поставщика" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "Заказать детали" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Удалить детали" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Удалить детали" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "Детали производителей" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "Создать новую деталь производителя" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "Новая деталь производителя" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Склад поставщика" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Заказы на закупку" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Создать новый заказ на закупку" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Новый заказ на закупку" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Заказы на продажу" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Создать новый заказ на продажу" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Новый заказ на продажу" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Список поставщиков" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Производители" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "Поставщики" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Удалить деталь поставщика" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "Удалить" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Параметры" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "Новый параметр" @@ -3619,8 +3926,8 @@ msgstr "Новый параметр" msgid "Delete parameters" msgstr "Удалить параметры" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "Добавить параметр" @@ -3636,55 +3943,31 @@ msgstr "Поставленные детали" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Деталь поставщика" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Действия со штрих-кодом" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "Редактировать деталь поставщика" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "Создать единицу хранения" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "Новая единица хранения" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Информация о цене" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Склад" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "Заказы" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Детали на складе" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "Новый поставщик" @@ -3819,7 +4075,7 @@ msgstr "Покупатели" msgid "New Customer" msgstr "Новый покупатель" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Компании" @@ -3827,519 +4083,604 @@ msgstr "Компании" msgid "New Company" msgstr "Новая компания" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Ширина [мм]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Высота [мм]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Фильтры" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Заказ на закупку" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "Общая стоимость" + +#: order/models.py:68 +msgid "Total price for this order" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "Компания, в которой детали заказываются" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "Компания, в которой детали заказываются" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "Курс покупки валюты" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих единиц хранения" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "Курс продажи валюты" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "Действия с заказом" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Отменить заказ" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "Удалить строку" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "Шаг %(step)s из %(count)s" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "Действия" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "Заказ на продажу не найден" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "Цена не найдена" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "Артикул" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "Наименование детали" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Версия" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Ключевые слова" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "Код категории" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "Минимальный запас" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "На складе" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "Сборки" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "Путь к категории" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Детали" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "IPN" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Место хранения по умолчанию" @@ -4855,814 +5260,939 @@ msgstr "Место хранения по умолчанию" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "Доступный запас" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Место хранения по умолчанию для деталей этой категории" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "Ключевые слова по умолчанию" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "Ключевые слова по умолчанию для деталей этой категории" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Категория детали" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Место хранения по умолчанию для деталей этой категории" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "Ключевые слова по умолчанию" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "Ключевые слова по умолчанию для деталей этой категории" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN должен совпадать с регулярным выражением {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном для других деталей?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Разновидность" -#: part/models.py:834 -msgid "Part description" -msgstr "Описание детали" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "Категория" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "Категория" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "Внутренний код детали" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "Версия детали" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "Эта деталь актуальна?" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "Родительская деталь" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "Шаблон параметра" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "Артикул или наименование детали" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "Значение IPN" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "Разрешить разновидности" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "Часть 1" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "Часть 2" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "Валюта покупки этой единицы хранения" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "Копировать параметры категории" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "Подходящая деталь не найдена" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "У вас нет прав редактировать BOM." #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "Действия с BOM" @@ -5683,85 +6213,85 @@ msgstr "Действия с BOM" msgid "Delete Items" msgstr "Удалить элементы" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "Вы подписаны на уведомления для данной категории" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "Включить уведомления для данной категории" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "Действия с категорией" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "Редактировать категорию" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "Редактировать категорию" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "Удалить категорию" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "Удалить категорию" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Подкатегории" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Детали (включая подкатегории)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "Создать новую деталь" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "Новая деталь" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "Настройки" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "Укажите категорию" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "Укажите категорию" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Параметры детали" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "Создать новую категорию деталей" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "Новая категория" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "Создать категорию деталей" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Обновить" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "Разновидности детали" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "Создать новую разновидность" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "Новая разновидность" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "Спецификация" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "Экспорт" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "Экспорт BOM" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "Сборки" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "Поставщики" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Действия со складом" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "Деталь может быть продана покупателям" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "Эта деталь является разновидностью %(link)s" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "Минимальный складской запас" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "Подходящие изображения не найдены" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "Разновидности" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Склад" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "Создать новую разновидность детали" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." -msgstr "Создать новую разновидность из шаблона '%(full_name)s'." +msgid "Create a new variant part from this template" +msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "Неизвестная база данных" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "Изображение детали не найдено" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "Автор не найден" msgid "No date found" msgstr "Дата не найдена" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "Исходная ссылка" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "Название шаблона" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "Файл шаблона отчёта" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Серийный номер" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Серийный номер" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "Код места хранения" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "Код детали поставщика" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "Код сборки" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "Родительская единица хранения" - -#: stock/models.py:658 -msgid "Base part" -msgstr "Базовая деталь" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Место хранения" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Места хранения" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Родительская единица хранения" + +#: stock/models.py:670 +msgid "Base part" +msgstr "Базовая деталь" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "Код партии для этой единицы хранения" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "Исходная сборка" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту единицу хранения при обнулении складского запаса" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "Заметки о единице хранения" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "Серийные номера уже существуют" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Серийные номера уже существуют" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "Установленные единицы хранения" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "Установить единицу хранения" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "Редактировать единицу хранения" msgid "Delete stock item" msgstr "Удалить единицу хранения" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "Родительский элемент" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "Предупреждение" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Действия с местом хранения" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Редактировать место хранения" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Удалить место хранения" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "Ответственный за место хранения" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "Места хранения" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Места хранения" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "Создать новое место хранения" @@ -7485,11 +8097,15 @@ msgstr "Создать новое место хранения" msgid "New Location" msgstr "Новое место хранения" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "Места хранения" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "Доступ запрещён" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "Настройки меток" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "Настройки входа" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "Настройки" @@ -7741,8 +8359,9 @@ msgid "Open in new tab" msgstr "Открыть в новой вкладке" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "Настройки уведомлений" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "Настройки деталей" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "Шаблон параметра детали" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "Настройки плагинов" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "Настройки заказа на закупку" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "Настройки отчётов" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "Изменить настройки" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "Изменить настройки плагинов" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "Изменить глобальные настройки" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "Изменить настройки пользователя" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "Шаблоны параметров категории не найдены" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "Редактировать шаблон" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "Удалить шаблон" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "Шаблоны параметров детали не найдены" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "Идентификатор" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,43 +8631,42 @@ msgid "User Settings" msgstr "Настройки пользователя" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Настройки учётной записи" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Настройки отображения" +msgid "Display" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "Главная страница" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Настройки поиска" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Поиск" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Глобальные настройки" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "Настройки заказов на продажу" msgid "Stock Settings" msgstr "Настройки склада" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Настройки учётной записи" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "Вы действительно хотите удалить выбранный адрес электронной почты?" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Настройки отображения" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Настройки темы" @@ -8271,9 +8909,9 @@ msgstr "" msgid "Home Page Settings" msgstr "Настройки главной страницы" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "Настройки уведомлений" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Настройки поиска" #: templates/about.html:9 msgid "InvenTree Version" @@ -8341,7 +8979,7 @@ msgstr "Подтверждение адреса электронной почт msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "Пожалуйста, подтвердите, что %(email)s является адресом электронной почты пользователя %(user_display)s." -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Подтвердить" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "Минимальное количество" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "Ошибка 400: Некорректный запрос" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "API-запрос вернул код ошибки 400" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "Ошибка 401: Авторизация не выполнена" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "Ошибка 403: Доступ запрещён" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "У вас нет прав доступа к этой функции" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "Ошибка 404: Ресурс не найден" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "Ошибка 405: Метод не разрешён" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "Ошибка 408: Таймаут" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "Необработанная ошибка" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "Код ошибки" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "Вложение не найдено" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "Ошибка сервера" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "Редактировать элемент BOM" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "Удалить элемент BOM" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "Элементы BOM не найдены" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "Унаследовано от родительского BOM" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "Добавить производителя" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "Добавить деталь производителя" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "Редактировать деталь производителя" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "Добавить поставщика" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "Добавить деталь поставщика" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "Все выбранные детали поставщика будут удалены" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "Добавить новую компанию" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "Информация о компании не найдена" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Удалить параметры" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "Информация о детали производителя не найдена" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "Деталь-шаблон" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "Параметры не найдены" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "Редактировать параметр" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "Удалить параметр" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "Редактировать параметр" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "Удалить параметр" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "Информация о детали поставщика не найдена" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "Редактировать деталь поставщика" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "Удалить деталь поставщика" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "Последнее обновление" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" -msgstr "Скачать данные" - -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" +msgstr "" + +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "Операция создания не разрешена" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "Операция обновления не разрешена" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "Операция удаления не разрешена" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "Операция просмотра не разрешена" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Форма содержит ошибки" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "Не найдено" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "Метки не найдены" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "Метки не найдены" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "Отменить" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Подтвердить" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "Ошибка отправки данных формы" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "Ошибка 400: Некорректный запрос" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "Сервер вернул код ошибки 400" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "Ошибка запроса данных формы" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "Код компании" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "Код склада" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "Код заказа" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "Код детали производителя" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "Отмена этого заказа означает, что заказ нельзя будет редактировать." - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "Редактировать заказ на закупку" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "Добавить код партии" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "Заказов на закупку не найдено" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "Общая стоимость" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" -msgstr "Заказы на продажу не найдены" - -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Подтвердите выделение запасов" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "Настройки дублирования детали" msgid "Add Part Category" msgstr "Добавить категорию" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "Копировать параметры категории" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "Родительская категория" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "Редактировать категорию" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "Вы уверены, что хотите удалить эту категорию?" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "Удалить категорию" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "Создать деталь" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "Создать ещё одну деталь после этой" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "Деталь создана успешно" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "Создать разновидность детали" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "Вы подписаны на уведомления для данного элемента" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "Вы подписались на уведомления для данного элемента" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "Включить уведомления для данного элемента" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "Вы отписались от уведомлений для данного элемента" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "Отслеживаемая деталь" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Разновидности не найдены" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "Заказов на закупку не найдено" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "Детали не найдены" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Нет категории" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "Список" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "Таблица" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "Укажите категорию" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "Дерево" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "Редактировать заказ на закупку" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "Добавить код партии" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "Выберите шаблон отчёта" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "Отчёты не найдены" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" -msgstr "Выберите заказ на продажу" - -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "Отмена этого заказа означает, что заказ нельзя будет редактировать." + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "Заказы на продажу не найдены" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Подтвердите выделение запасов" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "Вы уверены, что хотите удалить место хранения?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "Создано несколько единиц хранения" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "Предупреждение: Операция объединения не может быть отменена" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "Следующие данные будут потеряны в процессе объединения" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "История складских перемещений будет удалена для объединённых элементов" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "Информация о деталях поставщика будет удалена для объединённых элементов" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "Отслеживаемая деталь" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "Код партии" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "Статус сборки" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "Отслеживаемая деталь" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "Код партии" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "Статус сборки" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "Загрузка данных" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "строк на странице" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "Показываются все строки" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Показано от" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "до" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "из" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "строк" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Поиск" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Ничего не найдено" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "Закупки" msgid "Sell" msgstr "Продажи" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "Электронная почта не настроена" msgid "Barcode Actions" msgstr "Действия со штрих-кодом" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "Настройки склада" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Права доступа" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "Права доступа" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Вид" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Разрешение на просмотр элементов" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Разрешение на добавление элементов" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Разрешение на редактирование элементов" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Разрешение на удаление элементов" diff --git a/InvenTree/locale/sl/LC_MESSAGES/django.po b/InvenTree/locale/sl/LC_MESSAGES/django.po index 34738a8298..54e0c13f4d 100644 --- a/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Napaka, podrobnosti vidne v pogledu administratorja" @@ -29,23 +33,26 @@ msgstr "Napaka, podrobnosti vidne v pogledu administratorja" msgid "Enter date" msgstr "Vnesi datum" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Zapiski" @@ -58,23 +65,23 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu" msgid "Provided value does not match required pattern: " msgstr "Podana vrednost se ujema s predpisanim vzorcem: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Vnesite geslo" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Vnesite novo geslo" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Potrdite geslo" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Potrdite novo geslo" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Staro geslo" @@ -98,95 +105,95 @@ msgstr "Podana epošta ni veljavna." msgid "The provided email domain is not approved." msgstr "Domena epošte ni podprta." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Podana napačna količina" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Prazno polje serijske številke" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "Dvojna serijska številka" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Nepravilni obseg skupine: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "Obseg skupine {g} presega dovoljeno vrednost ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Nepravilno zaporedje skupine: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Serijske številke niso najdene" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Število unikatnih serijskih številk ({s}) se mora ujemati s količino ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Odstranite oznako HTML iz te vrednosti" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Nepravilno nastavljen vzorec" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Nastavljen neprepoznan ključ formata" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Manjka obvezen ključ formata" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Referenčno polje ne sme biti prazno" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Referenca se mora ujemati s vzorcem" @@ -194,566 +201,615 @@ msgstr "Referenca se mora ujemati s vzorcem" msgid "Reference number is too large" msgstr "Referenčna številka prevelika" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Manjka datoteka" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Priloga" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Izberite prilogo" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Povezava" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Zunanja povezava" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Komentar" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Komentar datoteke" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Uporabnik" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "naloži datum" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Ime ne sme biti prazno" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Neveljavna mapa prilog" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Ime datoteke vsebuje neveljavni znak '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Datoteki manjka končnica" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Priloga s tem imenom že obstaja" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Napaka pri preimenovanju datoteke" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "nadrejen" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Pot" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "Podatki čtrne kode" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "Podatki črtne kode tretje osebe" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "Oznaka črtne kode" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "Enolična oznaka podatkov črtne kode" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Ime datoteke" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Podatki datoteke" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Izberite datoteke za naložiti" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Nepodprta vrsta datotek" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Datoteka je prevelika" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "V datoteki ni bilo najdenih stolpcev" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "V datoteki ni bilo njadenih vrstic" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Niso bile podane vrste s podatki" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Niso bili podani stolpci s podatki" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Manjka obvezni stolpec: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Dvojni stolpec: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "Povezava" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Češko" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "Danščina" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Nemščina" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Grščina" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Angleščina" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Španščina" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Španščina (Mehiško)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Perzijsko" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Francoščina" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebrejščina" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Madžarščina" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italijanščina" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japonščina" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Korejščina" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Nizozemščina" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norveščina" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Poljščina" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugalščina" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugalščina (Brazilsko)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Ruščina" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "Slovenščina" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Švedščina" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Tajščina" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turščina" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamščina" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Kitajščina" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Nadzor dela v ozadju neuspel" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Zaledje e-pošte ni nastavljeno" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "Preverjanje zdravja sistema InvenTree neuspelo" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "V teku" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Postavljeno" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Končano" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Preklicano" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Izgubljeno" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Vrnjeno" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Poslano" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Potrebna pozornost" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Poškodovano" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Uničeno" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Zavrnjeno" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "Dano v karanteno" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Vnos zaloge postavke" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Postavka zaloge ustvarjena" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Urejena postavka zaloge" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Dodeljena serijska številka" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Zaloga prešteta" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Zaloga ročno dodana" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Zaloga ročno odstranjena" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Lokacija spremenjena" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Vstavljeno v sestavo" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Odstranjeno iz sestave" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Vstavljena postavka komponente" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Odstranjena postavka komponente" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Razdeljena od nadrejene postavke" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Razdeljena podrejena postavka" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Združena zaloga postavk" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Spremenjeno v varianto" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Posalno stranki" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Vrnjeno od stranke" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Nalog za izgradnjo ustvarjen" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Nalog za izgradnjo končan" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Porabljeno v nalogu za izgradnjo" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Prejeto z nalogom za nabavo" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Proizvodnja" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "Notranja številka dela se mora ujemati z vzorcem {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Prestara vrednost ne sme biti negativna" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Prestarost ne sme presegati 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Neveljavna vrednost za prestarost" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Uredite informacije o uporabniku" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Nastavite geslo" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Polja z geslom se morajo ujemati" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Vnešeno nepravilno geslo" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Sistemske informacije" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Neveljavna izbira za nadrejeno izgradnjo" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Neveljavna izbira za nadrejeno izgradnjo" msgid "Build Order" msgstr "Nalog izgradnje" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Neveljavna izbira za nadrejeno izgradnjo" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referenca" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Kratek opis izgradnje" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Del" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Dobavnica na katero se navezuje ta izgradnja" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izberite lokacijo dela za to izgradnjo (v primeru da ni pomembno pusti prazno)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Rok končanja izdelave. Izdelava po tem datumu bo v zamudi po tem datumu." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "dokončal" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Izdal" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Uporabnik odgovoren za to izgradnjo" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Dodatni zapiski izdelave" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Izdelana postavka mora imeti izgradnjo, če je glavni del označen kot sledljiv" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Izbrana postavka ni najdena v BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Izdelava" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Izdelaj da prestaviš dele" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Količina" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "Notranja številka dela se mora ujemati z vzorcem {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po index e3bba54165..6c9e0c4754 100644 --- a/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Användaren har inte behörighet att se denna modell" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Information om felet finns under Error i adminpanelen" @@ -29,23 +33,26 @@ msgstr "Information om felet finns under Error i adminpanelen" msgid "Enter date" msgstr "Ange datum" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Anteeckningar" @@ -58,23 +65,23 @@ msgstr "Värdet '{name}' visas inte i mönsterformat" msgid "Provided value does not match required pattern: " msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Ange lösenord" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Ange nytt lösenord" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Bekräfta lösenord" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Bekräfta nytt lösenord" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Tidigare lösenord" @@ -92,101 +99,101 @@ msgstr "Du måste ange samma e-post varje gång." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Den angivna primära e-postadressen är inte giltig." #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Den angivna e-postdomänen är inte godkänd." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "Ogiltigt gruppområde: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "Ogiltig gruppsekvens: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "Antal unika serienummer ({s}) måste matcha antal ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "Felaktigt formaterat mönster" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "Okänd formatnyckel angiven" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "Obligatorisk formatnyckel saknas" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "Textfältet kan inte lämnas tomt" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "Referensen måste matcha obligatoriskt mönster" @@ -194,566 +201,615 @@ msgstr "Referensen måste matcha obligatoriskt mönster" msgid "Reference number is too large" msgstr "Referensnumret är för stort" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Saknad fil" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Extern länk saknas" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Bilaga" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Välj fil att bifoga" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Länk" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Länk till extern URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Användare" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "uppladdningsdatum" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Filnamnet får inte vara tomt" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Ogiltig katalog för bilaga" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Filnamnet innehåller ogiltiga tecken '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Filnamn saknar ändelse" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Det finns redan en bilaga med detta filnamn" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Fel vid namnbyte av fil" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Beskrivning" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "överordnad" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "Sökväg" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Filnamn" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Datafil" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Välj fil för uppladdning" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Filtypen stöds inte" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Filen är för stor" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Inga kolumner hittades i filen" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Inga rader hittades i filen" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Inga rader angivna" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Inga datakolumner har angetts" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Saknar obligatorisk kolumn: '{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Duplicerad kolumn: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "URL för fjärrbildsfil" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "Tjeckiska" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Tyska" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Grekiska" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "Engelska" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "Spanska" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "Spanska (Mexikanska)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "Farsi / Persiska" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Franska" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "Hebreiska" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Ungerska" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "Italienska" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japanska" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Koreanska" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Nederländska" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norska" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polska" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "Portugisiska" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "Portugisiska (brasiliansk)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Ryska" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "Svenska" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Thailändska" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Turkiska" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Kinesiska" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Kontroll av bakgrundsarbetare misslyckades" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "Backend för e-post är inte konfigurerad" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InvenTree systemhälsokontroll misslyckades" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Väntar" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Placerad" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Slutför" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "Avbruten" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Förlorad" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "Återlämnad" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Skickad" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "OBS!" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Skadad" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Förstörd" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Avvisad" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "I karantän" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Spårningspost för äldre lager" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Lagerpost skapad" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Redigerade lagerpost" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Tilldelade serienummer" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Lagersaldo beräknat" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Lagerpost manuellt tillagd" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Lagerpost manuellt borttagen" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Platsen har ändrats" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Installerad i montering" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Borttagen från montering" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Installerat komponentobjekt" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Tog bort komponentobjekt" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Dela från överordnat objekt" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Dela underordnat objekt" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Sammanfogade lagerposter" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "Konverterad till variant" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Skickat till kund" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Returnerad från kund" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Bygg orderutgång skapad" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Bygg orderutgång slutförd" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "Konsumeras av byggorder" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Mottagen mot inköpsorder" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Produktion" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN måste matcha regex mönster {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Överskott värde får inte vara negativt" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Överskott får inte överstiga 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "Ogiltigt värde för överskott" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Redigera användarinformation" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Ställ in lösenord" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Lösenorden måste matcha" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "Felaktigt lösenord angivet" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Systeminformation" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "Byggnationen måste avbrytas innan den kan tas bort" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "Ogiltigt val för överordnad bygge" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "Ogiltigt val för överordnad bygge" msgid "Build Order" msgstr "Byggorder" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "Ogiltigt val för överordnad bygge" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Byggorderreferens" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referens" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Kort beskrivning av bygget" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Överordnat Bygge" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Byggorder till vilken detta bygge är tilldelad" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Del" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Välj del att bygga" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Försäljningsorder till vilken detta bygge allokeras" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Välj plats att ta lager från för detta bygge (lämna tomt för att ta från någon lagerplats)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Välj plats där de färdiga objekten kommer att lagras" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Bygg kvantitet" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Byggstatus" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Bygg statuskod" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Byggandet kommer att förfallas efter detta datum." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "slutfört av" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Användare som utfärdade denna byggorder" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Användare som ansvarar för denna byggorder" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Extern länk" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Extra bygganteckningar" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Byggorder {build} har slutförts" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "En byggorder har slutförts" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Byggobjekt måste ange en byggutgång, eftersom huvuddelen är markerad som spårbar" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "Vald lagervara hittades inte i BOM" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Bygg" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Bygg för att allokera delar" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Antal" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Installera till" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Plats" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Status" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Redigera bygge" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Avbryt bygge" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "Ta bort bygge" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Färdigställ bygget" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "Byggbeskrivning" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Måldatum" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Försenad" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Slutförd" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Försäljningsorder" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Utfärdad av" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Mål" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Skapad" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Beställ obligatoriska delar" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Beställ delar" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Skriv ut etiketter" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bilagor" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Bygganteckningar" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Ny byggorder" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Skriv ut byggorder" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Filformatet stöds inte: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Fel vid läsning av fil (ogiltig kodning)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Fel vid läsning av filen (ogiltigt format)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Fel vid läsning av filen (felaktig dimension)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Fel vid läsning av fil (data kan vara skadat)" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} Fil" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "Ingen grupp" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "Omstart krävs" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Företagsnamn" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Bas-URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "Ladda ned från URL" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Tillåt nedladdning av bilder och filer från extern URL" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "Kräv bekräftelse" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "Kräv uttrycklig användarbekräftelse för vissa åtgärder." -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Stöd för streckkoder" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Aktivera stöd för streckkodsläsare" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Virtuell" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Delar är virtuella som standard" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "Visa import i vyer" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "Visa importguiden i vissa delvyer" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "Visa relaterade delar" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "Visa relaterade delar för en del" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "Visningsformat för delnamn" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "Formatera för att visa artikelnamnet" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Stöd för streckkoder" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Aktivera stöd för streckkodsläsare" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Virtuell" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Delar är virtuella som standard" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "Visa import i vyer" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "Visa importguiden i vissa delvyer" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "Visa relaterade delar" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "Visa relaterade delar för en del" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "Visningsformat för delnamn" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "Formatera för att visa artikelnamnet" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "Interna priser" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Debugläge" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Sidstorlek" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "Aktivera testrapporter" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" -msgstr "" +msgstr "Sök efter artiklar" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" -msgstr "" +#: common/models.py:1871 +msgid "Search Supplier Parts" +msgstr "Sök efter leverantörsartikel" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "Sök efter tillverkarartikel" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" -msgstr "" +msgstr "Artiklar" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN måste matcha regex mönster {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Bekräfta" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" -msgstr "" +msgstr "Välj artiklar" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po index 87112056d9..8db9f7ea75 100644 --- a/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -29,23 +33,26 @@ msgstr "" msgid "Enter date" msgstr "ป้อนวันที่" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "หมายเหตุ" @@ -58,23 +65,23 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "ป้อนรหัสผ่าน" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "ป้อนรหัสผ่านใหม่" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "ยืนยันรหัสผ่าน" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "ยืนยันรหัสผ่านใหม่" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "รหัสผ่านเดิม" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "หมายเลขซีเรียลซ้ำกัน" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "ไม่พบหมายเลขซีเรียล" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "ไฟล์แนบ" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "เลือกไฟล์ที่ต้องการแนบ" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "ลิงก์" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "ความคิดเห็น" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "ความเห็นของไฟล์" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "ผู้ใช้งาน" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "วันที่อัปโหลด" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "จำเป็นต้องใส่ชื่อไฟล์" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "ชื่อไฟล์ห้ามมีตัวอักษรต้องห้าม '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "ไม่พบนามสกุลของไฟล์" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "คำอธิบาย" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "ข้อมูลบาร์โค้ด" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "ชื่อไฟล์" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "ไฟล์ข้อมูล" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "เลือกไฟล์ข้อมูลที่จะอัปโหลด" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "ไฟล์มีขนาดใหญ่เกินไป" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "ภาษาโปรตุเกส" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "ภาษารัสเซีย" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "ภาษาสวีเดน" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "ภาษาไทย" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "ภาษาเวียดนาม" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "ภาษาจีน" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "อยู่ระหว่างดำเนินการ" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "สำเร็จแล้ว" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "ยกเลิกแล้ว" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "สูญหาย" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "ส่งคืนแล้ว" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "จัดส่งแล้ว" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "ตกลง" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "ได้รับความเสียหาย" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "ทำลายแล้ว" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "ถูกปฏิเสธ" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "จัดส่งให้ลูกค้าแล้ว" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "แก้ไขข้อมูลสมาชิก" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "ตั้งรหัสผ่าน" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "รหัสผ่านต้องตรงกัน" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "ป้อนรหัสผ่านไม่ถูกต้อง" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "ข้อมูลระบบ" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "เกี่ยวกับ Inventree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "สถานะ" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "" @@ -8271,8 +8909,8 @@ msgstr "" msgid "Home Page Settings" msgstr "" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" msgstr "" #: templates/about.html:9 @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po index 5c01655794..a9e83829a3 100644 --- a/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "Kullanıcının bu modeli görüntüleme izni yok" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "Hata detaylarını admin panelinde bulabilirsiniz" @@ -29,23 +33,26 @@ msgstr "Hata detaylarını admin panelinde bulabilirsiniz" msgid "Enter date" msgstr "Tarih giriniz" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "Notlar" @@ -56,25 +63,25 @@ msgstr "" #: InvenTree/format.py:162 msgid "Provided value does not match required pattern: " -msgstr "" +msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "Şifrenizi girin" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "Lütfen Yeni Parolayı Girin" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Parolayı doğrulayın" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Yeni parolayı doğrulayın" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "Eski parola" @@ -92,101 +99,101 @@ msgstr "Her seferind eaynı e-posta adresini yazmalısınız." #: InvenTree/forms.py:230 InvenTree/forms.py:236 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Sağlanan e-posta adresi geçerli değil." #: InvenTree/forms.py:242 msgid "The provided email domain is not approved." -msgstr "" +msgstr "Sağlanan e-posta alanı onaylanmadı." -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "Resim boyutu çok büyük" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "Resim indirme boyutu izin verilenden büyük" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir resim dosyası değil" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" -msgstr "" +msgstr "Yinelenen seri" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" -msgstr "" +msgstr "Geçersiz grup: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "Eksik dosya" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "Ek" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "Bağlantı" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Yorum" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "Dosya yorumu" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Kullanıcı" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "yükleme tarihi" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Dosya adı boş olamaz" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "Ek dosya yolu geçersiz" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Dosya adı geçersiz karakterler içeriyor'{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "Dosya uzantısı yok" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "Aynı isimli başka bir dosya zaten var" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "Dosya adı değiştirilirken hata" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Açıklama" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "üst" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "Para birimi" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Dosya adı" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "Veri Dosyası" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "Yüklemek istediğiniz dosyayı seçin" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "Desteklenmeyen dsoya tipi" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "Dosya boyutu çok büyük" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "Dosyada kolon bulunamadı" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "Dosyada satır bulunamadı" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "Dosyada satır bulunamadı" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "Dosyada uygun kolon bulunamadı" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "Gerekli kolon ismi eksik:'{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "Tekrarlanan kolon ismi:'{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "Almanca" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "Yunanca" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "İngilizce" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "İspanyolca" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "İspanyolca(Meksika)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "Fransızca" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "İbranice" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "Macarca" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "İtalyanca" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "Japonca" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "Korece" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "Flemenkçe" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "Norveççe" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "Polonyaca" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "Rusça" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "İsveççe" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "Tay dili" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "Türkçe" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "Vietnamca" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "Çince" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "Arka plan çalışanı kontrolü başarısız oldu" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "E-posta arka ucu yapılandırılmadı" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InvenTree sistem sağlık kontrolü başarısız" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "Bekliyor" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "Sipariş verildi" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "Tamamlandı" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "İptal edildi" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "Kayıp" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "İade" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "Sevk edildi" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "TAMAM" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "Dikkat gerekli" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "Hasarlı" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "Kullanılamaz durumda" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "Reddedildi" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "Eski stok izleme girişi" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "Stok kalemi oluşturuldu" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "Düzenlenen stok kalemi" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "Atanan seri numarası" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "Stok sayıldı" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "Stok manuel olarak eklendi" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "Stok manuel olarak çıkarıldı" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "Konum değişti" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "Montajda kullanıldı" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "Montajdan çıkarıldı" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "Bileşen ögesinde kullanıldı" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "Bileşen ögesinden çıkarıldı" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "Üst ögeden ayır" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "Alt ögeyi ayır" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "Stok parçalarını birleştir" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "Müşteriye gönderildi" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "Müşteriden geri döndü" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "Yapım emri çıktısı oluşturuldu" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "Yapım emri çıktısı tamamlandı" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "Satın alma emri karşılığında alındı" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "Üretim" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN regex kalıbıyla eşleşmelidir {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "Fazlalık değeri negatif olmamalıdır" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "Fazlalık %100'ü geçmemelidir" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "Kullanıcı Bilgisini Düzenle" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "Şifre Belirle" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "Parola alanları eşleşmelidir" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Sistem Bilgisi" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "InvenTree Hakkında" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "Yapım İşi Emri" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Yapım İşi Emirleri" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "Referans" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "Yapım işinin kısa açıklaması" +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Parça" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "Yapım işi için parça seçin" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Bu yapım işi için stok alınacak konumu seçin (her hangi bir stok konumundan alınması için boş bırakın)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "Yapım İşi Miktarı" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "Yapım işi stok kalemlerinin sayısı" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "Yapım İşi Durumu" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak." -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "Veren" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "Bu yapım işi emrini veren kullanıcı" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "Bu yapım işi emrinden sorumlu kullanıcı" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "Yapım işi için ekstra notlar" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "Yapım işi çıktısı belirtilmedi" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "Yapım işi çıktısı zaten tamamlanmış" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "Yapım İşi" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "Yapım işi için tahsis edilen parçalar" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "Miktar" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "Yapım işi için tahsis edilen stok miktarı" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "Kurulduğu yer" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "Yapım işi çıktısı için seri numaraları girin" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "Konum" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Durum" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "Gerekli yapım işi miktarı tamamlanmadı" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "Barkod işlemleri" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "Yazdırma işlemleri" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "Yapım İşi işlemleri" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "Yapım İşini Düzenle" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "Yapım İşini İptal Et" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "Tamamlanmış Yapım İşi" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Bu yapım işi emri, %(link)s sipariş emrine tahsis edilmiştir" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "Bu yapım işi emri, %(link)s yapım iş emrinin altıdır" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "Yapım işi tamamlandı olarak işaretlenmeye hazır" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "Bekleyen çıktılar kaldığı için yapım işi emri tamamlanamıyor" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "Gerekli yapım işi miktarı henüz tamamlanmadı" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "Hedeflenen tarih" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "Vadesi geçmiş" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Tamamlandı" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "Sipariş Emri" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "Veren" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "Yapım İşi Emrini Sil" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "Yapım İşi Detayları" @@ -1497,8 +1652,8 @@ msgstr "Stok Kaynağı" msgid "Stock can be taken from any available location." msgstr "Stok herhangi bir konumdan alınabilir." -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "Hedef" @@ -1510,21 +1665,23 @@ msgstr "Hedef konumu belirtilmedi" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "Toplu" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "Oluşturuldu" @@ -1544,7 +1701,7 @@ msgstr "Alt Yapım İşi Emrileri" msgid "Allocate Stock to Build" msgstr "Yapım İşi için Stok Tahsis Et" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "Stok tahsisini kaldır" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "Gerekli parçaları sipariş edin" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "Parça Siparişi" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "Yazdırma İşlemleri" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "Etiketleri yazdır" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "Tamamlanmış Yapım İşi Çıktıları" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Ekler" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "Yapım İşi Notları" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "Yeni Yapım İşi Emri" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "Yapım İşi Emirlerini Yazdır" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "Tamamlanmamış Çıktılar" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "Desteklenmeyen dosya formatı: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "Dosya okurken hata (geçersiz biçim)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "Dosya okurken hata (geçersiz biçim)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "Dosya okurken hata (hatalı ölçüler)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "Dosya okurken hata (veri bozulmuş olabilir)" @@ -1722,1272 +1871,1388 @@ msgstr "{name.title()} Dosya" msgid "Select {name} file to upload" msgstr "{name} dosyasını yüklemek için seçin" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "Şirket adı" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "Ana URL" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "URL'den indir" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "Barkod Desteği" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "Barkod tarayıcı desteğini etkinleştir" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "DPN Regex" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "Yinelenen DPN'ye İzin Ver" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "DPN Düzenlemeye İzin Ver" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "Kategori Paremetre Sablonu Kopyala" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "Şablon" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "Parçaları varsayılan olan şablondur" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "Montaj" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "Bileşen" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "Satın Alınabilir" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "Parçalar varsayılan olarak satın alınabilir" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "Satılabilir" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "Parçalar varsayılan olarak satılabilir" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "Takip Edilebilir" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "Parçalar varsayılan olarak takip edilebilir" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "Sanal" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "Parçalar varsayılan olarak sanaldır" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "İlgili parçaları göster" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "günler" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "Barkod Desteği" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "Barkod tarayıcı desteğini etkinleştir" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "DPN Regex" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "Yinelenen DPN'ye İzin Ver" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "DPN Düzenlemeye İzin Ver" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "Kategori Paremetre Sablonu Kopyala" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "Şablon" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "Parçaları varsayılan olan şablondur" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "Montaj" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "Bileşen" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "Satın Alınabilir" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "Parçalar varsayılan olarak satın alınabilir" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "Satılabilir" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "Parçalar varsayılan olarak satılabilir" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "Takip Edilebilir" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "Parçalar varsayılan olarak takip edilebilir" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "Sanal" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "Parçalar varsayılan olarak sanaldır" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "İlgili parçaları göster" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "Formlarda Miktarı Göster" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "Formlarda Miktarı Göster" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "Fiyat" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "Aktif" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "Dosya Yükle" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "Alanları Eşleştir" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "İletişim telefon numarası" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "E-posta" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "İletişim e-posta adresi" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "İletişim" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "Resim" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "üretici mi" msgid "Does this company manufacture parts?" msgstr "Bu şirket üretim yapıyor mu?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "Para birimi" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "Temel Parça" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "Parça seçin" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Üretici" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "Üretici seçin" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "ÜPN" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "Üretici Parça Numarası" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "Parametre adı" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "Değer" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "Parametre değeri" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Tedarikçi" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "Tedarikçi seçin" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "Not" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "temel maliyet" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "Paketleme" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "çoklu" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "Mevcut" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "Para Birimi Kodu" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "Temel Parça" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "Parça seçin" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Üretici" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "Üretici seçin" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "ÜPN" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "Üretici Parça Numarası" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "Parametre adı" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "Değer" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "Parametre değeri" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Tedarikçi" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "Tedarikçi seçin" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "Not" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "temel maliyet" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "Paketleme" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "çoklu" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "Mevcut" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "Satın Alma Emri Oluştur" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "Müşteri" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "Resmi İndirin" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "Tedarikçi Parçaları" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "Yeni tedarikçi parçası oluştur" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "Yeni Tedarikçi Parçası" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "Parçaları sil" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "Parçaları Sil" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "Tedarikçi Stoku" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "Satın Alma Emirleri" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "Yeni satın alma emri oluştur" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Yeni Satın Alma Emri" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "Satış Emirleri" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "Yeni satış emri oluştur" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "Yeni Satış Emri" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "Atanan Stok" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "Üreticiler" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "Parça siparişi" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "Tedarikçi parçalarını sil" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "Tedarikçi Parçası" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "Barkod işlemleri" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "Tedarikçi Parça Stoku" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "Tedarikçi Parçası Emirleri" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "Fiyat Bilgisi" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Stok" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "Tedarikçi Parçası Fiyatlandırması" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "Fiyatlandırma" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "Stok Kalemleri" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "Tedarikçi Parçası Fiyatlandırması" + #: company/views.py:33 msgid "New Supplier" msgstr "Yeni Tedarikçi" @@ -3819,7 +4075,7 @@ msgstr "Müşteriler" msgid "New Customer" msgstr "Yeni Müşteri" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "Şirketler" @@ -3827,519 +4083,604 @@ msgstr "Şirketler" msgid "New Company" msgstr "Yeni Şirket" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "Etiket adı" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "Etiket tanımı" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "Etiket" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "Etiket şablon listesi" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "Etkin" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "Etiket sablonu etkinleştirildi" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "Genişlik [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "Etiket genişliği mm olarak belirtilmeli" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "Yükseklik [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "Etiket yüksekliği mm olarak belirtilmeli" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "Dosya Adı Deseni" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "Etiket dosya adları oluşturma için desen" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "Filtreler" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" -msgstr "Sipariş açıklaması" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:93 -msgid "Created By" -msgstr "Oluşturan" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "Sipariş notları" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "Sipariş referansı" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "Oluşturan" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "Sipariş notları" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "Sipariş referansı" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "Emiri dosya çıkar" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "Siparişi iptal et" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "Siparişi tamamlandı olarak işaretle" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "Sipariş Notları" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "Toplam Maliyet" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "İşlemler" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "DPN" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "Revizyon" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Parçalar" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "Varsayılan Konum" @@ -4855,814 +5260,939 @@ msgstr "Varsayılan Konum" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "Bu kategori içindeki parçalar için varsayılan konum" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "Bu kategori içindeki parçalar için varsayılan konum" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN regex kalıbıyla eşleşmelidir {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "Parça adı" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın çeşidi mi?" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "Çeşidi" -#: part/models.py:834 -msgid "Part description" -msgstr "Parça açıklaması" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "Varsayılan Tedarikçi" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "Varsayılan tedarikçi parçası" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan yapılabilir mi?" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların yapımında kullanılabilir mi?" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "Gerekli" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "Çeşide İzin Ver" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "Parçalar (Alt kategoriler dahil)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "Kategori ayarla" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "Kategori Ayarla" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "Yenile" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "Parça Test Şablonları" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "Test Şablonu Ekle" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "Parça Çeşitleri" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "Yeni çeşit oluştur" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "Yeni Çeşit" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "Parça Tedarikçileri" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "Etiket Yazdır" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "Stok işlemleri" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "Pasif" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "Pasif" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "Bu parça %(link)s parçasının bir çeşididir" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "Son Seri Numarası" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "Hesapla" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "Birim Maliyeti" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "Toplam Maliyet" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Stok" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "Fiyatlandırma" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "Stok Yok" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "Yeni parça çeşidi oluştur" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "Şablon için geçerli bir nesne sağlanmadı" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "Şablon adı" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "Rapor şablon dosyası" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "Rapor şablon tanımı" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "Revizyon numarası raporla (otomatik artış)" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "Rapor şablonu etkin" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "Stok kalemi sorgu filtreleri (anahter=değer [key=value] olarak virgülle ayrılmış liste)" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "İçin Gerekli Olan" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "Seri Numara" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "Seri Numara" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "Seri No" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "Seri numarası olan ögenin miktarı bir olmalı" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "Üst Stok Kalemi" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "Bu stok kalemi için tedarikçi parçası seçin" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "Stok Konumları" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "Seri numarası olan ögenin miktarı bir olmalı" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "Üst Stok Kalemi" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "Bu stok kalemi için tedarikçi parçası seçin" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "Seri numaraları zaten mevcut: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "Seri numaraları zaten mevcut" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "Seri numaraları zaten mevcut" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "Konuma Tara" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "Yazdırma işlemleri" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "Stok ayarlama işlemleri" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "Stoku seri numarala" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "Stok kalemi tüm gerekli testleri geçmedi" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "Bu stok kalemi seri numaları - Benzersiz bir seri numarasına sahip ve miktarı ayarlanamaz." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "Konum ayarlanmadı" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "Stok kalemi tüm gerekli testleri geçmedi" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erdi" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erecek" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "Uyarı" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "Bu işlem kolayca geri alınamaz" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "Stok Kalemine Dönüştür" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "Bu stok kalemi için seri numaralandırılmış ögeler oluştur." msgid "Select quantity to serialize, and unique serial numbers." msgstr "Seri numaralandırılacak miktarı ve benzersiz seri numaralarını seçin." -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "Konum işlemleri" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "Konumu düzenle" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "Konumu sil" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Bu konumun sahipleri listesinde değilsiniz. Bu stok konumu düzenlenemez." @@ -7472,11 +8089,6 @@ msgstr "Bu konumun sahipleri listesinde değilsiniz. Bu stok konumu düzenleneme msgid "Sublocations" msgstr "Alt konumlar" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "Stok Konumları" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "Yeni stok konumu oluştur" @@ -7485,11 +8097,15 @@ msgstr "Yeni stok konumu oluştur" msgid "New Location" msgstr "Yeni Konum" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "Stok Konumu QR Kodu" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "Giriş" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "Parça Parametre Şablonu" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "Kategori parametre şablonu bulunamadı" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "Şablonu Düzenle" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "Şablonu Sil" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "Kategori Parametre Şablonu Oluştur" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "Kategori Parametre Şablonu Sil" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "Kategori Parametre Şablonu Oluştur" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "Parça parametre şablonu bulunamadı" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "Parça Parametre Şablonu Oluştur" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "Parça Parametre Şablonu Düzenle" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "Parça Parametre Şablonu Sil" @@ -8000,13 +8631,11 @@ msgid "User Settings" msgstr "" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" +msgid "Account" msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 @@ -8014,29 +8643,30 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Arama Ayarları" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "Arama" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "Sunucu" + +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Tema Ayarları" @@ -8271,9 +8909,9 @@ msgstr "" msgid "Home Page Settings" msgstr "Ana Sayfa Ayarları" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Arama Ayarları" #: templates/about.html:9 msgid "InvenTree Version" @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "Onay" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "Dosya Ekle" @@ -8521,32 +9159,33 @@ msgstr "Dosya Ekle" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "Cevap Yok" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "Bu fonksiyona erişmek için gerekli izinlere sahip değilsiniz" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "Ek Düzenle" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "Stok kalemi zaten bu konumda" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "Konuma Kaydet" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "Barkod geçerli bir konumla eşleşmiyor" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Kapat" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "Gerekli Parça" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "Yapım işi emri eksik" msgid "Complete Build Order" msgstr "Tamamlanmış Yapım İşi Emri" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "Stok tahsisini düzenle" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "Stok tahsisini sil" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "Parçaları Seçin" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "Şablon Parça" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "Tedarikçi parçasını düzenle" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "Tedarikçi parçasını sil" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "doğru" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "yanlış" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "Etiket yazdırılmadan önce stok kalemleri seçilmeli" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "Etiket Bulunamadı" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "Seçili stok kalemleri için etiket bulunamadı" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "Stok Konumu Seç" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "Etiket yazdırılmadan önce stok konumları seçilmeli" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "Seçili konumlarla eşleşen etiket bulunamadı" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "Etiket Şablonu Seç" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "Etiket Bulunamadı" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "Ürünler" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "Stok tahsisini onayla" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "Silme İşlemini Onayla" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "Seri numaralarını tahsis et" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "Seri Numaralarını Tahsis Et" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "Çeşit bulunamadı" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "Katagori Yok" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "Sorgu ile eşleşen test şablonu bulunamadı" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "Ürünler" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "Rapor Şablonu Seç" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "Test Raporu Şablonu Seç" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" -msgstr "Seçili stok kalemleri için rapor şablonu bulunamadı" - -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" -msgstr "Seçili yapım işleri için rapor şablonu bulunamadı" - -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" -msgstr "Seçili parçalar için rapor şablonu bulunamadı" - -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" -msgstr "Seçili emirler için rapor şablonu bulunamadı" - -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" +msgstr "" + +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "" + +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "Stok tahsisini onayla" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "Silme İşlemini Onayla" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "Seri numaralarını tahsis et" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "Seri Numaralarını Tahsis Et" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "Stok konumunu düzenle" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "Bu stok konumunu silmek istediğinizden emin misiniz?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "Stok Konumunu Sil" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "Stok ayarlamasını onayla" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "Stok konumu ayarlanmadı" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "Detaylar" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "Konum artık yok" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "Çeşit Stokuna İzin Ver" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "Alt konumları dahil et" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "Konumları dahil et" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "Seri Numaralı" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "Seri numarası BvE" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "Seri numarası büyük veya eşit" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "Seri numarası KvE" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "Seri numarası küçük veya eşit" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "Seri numarası" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "Alt konumlardaki stoku dahil et" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "Çeşitleri Dahil Et" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "Çeşit parçaların stok kalemlerini dahil et" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "Çeşit Stokuna İzin Ver" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "Alt konumları dahil et" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "Konumları dahil et" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "Seri Numaralı" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "Seri numarası BvE" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "Seri numarası büyük veya eşit" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "Seri numarası KvE" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "Seri numarası küçük veya eşit" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "Seri numarası" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "Alt konumlardaki stoku dahil et" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "Çeşitleri Dahil Et" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "Çeşit parçaların stok kalemlerini dahil et" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "Alt kategorilerdeki parçaları dahil et" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "DPN Var" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "Takvim görünümünü görüntüle" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "Liste görünümünü görüntüle" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "Gösteriliyor" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "için" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "yüzünden" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "satırlar" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "Arama" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "Sonuç bulunamadı" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "Sayfalandırmayı Göster" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "Değiştir" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "Sütunlar" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "Tümü" @@ -11261,19 +11975,19 @@ msgstr "Al" msgid "Sell" msgstr "Sat" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "Bildirimleri Göster" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "Yeni Bildirimler" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Çıkış" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "Tüm bildirimleri ve içeriğini göster" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR sağlanamadı" @@ -11309,18 +12019,10 @@ msgstr "Arama sonuçlarının hepsini göster" msgid "Clear search" msgstr "Aramayı temizle" -#: templates/search.html:16 -msgid "Filter results" -msgstr "Sonuçları filtrele" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "Arama menüsünü kapat" -#: templates/search.html:35 -msgid "No search results" -msgstr "Arama sonucu yok" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "Sunucu" - #: templates/stats.html:13 msgid "Instance Name" msgstr "Sistem adı" @@ -11435,55 +12133,51 @@ msgstr "E-posta ayarları yapılandırılmadı" msgid "Barcode Actions" msgstr "Barkod İşlemleri" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "Test raporunu yazdır" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "Stok Seçenekleri" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "Seçili stok parçalarını ekle" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "Seçili stok parçalarını kaldır" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "Seçili stok parçalarını değerlendir" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "Stok parçalarını taşı" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "Seçili stok parçalarını birleştir" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "Stok birlşetirme" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "Seçili parçaları sırala" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "Durumu Değiştir" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "Stok durumunu değiştir" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "Seçili parçaları sil" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "Parça sil" @@ -11503,51 +12197,51 @@ msgstr "Kullanıcılar" msgid "Select which users are assigned to this group" msgstr "Bu gruba atanacak kullanıcıyı seçin" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "Aşağıdaki kullanıcılar birden çok grubun üyesi:" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "Kullanıcı bilgisi" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "Yetkiler" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "Önemli tarihler" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "İzinleri ayarla" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "Grup" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "Görünüm" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "Parçayı görüntüleme izni" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "Parça ekleme izni" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "Değiştir" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "Parçaları düzenleme izni" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "Parçaları silme izni" diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po index 29d7575e02..ddd09671e6 100644 --- a/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "" @@ -29,23 +33,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "" @@ -58,23 +65,23 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "Xác nhận mật khẩu" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "Xác nhận mật khẩu mới" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "" @@ -98,95 +105,95 @@ msgstr "" msgid "The provided email domain is not approved." msgstr "" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "" @@ -194,566 +201,615 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "Bình luận" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "Người dùng" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "Ngày tải lên" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "Tên tập tin không được để trống" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "Mô tả" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "Tên tập tin" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "Thông tin hệ thống" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "Giới thiệu" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "" msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "" -#: build/models.py:167 -msgid "Brief description of the build" +#: build/models.py:169 +msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "Nguyên liệu" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "" -#: build/models.py:285 -msgid "User responsible for this build order" +#: build/models.py:287 +msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "Trạng thái" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 -msgid "Print actions" +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" msgstr "" #: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "Đã hoàn thành" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "" @@ -1497,8 +1652,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "" @@ -1510,21 +1665,23 @@ msgstr "" msgid "Allocated Parts" msgstr "" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "" @@ -1544,7 +1701,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "" @@ -1627,52 +1785,42 @@ msgstr "" msgid "Delete outputs" msgstr "" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" msgstr "" @@ -1685,23 +1833,24 @@ msgstr "" msgid "Completed Outputs" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1722,1272 +1871,1388 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:65 templates/js/translated/part.js:781 +#: common/models.py:66 msgid "Updated" msgstr "" -#: common/models.py:66 +#: common/models.py:67 msgid "Timestamp of last update" msgstr "" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" msgstr "" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" msgstr "" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" msgstr "" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" msgstr "" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:873 +#: common/models.py:895 msgid "Restart required" msgstr "" -#: common/models.py:874 +#: common/models.py:896 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:881 +#: common/models.py:903 msgid "Server Instance Name" msgstr "" -#: common/models.py:883 +#: common/models.py:905 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:888 +#: common/models.py:910 msgid "Use instance name" msgstr "" -#: common/models.py:889 +#: common/models.py:911 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:895 +#: common/models.py:917 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:896 +#: common/models.py:918 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" msgstr "" -#: common/models.py:909 +#: common/models.py:931 msgid "Base URL for server instance" msgstr "" -#: common/models.py:916 +#: common/models.py:938 msgid "Default Currency" msgstr "" -#: common/models.py:917 +#: common/models.py:939 msgid "Select base currency for pricing caluclations" msgstr "" -#: common/models.py:924 +#: common/models.py:946 msgid "Download from URL" msgstr "" -#: common/models.py:925 +#: common/models.py:947 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:931 +#: common/models.py:953 msgid "Download Size Limit" msgstr "" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:944 +#: common/models.py:966 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:949 +#: common/models.py:971 msgid "Require confirm" msgstr "" -#: common/models.py:950 +#: common/models.py:972 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:956 +#: common/models.py:978 msgid "Tree Depth" msgstr "" -#: common/models.py:957 +#: common/models.py:979 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:966 -msgid "Automatic Backup" +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" msgstr "" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" msgstr "" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" msgstr "" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" msgstr "" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" msgstr "" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" msgstr "" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" msgstr "" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" msgstr "" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" msgstr "" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" msgstr "" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" msgstr "" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" msgstr "" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" msgstr "" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "Hiển thị nguyên liệu mới nhất" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "Hiển thị nguyên liệu mới nhất" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" msgstr "" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" msgstr "" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" +#: common/models.py:1871 +msgid "Search Supplier Parts" msgstr "" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" msgstr "" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" msgstr "" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" msgstr "" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" msgstr "" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" msgstr "" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" msgstr "" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" msgstr "" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -3000,7 +3265,7 @@ msgstr "" msgid "A new order has been created and assigned to you" msgstr "" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "" @@ -3060,7 +3329,7 @@ msgstr "" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "" @@ -3086,6 +3355,7 @@ msgstr "" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "" @@ -3137,229 +3410,230 @@ msgstr "" msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "Nhà sản xuất" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "Nhà cung cấp" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "Nhà sản xuất" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "Nhà cung cấp" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "" @@ -3372,7 +3646,7 @@ msgid "Edit company information" msgstr "" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "" @@ -3400,14 +3674,17 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "" @@ -3420,7 +3697,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" msgstr "" @@ -3429,123 +3706,153 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 -msgid "Delete parts" -msgstr "" - #: company/templates/company/detail.html:42 #: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Thông số" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "" @@ -3619,8 +3926,8 @@ msgstr "" msgid "Delete parameters" msgstr "Xóa các thông số" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "" @@ -3636,55 +3943,31 @@ msgstr "" msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "" @@ -3695,13 +3978,13 @@ msgstr "" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" msgstr "" @@ -3713,95 +3996,68 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" msgstr "" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" msgstr "" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" msgstr "" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" msgstr "" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "Kiện hàng" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + #: company/views.py:33 msgid "New Supplier" msgstr "" @@ -3819,7 +4075,7 @@ msgstr "" msgid "New Customer" msgstr "" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "" @@ -3827,519 +4083,604 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:68 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" msgstr "" -#: order/models.py:93 -msgid "Created By" -msgstr "" - -#: order/models.py:100 -msgid "User or group responsible for this order" -msgstr "" - -#: order/models.py:105 -msgid "Order notes" -msgstr "" - -#: order/models.py:242 order/models.py:652 -msgid "Order reference" -msgstr "" - -#: order/models.py:250 order/models.py:670 -msgid "Purchase order status" -msgstr "" - -#: order/models.py:265 -msgid "Company from which the items are being ordered" -msgstr "" - -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 -msgid "Supplier Reference" -msgstr "" - -#: order/models.py:268 -msgid "Supplier order reference code" -msgstr "" - -#: order/models.py:275 -msgid "received by" -msgstr "" - -#: order/models.py:280 -msgid "Issue Date" -msgstr "" - -#: order/models.py:281 -msgid "Date order was issued" -msgstr "" - -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 +#: order/models.py:207 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:293 +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:233 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" msgstr "" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" msgstr "" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" msgstr "" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" msgstr "" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" msgstr "" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:510 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" msgstr "" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" msgstr "" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" msgstr "" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,290 +4930,329 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" msgstr "" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" msgstr "" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" msgstr "" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" msgstr "" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" msgstr "" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" msgstr "" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" msgstr "" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" msgstr "" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" msgstr "" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "Nguyên liệu" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" msgstr "" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "" @@ -4855,814 +5260,939 @@ msgstr "" msgid "Total Stock" msgstr "" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" +#: part/models.py:861 +msgid "Part description (optional)" msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" msgstr "" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" msgstr "" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" msgstr "" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" msgstr "" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" msgstr "" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "Sao chép thông số nhóm hàng" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 msgid "Update" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,85 +6213,85 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 +#: part/templates/part/category.html:54 msgid "Category Actions" msgstr "" -#: part/templates/part/category.html:53 +#: part/templates/part/category.html:59 msgid "Edit category" msgstr "" -#: part/templates/part/category.html:54 +#: part/templates/part/category.html:60 msgid "Edit Category" msgstr "" -#: part/templates/part/category.html:58 +#: part/templates/part/category.html:64 msgid "Delete category" msgstr "" -#: part/templates/part/category.html:59 +#: part/templates/part/category.html:65 msgid "Delete Category" msgstr "" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "Thông số phụ tùng" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" msgstr "" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "" @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" msgstr "" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "Số seri mới nhất" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6127,13 +6661,6 @@ msgstr "" msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" - #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" msgstr "" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "Kiện hàng" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,11 +6734,11 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" msgstr "" @@ -6258,8 +6801,8 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" msgstr "" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" @@ -7472,11 +8089,6 @@ msgstr "" msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "" @@ -7485,11 +8097,15 @@ msgstr "" msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "Cài đặt" @@ -7741,7 +8359,8 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" msgstr "" #: templates/InvenTree/settings/notifications.html:18 @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7896,28 +8523,32 @@ msgstr "" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "" @@ -7926,71 +8557,71 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "Chỉnh sửa cài đặt toàn cục" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "Chỉnh sửa cài đặt người dùng" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" msgstr "" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "Những thông số thuộc mẫu này cũng sẽ bị xóa" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,43 +8631,42 @@ msgid "User Settings" msgstr "Cài đặt người dùng" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "Cài đặt tài khoản" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" -msgstr "Thiết đặt hiển thị" +msgid "Display" +msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "Cài đặt tìm kiếm" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Cài đặt toàn cục" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "" msgid "Stock Settings" msgstr "" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "Cài đặt tài khoản" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "" @@ -8206,6 +8840,10 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "Thiết đặt hiển thị" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "Thiết lập giao diện" @@ -8271,9 +8909,9 @@ msgstr "" msgid "Home Page Settings" msgstr "Thiết lập trang chủ" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "Cài đặt tìm kiếm" #: templates/about.html:9 msgid "InvenTree Version" @@ -8341,7 +8979,7 @@ msgstr "" msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "" @@ -8521,32 +9159,33 @@ msgstr "" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "" msgid "Complete Build Order" msgstr "" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "Số seri mới nhất" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "Tất cả những thống số được chọn sẽ bị xoá" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "Xóa các thông số" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "Không có thông số được tìm thấy" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "" msgid "Add Part Category" msgstr "" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "Sao chép thông số nhóm hàng" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" msgstr "" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" msgstr "" -#: templates/js/translated/stock.js:404 +#: templates/js/translated/stock.js:409 msgid "Are you sure you want to delete this stock item?" msgstr "" -#: templates/js/translated/stock.js:409 +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" msgstr "" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" msgstr "" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "Mua" msgid "Sell" msgstr "Bán" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "Quản trị" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "Đăng xuất" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "" msgid "Select which users are assigned to this group" msgstr "" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po index 9d3bcb03c1..80ff854c2e 100644 --- a/InvenTree/locale/zh/LC_MESSAGES/django.po +++ b/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-06 09:00+0000\n" -"PO-Revision-Date: 2023-02-06 09:24\n" +"POT-Creation-Date: 2023-04-17 14:13+0000\n" +"PO-Revision-Date: 2023-04-17 18:26\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,11 +17,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:61 +#: InvenTree/api.py:65 msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/exceptions.py:79 +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "用户无权查看该模型" + +#: InvenTree/exceptions.py:94 msgid "Error details can be found in the admin panel" msgstr "在管理面板中可以找到错误详细信息" @@ -29,23 +33,26 @@ msgstr "在管理面板中可以找到错误详细信息" msgid "Enter date" msgstr "输入日期" -#: InvenTree/fields.py:204 build/serializers.py:388 -#: build/templates/build/sidebar.html:21 company/models.py:530 -#: company/templates/company/sidebar.html:25 order/models.py:943 +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/admin.py:27 -#: part/models.py:2920 part/templates/part/part_sidebar.html:62 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 #: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:103 stock/models.py:2082 stock/models.py:2190 -#: stock/serializers.py:321 stock/serializers.py:454 stock/serializers.py:535 -#: stock/serializers.py:827 stock/serializers.py:926 stock/serializers.py:1058 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 #: stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:131 templates/js/translated/bom.js:1219 -#: templates/js/translated/company.js:1023 -#: templates/js/translated/order.js:2467 templates/js/translated/order.js:2599 -#: templates/js/translated/order.js:3097 templates/js/translated/order.js:4032 -#: templates/js/translated/order.js:4411 templates/js/translated/part.js:857 -#: templates/js/translated/stock.js:1419 templates/js/translated/stock.js:2023 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 msgid "Notes" msgstr "备注" @@ -58,23 +65,23 @@ msgstr "值 '{name}' 没有以模式格式显示" msgid "Provided value does not match required pattern: " msgstr "提供的值与所需模式不匹配: " -#: InvenTree/forms.py:135 +#: InvenTree/forms.py:145 msgid "Enter password" msgstr "输入密码" -#: InvenTree/forms.py:136 +#: InvenTree/forms.py:146 msgid "Enter new password" msgstr "输入新密码" -#: InvenTree/forms.py:145 +#: InvenTree/forms.py:155 msgid "Confirm password" msgstr "确认密码" -#: InvenTree/forms.py:146 +#: InvenTree/forms.py:156 msgid "Confirm new password" msgstr "确认新密码" -#: InvenTree/forms.py:150 +#: InvenTree/forms.py:160 msgid "Old password" msgstr "旧密码" @@ -98,95 +105,95 @@ msgstr "所提供的主要电子邮件地址无效。" msgid "The provided email domain is not approved." msgstr "提供的电子邮件域未被核准。" -#: InvenTree/helpers.py:166 +#: InvenTree/helpers.py:168 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers.py:170 InvenTree/helpers.py:175 +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers.py:172 +#: InvenTree/helpers.py:174 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers.py:180 +#: InvenTree/helpers.py:182 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers.py:183 +#: InvenTree/helpers.py:185 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers.py:195 +#: InvenTree/helpers.py:197 msgid "Image download exceeded maximum size" msgstr "图像下载超过最大尺寸" -#: InvenTree/helpers.py:200 +#: InvenTree/helpers.py:202 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers.py:208 +#: InvenTree/helpers.py:210 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" -#: InvenTree/helpers.py:597 order/models.py:329 order/models.py:496 +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 msgid "Invalid quantity provided" msgstr "提供的数量无效" -#: InvenTree/helpers.py:605 +#: InvenTree/helpers.py:610 msgid "Empty serial number string" msgstr "空序列号字符串" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:640 msgid "Duplicate serial" msgstr "重复的序列号" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:703 +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 #, python-brace-format msgid "Invalid group range: {g}" msgstr "无效的组范围: {g}" -#: InvenTree/helpers.py:697 +#: InvenTree/helpers.py:702 #, python-brace-format msgid "Group range {g} exceeds allowed quantity ({q})" msgstr "组 {g} 超出了允许的数量 ({q})" -#: InvenTree/helpers.py:721 InvenTree/helpers.py:728 InvenTree/helpers.py:743 +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 #, python-brace-format msgid "Invalid group sequence: {g}" msgstr "无效的组序列: {g}" -#: InvenTree/helpers.py:753 +#: InvenTree/helpers.py:758 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:756 +#: InvenTree/helpers.py:761 #, python-brace-format msgid "Number of unique serial numbers ({s}) must match quantity ({q})" msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:955 +#: InvenTree/helpers.py:960 msgid "Remove HTML tags from this value" msgstr "从这个值中删除 HTML 标签" -#: InvenTree/models.py:238 +#: InvenTree/models.py:243 msgid "Improperly formatted pattern" msgstr "格式不正确" -#: InvenTree/models.py:245 +#: InvenTree/models.py:250 msgid "Unknown format key specified" msgstr "指定了未知格式密钥" -#: InvenTree/models.py:251 +#: InvenTree/models.py:256 msgid "Missing required format key" msgstr "缺少必需的格式密钥" -#: InvenTree/models.py:263 +#: InvenTree/models.py:268 msgid "Reference field cannot be empty" msgstr "引用字段不能为空" -#: InvenTree/models.py:270 +#: InvenTree/models.py:275 msgid "Reference must match required pattern" msgstr "引用必须匹配所需的图案" @@ -194,566 +201,615 @@ msgstr "引用必须匹配所需的图案" msgid "Reference number is too large" msgstr "参考编号过大" -#: InvenTree/models.py:384 +#: InvenTree/models.py:388 msgid "Missing file" msgstr "缺少文件" -#: InvenTree/models.py:385 +#: InvenTree/models.py:389 msgid "Missing external link" msgstr "缺少外部链接" -#: InvenTree/models.py:405 stock/models.py:2184 -#: templates/js/translated/attachment.js:103 -#: templates/js/translated/attachment.js:241 +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 msgid "Attachment" msgstr "附件" -#: InvenTree/models.py:406 +#: InvenTree/models.py:410 msgid "Select file to attach" msgstr "选择附件" -#: InvenTree/models.py:412 common/models.py:2481 company/models.py:129 -#: company/models.py:281 company/models.py:517 order/models.py:85 -#: order/models.py:1282 part/admin.py:25 part/models.py:866 -#: part/templates/part/part_scheduling.html:11 +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 #: report/templates/report/inventree_build_order_base.html:164 -#: stock/admin.py:102 templates/js/translated/company.js:692 -#: templates/js/translated/company.js:1012 -#: templates/js/translated/order.js:3086 templates/js/translated/part.js:1861 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 msgid "Link" msgstr "链接" -#: InvenTree/models.py:413 build/models.py:291 part/models.py:867 -#: stock/models.py:716 +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 msgid "Link to external URL" msgstr "链接到外部 URL" -#: InvenTree/models.py:416 templates/js/translated/attachment.js:104 -#: templates/js/translated/attachment.js:285 +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 msgid "Comment" msgstr "注释" -#: InvenTree/models.py:416 +#: InvenTree/models.py:420 msgid "File comment" msgstr "文件注释" -#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1930 -#: common/models.py:1931 common/models.py:2154 common/models.py:2155 -#: common/models.py:2411 common/models.py:2412 part/models.py:2928 -#: part/models.py:3014 part/models.py:3034 plugin/models.py:270 -#: plugin/models.py:271 -#: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2692 +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 msgid "User" msgstr "用户" -#: InvenTree/models.py:426 +#: InvenTree/models.py:430 msgid "upload date" msgstr "上传日期" -#: InvenTree/models.py:448 +#: InvenTree/models.py:452 msgid "Filename must not be empty" msgstr "文件名不能为空!" -#: InvenTree/models.py:457 +#: InvenTree/models.py:461 msgid "Invalid attachment directory" msgstr "非法的附件目录" -#: InvenTree/models.py:467 +#: InvenTree/models.py:471 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "文件名包含非法字符 '{c}'" -#: InvenTree/models.py:470 +#: InvenTree/models.py:474 msgid "Filename missing extension" msgstr "缺少文件名扩展" -#: InvenTree/models.py:477 +#: InvenTree/models.py:481 msgid "Attachment with this filename already exists" msgstr "使用此文件名的附件已存在" -#: InvenTree/models.py:484 +#: InvenTree/models.py:488 msgid "Error renaming file" msgstr "重命名文件出错" -#: InvenTree/models.py:520 +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "同一个主体下不能有相同名字" + +#: InvenTree/models.py:546 msgid "Invalid choice" msgstr "选择无效" -#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:2140 -#: company/models.py:363 label/models.py:101 part/models.py:810 -#: part/models.py:3189 plugin/models.py:94 report/models.py:152 +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 #: templates/InvenTree/settings/plugin.html:60 #: templates/InvenTree/settings/plugin.html:104 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:391 -#: templates/js/translated/company.js:581 -#: templates/js/translated/company.js:794 -#: templates/js/translated/notification.js:71 -#: templates/js/translated/part.js:957 templates/js/translated/part.js:1126 -#: templates/js/translated/part.js:2266 templates/js/translated/stock.js:2437 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 msgid "Name" msgstr "名称" -#: InvenTree/models.py:564 build/models.py:164 -#: build/templates/build/detail.html:24 company/models.py:287 -#: company/models.py:523 company/templates/company/company_base.html:72 +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:108 label/models.py:108 -#: order/models.py:83 part/admin.py:174 part/admin.py:255 part/models.py:833 -#: part/models.py:3198 part/templates/part/category.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 #: part/templates/part/part_base.html:172 -#: part/templates/part/part_scheduling.html:12 report/models.py:165 -#: report/models.py:507 report/models.py:551 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 #: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:25 stock/templates/stock/location.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:28 -#: templates/InvenTree/settings/settings.html:402 -#: templates/js/translated/bom.js:599 templates/js/translated/bom.js:902 -#: templates/js/translated/build.js:2597 templates/js/translated/company.js:445 -#: templates/js/translated/company.js:703 -#: templates/js/translated/company.js:987 templates/js/translated/order.js:2064 -#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2875 -#: templates/js/translated/part.js:1019 templates/js/translated/part.js:1469 -#: templates/js/translated/part.js:1743 templates/js/translated/part.js:2302 -#: templates/js/translated/part.js:2377 templates/js/translated/stock.js:1398 -#: templates/js/translated/stock.js:1790 templates/js/translated/stock.js:2469 -#: templates/js/translated/stock.js:2529 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 msgid "Description" msgstr "描述信息" -#: InvenTree/models.py:565 +#: InvenTree/models.py:579 msgid "Description (optional)" msgstr "描述 (可选)" -#: InvenTree/models.py:573 +#: InvenTree/models.py:587 msgid "parent" msgstr "上级项" -#: InvenTree/models.py:580 InvenTree/models.py:581 -#: templates/js/translated/part.js:2311 templates/js/translated/stock.js:2478 +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 msgid "Path" msgstr "路径" -#: InvenTree/models.py:682 +#: InvenTree/models.py:696 msgid "Barcode Data" msgstr "条码数据" -#: InvenTree/models.py:683 +#: InvenTree/models.py:697 msgid "Third party barcode data" msgstr "第三方条形码数据" -#: InvenTree/models.py:688 order/serializers.py:477 +#: InvenTree/models.py:702 msgid "Barcode Hash" msgstr "条码哈希" -#: InvenTree/models.py:689 +#: InvenTree/models.py:703 msgid "Unique hash of barcode data" msgstr "条码数据的唯一哈希" -#: InvenTree/models.py:734 +#: InvenTree/models.py:748 msgid "Existing barcode found" msgstr "发现现有条码" -#: InvenTree/models.py:787 +#: InvenTree/models.py:802 msgid "Server Error" msgstr "服务器错误" -#: InvenTree/models.py:788 +#: InvenTree/models.py:803 msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/serializers.py:58 part/models.py:3534 +#: InvenTree/serializers.py:59 part/models.py:3701 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:294 +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "货币" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "从可用选项中选择货币" + +#: InvenTree/serializers.py:334 msgid "Filename" msgstr "文件名" -#: InvenTree/serializers.py:329 +#: InvenTree/serializers.py:371 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:351 +#: InvenTree/serializers.py:393 msgid "Data File" msgstr "数据文件" -#: InvenTree/serializers.py:352 +#: InvenTree/serializers.py:394 msgid "Select data file for upload" msgstr "选择要上传的文件" -#: InvenTree/serializers.py:373 +#: InvenTree/serializers.py:415 msgid "Unsupported file type" msgstr "不支持的文件类型" -#: InvenTree/serializers.py:379 +#: InvenTree/serializers.py:421 msgid "File is too large" msgstr "文件过大" -#: InvenTree/serializers.py:400 +#: InvenTree/serializers.py:442 msgid "No columns found in file" msgstr "在文件中没有找到列" -#: InvenTree/serializers.py:403 +#: InvenTree/serializers.py:445 msgid "No data rows found in file" msgstr "在文件中没有找到数据行" -#: InvenTree/serializers.py:526 +#: InvenTree/serializers.py:568 msgid "No data rows provided" msgstr "没有提供数据行" -#: InvenTree/serializers.py:529 +#: InvenTree/serializers.py:571 msgid "No data columns supplied" msgstr "没有提供数据列" -#: InvenTree/serializers.py:606 +#: InvenTree/serializers.py:648 #, python-brace-format msgid "Missing required column: '{name}'" msgstr "缺少必需的列:'{name}'" -#: InvenTree/serializers.py:615 +#: InvenTree/serializers.py:657 #, python-brace-format msgid "Duplicate column: '{col}'" msgstr "复制列: '{col}'" -#: InvenTree/serializers.py:641 +#: InvenTree/serializers.py:683 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" msgstr "URL" -#: InvenTree/serializers.py:642 +#: InvenTree/serializers.py:684 msgid "URL of remote image file" msgstr "远程图像文件的 URL" -#: InvenTree/serializers.py:656 +#: InvenTree/serializers.py:698 msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图像" -#: InvenTree/settings.py:691 +#: InvenTree/settings.py:708 msgid "Czech" msgstr "捷克语" -#: InvenTree/settings.py:692 +#: InvenTree/settings.py:709 msgid "Danish" msgstr "丹麦语" -#: InvenTree/settings.py:693 +#: InvenTree/settings.py:710 msgid "German" msgstr "德语" -#: InvenTree/settings.py:694 +#: InvenTree/settings.py:711 msgid "Greek" msgstr "希腊语" -#: InvenTree/settings.py:695 +#: InvenTree/settings.py:712 msgid "English" msgstr "英语" -#: InvenTree/settings.py:696 +#: InvenTree/settings.py:713 msgid "Spanish" msgstr "西班牙语" -#: InvenTree/settings.py:697 +#: InvenTree/settings.py:714 msgid "Spanish (Mexican)" msgstr "西班牙语(墨西哥)" -#: InvenTree/settings.py:698 +#: InvenTree/settings.py:715 msgid "Farsi / Persian" msgstr "波斯语" -#: InvenTree/settings.py:699 +#: InvenTree/settings.py:716 msgid "French" msgstr "法语" -#: InvenTree/settings.py:700 +#: InvenTree/settings.py:717 msgid "Hebrew" msgstr "希伯来语" -#: InvenTree/settings.py:701 +#: InvenTree/settings.py:718 msgid "Hungarian" msgstr "匈牙利语" -#: InvenTree/settings.py:702 +#: InvenTree/settings.py:719 msgid "Italian" msgstr "意大利语" -#: InvenTree/settings.py:703 +#: InvenTree/settings.py:720 msgid "Japanese" msgstr "日语" -#: InvenTree/settings.py:704 +#: InvenTree/settings.py:721 msgid "Korean" msgstr "韩语" -#: InvenTree/settings.py:705 +#: InvenTree/settings.py:722 msgid "Dutch" msgstr "荷兰语" -#: InvenTree/settings.py:706 +#: InvenTree/settings.py:723 msgid "Norwegian" msgstr "挪威语" -#: InvenTree/settings.py:707 +#: InvenTree/settings.py:724 msgid "Polish" msgstr "波兰语" -#: InvenTree/settings.py:708 +#: InvenTree/settings.py:725 msgid "Portuguese" msgstr "葡萄牙语" -#: InvenTree/settings.py:709 +#: InvenTree/settings.py:726 msgid "Portuguese (Brazilian)" msgstr "葡萄牙语 (巴西)" -#: InvenTree/settings.py:710 +#: InvenTree/settings.py:727 msgid "Russian" msgstr "俄语" -#: InvenTree/settings.py:711 +#: InvenTree/settings.py:728 msgid "Slovenian" msgstr "斯洛文尼亚" -#: InvenTree/settings.py:712 +#: InvenTree/settings.py:729 msgid "Swedish" msgstr "瑞典语" -#: InvenTree/settings.py:713 +#: InvenTree/settings.py:730 msgid "Thai" msgstr "泰语" -#: InvenTree/settings.py:714 +#: InvenTree/settings.py:731 msgid "Turkish" msgstr "土耳其语" -#: InvenTree/settings.py:715 +#: InvenTree/settings.py:732 msgid "Vietnamese" msgstr "越南语" -#: InvenTree/settings.py:716 +#: InvenTree/settings.py:733 msgid "Chinese" msgstr "中文(简体)" -#: InvenTree/status.py:98 +#: InvenTree/status.py:92 part/serializers.py:879 msgid "Background worker check failed" msgstr "后台工作人员检查失败" -#: InvenTree/status.py:102 +#: InvenTree/status.py:96 msgid "Email backend not configured" msgstr "未配置电子邮件后端" -#: InvenTree/status.py:105 +#: InvenTree/status.py:99 msgid "InvenTree system health checks failed" msgstr "InventTree系统健康检查失败" -#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140 -#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:362 +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 msgid "Pending" msgstr "待定" -#: InvenTree/status_codes.py:100 +#: InvenTree/status_codes.py:140 msgid "Placed" msgstr "已添加" -#: InvenTree/status_codes.py:101 InvenTree/status_codes.py:309 -#: order/templates/order/order_base.html:143 -#: order/templates/order/sales_order_base.html:133 +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 msgid "Complete" msgstr "完成" -#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:308 +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 msgid "Cancelled" msgstr "已取消" -#: InvenTree/status_codes.py:103 InvenTree/status_codes.py:143 -#: InvenTree/status_codes.py:183 +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 msgid "Lost" msgstr "丢失" -#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 -#: InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 msgid "Returned" msgstr "已退回" -#: InvenTree/status_codes.py:141 order/models.py:1165 -#: templates/js/translated/order.js:3674 templates/js/translated/order.js:4007 +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 msgid "Shipped" msgstr "已发货" -#: InvenTree/status_codes.py:179 +#: InvenTree/status_codes.py:223 msgid "OK" msgstr "OK" -#: InvenTree/status_codes.py:180 +#: InvenTree/status_codes.py:224 msgid "Attention needed" msgstr "需要关注" -#: InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:225 msgid "Damaged" msgstr "破损" -#: InvenTree/status_codes.py:182 +#: InvenTree/status_codes.py:226 msgid "Destroyed" msgstr "已销毁" -#: InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:228 msgid "Rejected" msgstr "已拒绝" -#: InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:229 msgid "Quarantined" msgstr "隔离" -#: InvenTree/status_codes.py:259 +#: InvenTree/status_codes.py:307 msgid "Legacy stock tracking entry" msgstr "旧库存跟踪条目" -#: InvenTree/status_codes.py:261 +#: InvenTree/status_codes.py:309 msgid "Stock item created" msgstr "库存项已创建" -#: InvenTree/status_codes.py:263 +#: InvenTree/status_codes.py:311 msgid "Edited stock item" msgstr "已编辑库存项" -#: InvenTree/status_codes.py:264 +#: InvenTree/status_codes.py:312 msgid "Assigned serial number" msgstr "已分配序列号" -#: InvenTree/status_codes.py:266 +#: InvenTree/status_codes.py:314 msgid "Stock counted" msgstr "库存计数" -#: InvenTree/status_codes.py:267 +#: InvenTree/status_codes.py:315 msgid "Stock manually added" msgstr "已手动添加库存" -#: InvenTree/status_codes.py:268 +#: InvenTree/status_codes.py:316 msgid "Stock manually removed" msgstr "库存手动删除" -#: InvenTree/status_codes.py:270 +#: InvenTree/status_codes.py:318 msgid "Location changed" msgstr "仓储地点已更改" -#: InvenTree/status_codes.py:272 +#: InvenTree/status_codes.py:320 msgid "Installed into assembly" msgstr "安装到组装中" -#: InvenTree/status_codes.py:273 +#: InvenTree/status_codes.py:321 msgid "Removed from assembly" msgstr "已从组装中删除" -#: InvenTree/status_codes.py:275 +#: InvenTree/status_codes.py:323 msgid "Installed component item" msgstr "已安装组件项" -#: InvenTree/status_codes.py:276 +#: InvenTree/status_codes.py:324 msgid "Removed component item" msgstr "已删除组件项" -#: InvenTree/status_codes.py:278 +#: InvenTree/status_codes.py:326 msgid "Split from parent item" msgstr "从父项拆分" -#: InvenTree/status_codes.py:279 +#: InvenTree/status_codes.py:327 msgid "Split child item" msgstr "拆分子项" -#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2127 +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 msgid "Merged stock items" msgstr "合并的库存项目" -#: InvenTree/status_codes.py:283 +#: InvenTree/status_codes.py:331 msgid "Converted to variant" msgstr "转换为变量" -#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:241 +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 msgid "Sent to customer" msgstr "发送给客户" -#: InvenTree/status_codes.py:286 +#: InvenTree/status_codes.py:334 msgid "Returned from customer" msgstr "从客户退货" -#: InvenTree/status_codes.py:288 +#: InvenTree/status_codes.py:336 msgid "Build order output created" msgstr "已创建生产订单输出" -#: InvenTree/status_codes.py:289 +#: InvenTree/status_codes.py:337 msgid "Build order output completed" msgstr "生产订单输出已完成" -#: InvenTree/status_codes.py:290 +#: InvenTree/status_codes.py:338 msgid "Consumed by build order" msgstr "被生产订单消耗" -#: InvenTree/status_codes.py:292 -msgid "Received against purchase order" -msgstr "收到定购单" +#: InvenTree/status_codes.py:340 +msgid "Shipped against Sales Order" +msgstr "" -#: InvenTree/status_codes.py:307 +#: InvenTree/status_codes.py:342 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:344 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:358 msgid "Production" msgstr "生产中" -#: InvenTree/validators.py:20 +#: InvenTree/status_codes.py:430 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:434 +msgid "Reject" +msgstr "" + +#: InvenTree/validators.py:18 msgid "Not a valid currency code" msgstr "不是有效的货币代码" -#: InvenTree/validators.py:91 -#, python-brace-format -msgid "IPN must match regex pattern {pat}" -msgstr "IPN 必须匹配正则表达式 {pat}" - -#: InvenTree/validators.py:133 InvenTree/validators.py:149 +#: InvenTree/validators.py:87 InvenTree/validators.py:103 msgid "Overage value must not be negative" msgstr "备损值不能为负数" -#: InvenTree/validators.py:151 +#: InvenTree/validators.py:105 msgid "Overage must not exceed 100%" msgstr "备损不能超过 100%" -#: InvenTree/validators.py:158 +#: InvenTree/validators.py:112 msgid "Invalid value for overage" msgstr "无效的备损值" -#: InvenTree/views.py:447 templates/InvenTree/settings/user.html:22 +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 msgid "Edit User Information" msgstr "编辑用户信息" -#: InvenTree/views.py:459 templates/InvenTree/settings/user.html:19 +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 msgid "Set Password" msgstr "设置密码" -#: InvenTree/views.py:481 +#: InvenTree/views.py:443 msgid "Password fields must match" msgstr "密码字段必须相匹配。" -#: InvenTree/views.py:490 +#: InvenTree/views.py:452 msgid "Wrong password provided" msgstr "密码错误" -#: InvenTree/views.py:689 templates/navbar.html:152 +#: InvenTree/views.py:651 templates/navbar.html:157 msgid "System Information" msgstr "系统信息" -#: InvenTree/views.py:696 templates/navbar.html:163 +#: InvenTree/views.py:658 templates/navbar.html:168 msgid "About InvenTree" msgstr "关于 InventTree" -#: build/api.py:228 +#: build/api.py:221 msgid "Build must be cancelled before it can be deleted" msgstr "在删除前必须取消生产" -#: build/models.py:106 -msgid "Invalid choice for parent build" -msgstr "上级生产选项无效" - -#: build/models.py:111 build/templates/build/build_base.html:9 +#: build/models.py:71 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:105 #: templates/email/build_order_completed.html:16 @@ -762,583 +818,624 @@ msgstr "上级生产选项无效" msgid "Build Order" msgstr "生产订单" -#: build/models.py:112 build/templates/build/build_base.html:13 +#: build/models.py:72 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:125 +#: order/templates/order/sales_order_detail.html:119 #: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:141 #: templates/InvenTree/settings/sidebar.html:49 -#: templates/js/translated/search.js:254 users/models.py:41 +#: templates/js/translated/search.js:216 users/models.py:42 msgid "Build Orders" msgstr "生产订单" -#: build/models.py:155 +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "上级生产选项无效" + +#: build/models.py:157 msgid "Build Order Reference" msgstr "相关生产订单" -#: build/models.py:156 order/models.py:241 order/models.py:651 -#: order/models.py:941 part/admin.py:257 part/models.py:3444 -#: part/templates/part/upload_bom.html:54 +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report.html:91 -#: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:912 -#: templates/js/translated/build.js:1854 templates/js/translated/order.js:2332 -#: templates/js/translated/order.js:2548 templates/js/translated/order.js:3871 -#: templates/js/translated/order.js:4360 templates/js/translated/pricing.js:360 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 msgid "Reference" msgstr "引用" -#: build/models.py:167 -msgid "Brief description of the build" -msgstr "生产的简短描述." +#: build/models.py:169 +msgid "Brief description of the build (optional)" +msgstr "" -#: build/models.py:175 build/templates/build/build_base.html:172 +#: build/models.py:177 build/templates/build/build_base.html:189 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "上级生产" -#: build/models.py:176 +#: build/models.py:178 msgid "BuildOrder to which this build is allocated" msgstr "此次生产匹配的订单" -#: build/models.py:181 build/templates/build/build_base.html:80 -#: build/templates/build/detail.html:29 company/models.py:685 -#: order/models.py:1038 order/models.py:1149 order/models.py:1150 -#: part/models.py:382 part/models.py:2787 part/models.py:2900 -#: part/models.py:2960 part/models.py:2975 part/models.py:2994 -#: part/models.py:3012 part/models.py:3111 part/models.py:3232 -#: part/models.py:3324 part/models.py:3409 part/models.py:3725 -#: part/serializers.py:1111 part/templates/part/part_app_base.html:8 +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report.html:89 -#: report/templates/report/inventree_so_report.html:90 stock/serializers.py:90 -#: stock/serializers.py:488 templates/InvenTree/search.html:82 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/email/overdue_build_order.html:16 -#: templates/js/translated/barcode.js:503 templates/js/translated/bom.js:598 -#: templates/js/translated/bom.js:735 templates/js/translated/bom.js:856 -#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722 -#: templates/js/translated/build.js:2205 templates/js/translated/build.js:2608 -#: templates/js/translated/company.js:302 -#: templates/js/translated/company.js:532 -#: templates/js/translated/company.js:644 -#: templates/js/translated/company.js:905 templates/js/translated/order.js:107 -#: templates/js/translated/order.js:1206 templates/js/translated/order.js:1710 -#: templates/js/translated/order.js:2286 templates/js/translated/order.js:3229 -#: templates/js/translated/order.js:3625 templates/js/translated/order.js:3855 -#: templates/js/translated/part.js:1454 templates/js/translated/part.js:1526 -#: templates/js/translated/part.js:1720 templates/js/translated/pricing.js:343 -#: templates/js/translated/stock.js:617 templates/js/translated/stock.js:782 -#: templates/js/translated/stock.js:992 templates/js/translated/stock.js:1746 -#: templates/js/translated/stock.js:2555 templates/js/translated/stock.js:2750 -#: templates/js/translated/stock.js:2887 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 msgid "Part" msgstr "商品" -#: build/models.py:189 +#: build/models.py:191 msgid "Select part to build" msgstr "选择要生产的商品" -#: build/models.py:194 +#: build/models.py:196 msgid "Sales Order Reference" msgstr "相关销售订单" -#: build/models.py:198 +#: build/models.py:200 msgid "SalesOrder to which this build is allocated" msgstr "此次生产匹配的销售订单" -#: build/models.py:203 build/serializers.py:824 -#: templates/js/translated/build.js:2193 templates/js/translated/order.js:3217 +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 msgid "Source Location" msgstr "来源地点" -#: build/models.py:207 +#: build/models.py:209 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "此次生产从哪个仓储位置获取库存(留空即可从任何仓储位置取出)" -#: build/models.py:212 +#: build/models.py:214 msgid "Destination Location" msgstr "目标地点" -#: build/models.py:216 +#: build/models.py:218 msgid "Select location where the completed items will be stored" msgstr "选择已完成项目仓储地点" -#: build/models.py:220 +#: build/models.py:222 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:223 +#: build/models.py:225 msgid "Number of stock items to build" msgstr "要生产的项目数量" -#: build/models.py:227 +#: build/models.py:229 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:229 +#: build/models.py:231 msgid "Number of stock items which have been completed" msgstr "已完成的库存项目数量" -#: build/models.py:233 +#: build/models.py:235 msgid "Build Status" msgstr "生产状态" -#: build/models.py:237 +#: build/models.py:239 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:246 build/serializers.py:225 order/serializers.py:455 -#: stock/models.py:720 templates/js/translated/order.js:1568 +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 msgid "Batch Code" msgstr "批量代码" -#: build/models.py:250 build/serializers.py:226 +#: build/models.py:252 build/serializers.py:230 msgid "Batch code for this build output" msgstr "此生产产出的批量代码" -#: build/models.py:253 order/models.py:87 part/models.py:1002 -#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2888 +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 msgid "Creation Date" msgstr "创建日期" -#: build/models.py:257 order/models.py:681 +#: build/models.py:259 msgid "Target completion date" msgstr "预计完成日期" -#: build/models.py:258 +#: build/models.py:260 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产完成的目标日期。生产将在此日期之后逾期。" -#: build/models.py:261 order/models.py:292 -#: templates/js/translated/build.js:2685 +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 msgid "Completion Date" msgstr "完成日期:" -#: build/models.py:267 +#: build/models.py:269 msgid "completed by" msgstr "完成人" -#: build/models.py:275 templates/js/translated/build.js:2653 +#: build/models.py:277 templates/js/translated/build.js:2660 msgid "Issued by" msgstr "发布者" -#: build/models.py:276 +#: build/models.py:278 msgid "User who issued this build order" msgstr "发布此生产订单的用户" -#: build/models.py:284 build/templates/build/build_base.html:193 -#: build/templates/build/detail.html:122 order/models.py:101 -#: order/templates/order/order_base.html:185 -#: order/templates/order/sales_order_base.html:183 part/models.py:1006 +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 #: report/templates/report/inventree_build_order_base.html:158 -#: templates/js/translated/build.js:2665 templates/js/translated/order.js:2098 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 msgid "Responsible" msgstr "责任人" -#: build/models.py:285 -msgid "User responsible for this build order" -msgstr "负责此生产订单的用户" +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "构建此订单的用户或组" -#: build/models.py:290 build/templates/build/detail.html:108 +#: build/models.py:292 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 -#: company/templates/company/supplier_part.html:188 -#: part/templates/part/part_base.html:390 stock/models.py:714 -#: stock/templates/stock/item_base.html:203 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 msgid "External Link" msgstr "外部链接" -#: build/models.py:295 +#: build/models.py:297 msgid "Extra build notes" msgstr "额外的生产备注" -#: build/models.py:299 +#: build/models.py:301 msgid "Build Priority" msgstr "创建优先级" -#: build/models.py:302 +#: build/models.py:304 msgid "Priority of this build order" msgstr "此构建订单的优先级" -#: build/models.py:540 +#: build/models.py:542 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:546 +#: build/models.py:548 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:725 +#: build/models.py:727 msgid "No build output specified" msgstr "未指定生产产出" -#: build/models.py:728 +#: build/models.py:730 msgid "Build output is already completed" msgstr "生产产出已完成" -#: build/models.py:731 +#: build/models.py:733 msgid "Build output does not match Build Order" msgstr "生产产出与订单不匹配" -#: build/models.py:1188 +#: build/models.py:1190 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的" -#: build/models.py:1197 +#: build/models.py:1199 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1207 order/models.py:1416 +#: build/models.py:1209 order/models.py:1550 msgid "Stock item is over-allocated" msgstr "库存物品分配过度!" -#: build/models.py:1213 order/models.py:1419 +#: build/models.py:1215 order/models.py:1553 msgid "Allocation quantity must be greater than zero" msgstr "分配数量必须大于0" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Quantity must be 1 for serialized stock" msgstr "序列化库存的数量必须是 1" -#: build/models.py:1276 +#: build/models.py:1278 msgid "Selected stock item not found in BOM" msgstr "在BOM中找不到选定的库存项" -#: build/models.py:1345 stock/templates/stock/item_base.html:175 -#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2581 +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 #: templates/navbar.html:38 msgid "Build" msgstr "生产" -#: build/models.py:1346 +#: build/models.py:1348 msgid "Build to allocate parts" msgstr "生产以分配部件" -#: build/models.py:1362 build/serializers.py:664 order/serializers.py:1032 -#: order/serializers.py:1053 stock/serializers.py:392 stock/serializers.py:758 -#: stock/serializers.py:884 stock/templates/stock/item_base.html:10 +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:195 #: templates/js/translated/build.js:801 templates/js/translated/build.js:806 -#: templates/js/translated/build.js:2207 templates/js/translated/build.js:2770 -#: templates/js/translated/order.js:108 templates/js/translated/order.js:3230 -#: templates/js/translated/order.js:3532 templates/js/translated/order.js:3537 -#: templates/js/translated/order.js:3632 templates/js/translated/order.js:3724 -#: templates/js/translated/part.js:778 templates/js/translated/stock.js:618 -#: templates/js/translated/stock.js:783 templates/js/translated/stock.js:2628 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 msgid "Stock Item" msgstr "库存项" -#: build/models.py:1363 +#: build/models.py:1365 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1375 build/serializers.py:193 -#: build/templates/build/build_base.html:85 -#: build/templates/build/detail.html:34 common/models.py:1962 -#: order/models.py:934 order/models.py:1460 order/serializers.py:1206 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:256 -#: part/forms.py:40 part/models.py:2907 part/models.py:3425 +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report.html:90 -#: report/templates/report/inventree_so_report.html:91 -#: report/templates/report/inventree_test_report_base.html:81 -#: report/templates/report/inventree_test_report_base.html:139 -#: stock/admin.py:86 stock/serializers.py:285 -#: stock/templates/stock/item_base.html:290 -#: stock/templates/stock/item_base.html:298 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 #: templates/email/build_order_completed.html:18 -#: templates/js/translated/barcode.js:505 templates/js/translated/bom.js:737 -#: templates/js/translated/bom.js:920 templates/js/translated/build.js:481 -#: templates/js/translated/build.js:637 templates/js/translated/build.js:828 -#: templates/js/translated/build.js:1247 templates/js/translated/build.js:1748 -#: templates/js/translated/build.js:2208 -#: templates/js/translated/company.js:1164 -#: templates/js/translated/model_renderers.js:120 -#: templates/js/translated/order.js:124 templates/js/translated/order.js:1209 -#: templates/js/translated/order.js:2338 templates/js/translated/order.js:2554 -#: templates/js/translated/order.js:3231 templates/js/translated/order.js:3551 -#: templates/js/translated/order.js:3638 templates/js/translated/order.js:3730 -#: templates/js/translated/order.js:3877 templates/js/translated/order.js:4366 -#: templates/js/translated/part.js:780 templates/js/translated/part.js:851 -#: templates/js/translated/part.js:1324 templates/js/translated/part.js:2824 -#: templates/js/translated/pricing.js:355 -#: templates/js/translated/pricing.js:448 -#: templates/js/translated/pricing.js:496 -#: templates/js/translated/pricing.js:590 templates/js/translated/stock.js:489 -#: templates/js/translated/stock.js:643 templates/js/translated/stock.js:813 -#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2762 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 msgid "Quantity" msgstr "数量" -#: build/models.py:1376 +#: build/models.py:1378 msgid "Stock quantity to allocate to build" msgstr "分配到生产的数量" -#: build/models.py:1384 +#: build/models.py:1386 msgid "Install into" msgstr "安装到" -#: build/models.py:1385 +#: build/models.py:1387 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:138 build/serializers.py:693 -#: templates/js/translated/build.js:1235 +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 msgid "Build Output" msgstr "生产产出" -#: build/serializers.py:150 +#: build/serializers.py:160 msgid "Build output does not match the parent build" msgstr "生产产出与对应生产不匹配" -#: build/serializers.py:154 +#: build/serializers.py:164 msgid "Output part does not match BuildOrder part" msgstr "产出部件与生产订单部件不匹配" -#: build/serializers.py:158 +#: build/serializers.py:168 msgid "This build output has already been completed" msgstr "此生产产出已经完成" -#: build/serializers.py:169 +#: build/serializers.py:179 msgid "This build output is not fully allocated" msgstr "生产产出未被完成分配" -#: build/serializers.py:194 +#: build/serializers.py:198 msgid "Enter quantity for build output" msgstr "输入生产产出数量" -#: build/serializers.py:208 build/serializers.py:684 order/models.py:327 -#: order/serializers.py:298 order/serializers.py:450 part/serializers.py:903 -#: part/serializers.py:1274 stock/models.py:574 stock/models.py:1326 -#: stock/serializers.py:294 +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 msgid "Quantity must be greater than zero" msgstr "数量必须大于0" -#: build/serializers.py:215 +#: build/serializers.py:219 msgid "Integer quantity required for trackable parts" msgstr "对于可追踪的部件,需要整数型数值" -#: build/serializers.py:218 +#: build/serializers.py:222 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "需要整数型数值,因为BOM包含可追踪的部件" -#: build/serializers.py:232 order/serializers.py:463 order/serializers.py:1210 -#: stock/serializers.py:303 templates/js/translated/order.js:1579 -#: templates/js/translated/stock.js:302 templates/js/translated/stock.js:490 +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:233 +#: build/serializers.py:237 msgid "Enter serial numbers for build outputs" msgstr "输入生产产出的序列号" -#: build/serializers.py:246 +#: build/serializers.py:250 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:247 +#: build/serializers.py:251 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项分配对应的序列号" -#: build/serializers.py:282 stock/api.py:601 +#: build/serializers.py:286 stock/api.py:630 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:331 build/serializers.py:400 +#: build/serializers.py:335 build/serializers.py:404 msgid "A list of build outputs must be provided" msgstr "必须提供生产产出列表" -#: build/serializers.py:370 order/serializers.py:436 order/serializers.py:547 -#: stock/serializers.py:314 stock/serializers.py:449 stock/serializers.py:530 -#: stock/serializers.py:919 stock/serializers.py:1152 -#: stock/templates/stock/item_base.html:388 -#: templates/js/translated/barcode.js:504 -#: templates/js/translated/barcode.js:748 templates/js/translated/build.js:813 -#: templates/js/translated/build.js:1760 templates/js/translated/order.js:1606 -#: templates/js/translated/order.js:3544 templates/js/translated/order.js:3649 -#: templates/js/translated/order.js:3657 templates/js/translated/order.js:3738 -#: templates/js/translated/part.js:779 templates/js/translated/stock.js:619 -#: templates/js/translated/stock.js:784 templates/js/translated/stock.js:994 -#: templates/js/translated/stock.js:1898 templates/js/translated/stock.js:2569 +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 msgid "Location" msgstr "地点" -#: build/serializers.py:371 +#: build/serializers.py:375 msgid "Location for completed build outputs" msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:377 build/templates/build/build_base.html:145 -#: build/templates/build/detail.html:62 order/models.py:670 -#: order/serializers.py:473 stock/admin.py:89 -#: stock/templates/stock/item_base.html:421 -#: templates/js/translated/barcode.js:237 templates/js/translated/build.js:2637 -#: templates/js/translated/order.js:1715 templates/js/translated/order.js:2068 -#: templates/js/translated/order.js:2880 templates/js/translated/stock.js:1873 -#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2778 +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 msgid "Status" msgstr "状态" -#: build/serializers.py:383 +#: build/serializers.py:387 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:384 +#: build/serializers.py:388 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未完成分配,完成产出" -#: build/serializers.py:453 +#: build/serializers.py:457 msgid "Remove Allocated Stock" msgstr "移除已分配的库存" -#: build/serializers.py:454 +#: build/serializers.py:458 msgid "Subtract any stock which has already been allocated to this build" msgstr "减去已经分配至此生产的库存" -#: build/serializers.py:460 +#: build/serializers.py:464 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:461 +#: build/serializers.py:465 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的生产产出" -#: build/serializers.py:489 +#: build/serializers.py:493 msgid "Accept as consumed by this build order" msgstr "接受此构建订单所消耗的内容" -#: build/serializers.py:490 +#: build/serializers.py:494 msgid "Deallocate before completing this build order" msgstr "在完成此构建订单前取消分配" -#: build/serializers.py:513 +#: build/serializers.py:517 msgid "Overallocated Stock" msgstr "超出分配的库存" -#: build/serializers.py:515 +#: build/serializers.py:519 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "你想如何处理分配给构建订单的额外库存物品" -#: build/serializers.py:525 +#: build/serializers.py:529 msgid "Some stock items have been overallocated" msgstr "一些库存项已被过度分配" -#: build/serializers.py:530 +#: build/serializers.py:534 msgid "Accept Unallocated" msgstr "接受未分配的" -#: build/serializers.py:531 +#: build/serializers.py:535 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完成分配至此生产订单" -#: build/serializers.py:541 templates/js/translated/build.js:265 +#: build/serializers.py:545 templates/js/translated/build.js:265 msgid "Required stock has not been fully allocated" msgstr "所需库存尚未完全分配" -#: build/serializers.py:546 order/serializers.py:202 order/serializers.py:1100 +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 msgid "Accept Incomplete" msgstr "接受未完成" -#: build/serializers.py:547 +#: build/serializers.py:551 msgid "Accept that the required number of build outputs have not been completed" msgstr "接受所需的生产产出未完成" -#: build/serializers.py:557 templates/js/translated/build.js:269 +#: build/serializers.py:561 templates/js/translated/build.js:269 msgid "Required build quantity has not been completed" msgstr "所需生产数量尚未完成" -#: build/serializers.py:566 templates/js/translated/build.js:253 +#: build/serializers.py:570 templates/js/translated/build.js:253 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:596 build/serializers.py:641 part/models.py:3561 -#: part/models.py:3717 +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 msgid "BOM Item" msgstr "BOM项" -#: build/serializers.py:606 +#: build/serializers.py:610 msgid "Build output" msgstr "生产产出" -#: build/serializers.py:614 +#: build/serializers.py:618 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:655 +#: build/serializers.py:668 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单指向相同的部件" -#: build/serializers.py:670 stock/serializers.py:771 +#: build/serializers.py:683 stock/serializers.py:754 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:728 order/serializers.py:1090 +#: build/serializers.py:732 order/serializers.py:1093 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出了限制" -#: build/serializers.py:734 +#: build/serializers.py:738 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的部件的分配,必须指定生产产出" -#: build/serializers.py:741 +#: build/serializers.py:745 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的部件,无法指定生产产出" -#: build/serializers.py:746 +#: build/serializers.py:750 msgid "This stock item has already been allocated to this build output" msgstr "此库存项已被分配至此生产产出" -#: build/serializers.py:769 order/serializers.py:1374 +#: build/serializers.py:773 order/serializers.py:1377 msgid "Allocation items must be provided" msgstr "必须提供分配的项" -#: build/serializers.py:825 +#: build/serializers.py:829 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)" -#: build/serializers.py:833 +#: build/serializers.py:837 msgid "Exclude Location" msgstr "排除地点" -#: build/serializers.py:834 +#: build/serializers.py:838 msgid "Exclude stock items from this selected location" msgstr "从该选定的仓储地点排除库存项" -#: build/serializers.py:839 +#: build/serializers.py:843 msgid "Interchangeable Stock" msgstr "可互换的库存" -#: build/serializers.py:840 +#: build/serializers.py:844 msgid "Stock items in multiple locations can be used interchangeably" msgstr "多处地点的库存项可以互换使用" -#: build/serializers.py:845 +#: build/serializers.py:849 msgid "Substitute Stock" msgstr "可替换的库存" -#: build/serializers.py:846 +#: build/serializers.py:850 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的部件" -#: build/serializers.py:851 +#: build/serializers.py:855 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:852 +#: build/serializers.py:856 msgid "Allocate optional BOM items to build order" msgstr "分配可选的BOM项目来建立订单" @@ -1356,135 +1453,193 @@ msgid "Build order {bo} is now overdue" msgstr "生成订单 {bo} 现在已过期" #: build/templates/build/build_base.html:39 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "显示二维码" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "解绑条形码" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "绑定条码" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 msgid "Print actions" msgstr "打印操作" -#: build/templates/build/build_base.html:43 +#: build/templates/build/build_base.html:61 msgid "Print build order report" msgstr "打印构建订单报告" -#: build/templates/build/build_base.html:50 +#: build/templates/build/build_base.html:68 msgid "Build actions" msgstr "生产操作" -#: build/templates/build/build_base.html:54 +#: build/templates/build/build_base.html:72 msgid "Edit Build" msgstr "编辑生产" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:74 msgid "Cancel Build" msgstr "取消生产" -#: build/templates/build/build_base.html:59 +#: build/templates/build/build_base.html:77 msgid "Duplicate Build" msgstr "重复构件" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:80 msgid "Delete Build" msgstr "删除生产" -#: build/templates/build/build_base.html:67 -#: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 msgid "Complete Build" msgstr "生产完成" -#: build/templates/build/build_base.html:90 +#: build/templates/build/build_base.html:108 msgid "Build Description" msgstr "构建描述" -#: build/templates/build/build_base.html:98 +#: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" msgstr "针对此生产订单,尚未创建生产产出" -#: build/templates/build/build_base.html:104 -#, python-format -msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "此构建订单已分配给销售订单 %(link)s" - -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:123 #, python-format msgid "This Build Order is a child of Build Order %(link)s" msgstr "此构建订单是 %(link)s 订单的一个子订单" -#: build/templates/build/build_base.html:118 +#: build/templates/build/build_base.html:130 msgid "Build Order is ready to mark as completed" msgstr "构建订单已准备好标记为已完成" -#: build/templates/build/build_base.html:123 +#: build/templates/build/build_base.html:135 msgid "Build Order cannot be completed as outstanding outputs remain" msgstr "创建订单无法完成,因为未完成的输出" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:140 msgid "Required build quantity has not yet been completed" msgstr "所需生产数量尚未完成" -#: build/templates/build/build_base.html:133 +#: build/templates/build/build_base.html:145 msgid "Stock has not been fully allocated to this Build Order" msgstr "库存尚未被完全分配到此构建订单" -#: build/templates/build/build_base.html:154 -#: build/templates/build/detail.html:138 order/models.py:947 -#: order/templates/order/order_base.html:171 -#: order/templates/order/sales_order_base.html:164 +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 #: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2677 templates/js/translated/order.js:2085 -#: templates/js/translated/order.js:2414 templates/js/translated/order.js:2896 -#: templates/js/translated/order.js:3920 templates/js/translated/part.js:1339 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 msgid "Target Date" msgstr "预计日期" -#: build/templates/build/build_base.html:159 +#: build/templates/build/build_base.html:171 #, python-format msgid "This build was due on %(target)s" msgstr "此次生产的截止日期为 %(target)s" -#: build/templates/build/build_base.html:159 -#: build/templates/build/build_base.html:211 -#: order/templates/order/order_base.html:107 -#: order/templates/order/sales_order_base.html:94 -#: templates/js/translated/table_filters.js:348 -#: templates/js/translated/table_filters.js:389 -#: templates/js/translated/table_filters.js:419 +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 msgid "Overdue" msgstr "逾期" -#: build/templates/build/build_base.html:166 +#: build/templates/build/build_base.html:183 #: build/templates/build/detail.html:67 build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:171 -#: templates/js/translated/table_filters.js:428 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 msgid "Completed" msgstr "已完成" -#: build/templates/build/build_base.html:179 -#: build/templates/build/detail.html:101 order/api.py:1259 order/models.py:1142 -#: order/models.py:1236 order/models.py:1367 +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:368 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 #: templates/email/overdue_sales_order.html:15 -#: templates/js/translated/order.js:2842 templates/js/translated/pricing.js:878 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 msgid "Sales Order" msgstr "销售订单" -#: build/templates/build/build_base.html:186 +#: build/templates/build/build_base.html:203 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 msgid "Issued By" msgstr "发布者" -#: build/templates/build/build_base.html:200 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2602 +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 msgid "Priority" msgstr "优先级" -#: build/templates/build/build_base.html:259 +#: build/templates/build/build_base.html:280 msgid "Delete Build Order" msgstr "删除生产订单" +#: build/templates/build/build_base.html:290 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:302 +msgid "Link Barcode to Build Order" +msgstr "" + #: build/templates/build/detail.html:15 msgid "Build Details" msgstr "生产详情" @@ -1497,8 +1652,8 @@ msgstr "库存来源" msgid "Stock can be taken from any available location." msgstr "库存可以从任何可用的地点获得。" -#: build/templates/build/detail.html:49 order/models.py:1060 -#: templates/js/translated/order.js:1716 templates/js/translated/order.js:2456 +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 msgid "Destination" msgstr "目的地" @@ -1510,21 +1665,23 @@ msgstr "目标位置未指定" msgid "Allocated Parts" msgstr "已分配的部件" -#: build/templates/build/detail.html:80 stock/admin.py:88 -#: stock/templates/stock/item_base.html:168 -#: templates/js/translated/build.js:1251 -#: templates/js/translated/model_renderers.js:124 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:1887 -#: templates/js/translated/stock.js:2785 -#: templates/js/translated/table_filters.js:179 -#: templates/js/translated/table_filters.js:270 +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 msgid "Batch" msgstr "批量" #: build/templates/build/detail.html:133 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:158 -#: templates/js/translated/build.js:2645 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 msgid "Created" msgstr "已创建" @@ -1544,7 +1701,7 @@ msgstr "子生产订单" msgid "Allocate Stock to Build" msgstr "为生产分配库存" -#: build/templates/build/detail.html:183 templates/js/translated/build.js:2016 +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 msgid "Unallocate stock" msgstr "未分配库存" @@ -1573,9 +1730,10 @@ msgid "Order required parts" msgstr "订单所需部件" #: build/templates/build/detail.html:194 -#: company/templates/company/detail.html:37 -#: company/templates/company/detail.html:85 -#: part/templates/part/category.html:178 templates/js/translated/order.js:1249 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 msgid "Order Parts" msgstr "订购商品" @@ -1627,55 +1785,45 @@ msgstr "删除选中的构建输出" msgid "Delete outputs" msgstr "删除输出" -#: build/templates/build/detail.html:274 -#: stock/templates/stock/location.html:228 templates/stock_table.html:27 -msgid "Printing Actions" -msgstr "打印操作" - -#: build/templates/build/detail.html:278 build/templates/build/detail.html:279 -#: stock/templates/stock/location.html:232 templates/stock_table.html:31 -msgid "Print labels" -msgstr "打印标签" - -#: build/templates/build/detail.html:301 +#: build/templates/build/detail.html:283 msgid "Completed Build Outputs" -msgstr "" +msgstr "已完成构建输出" -#: build/templates/build/detail.html:313 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 #: company/templates/company/manufacturer_part.html:151 #: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 #: order/templates/order/po_sidebar.html:9 -#: order/templates/order/purchase_order_detail.html:86 -#: order/templates/order/sales_order_detail.html:140 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:233 -#: part/templates/part/part_sidebar.html:60 stock/templates/stock/item.html:117 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 #: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "附件" -#: build/templates/build/detail.html:328 +#: build/templates/build/detail.html:310 msgid "Build Notes" msgstr "生产备注" -#: build/templates/build/detail.html:511 +#: build/templates/build/detail.html:475 msgid "Allocation Complete" -msgstr "" +msgstr "分配完成" -#: build/templates/build/detail.html:512 +#: build/templates/build/detail.html:476 msgid "All untracked stock items have been allocated" -msgstr "" +msgstr "所有未跟踪的库存项目都已分配" -#: build/templates/build/index.html:18 part/templates/part/detail.html:339 +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 msgid "New Build Order" msgstr "新建生产订单" -#: build/templates/build/index.html:37 build/templates/build/index.html:38 -msgid "Print Build Orders" -msgstr "打印生产订单" - #: build/templates/build/sidebar.html:5 msgid "Build Order Details" -msgstr "" +msgstr "生产订单详情" #: build/templates/build/sidebar.html:12 msgid "Incomplete Outputs" @@ -1683,1311 +1831,1428 @@ msgstr "未完成输出" #: build/templates/build/sidebar.html:15 msgid "Completed Outputs" +msgstr "已完成输出" + +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" msgstr "" -#: common/files.py:62 -msgid "Unsupported file format: {ext.upper()}" -msgstr "不支持的文件格式: {ext.uper()}" - -#: common/files.py:64 +#: common/files.py:65 msgid "Error reading file (invalid encoding)" -msgstr "" +msgstr "读取文件时发生错误 (无效编码)" -#: common/files.py:69 +#: common/files.py:70 msgid "Error reading file (invalid format)" -msgstr "" +msgstr "读取文件时发生错误 (无效编码)" -#: common/files.py:71 +#: common/files.py:72 msgid "Error reading file (incorrect dimension)" -msgstr "" +msgstr "读取文件时出错(不正确的尺寸)" -#: common/files.py:73 +#: common/files.py:74 msgid "Error reading file (data could be corrupted)" -msgstr "" +msgstr "读取文件时出错(数据可能已损坏)" #: common/forms.py:13 msgid "File" -msgstr "" +msgstr "文件" #: common/forms.py:14 msgid "Select file to upload" -msgstr "" +msgstr "选择要上传的文件" #: common/forms.py:28 msgid "{name.title()} File" -msgstr "" +msgstr "{name.title()} 文件" #: common/forms.py:29 #, python-brace-format msgid "Select {name} file to upload" -msgstr "" - -#: common/models.py:65 templates/js/translated/part.js:781 -msgid "Updated" -msgstr "" +msgstr "选择 {name} 文件上传" #: common/models.py:66 +msgid "Updated" +msgstr "已更新" + +#: common/models.py:67 msgid "Timestamp of last update" -msgstr "" +msgstr "最后一次更新时间" -#: common/models.py:495 +#: common/models.py:500 msgid "Settings key (must be unique - case insensitive)" -msgstr "" +msgstr "设置键值(必须是唯一的 - 大小写不敏感)" -#: common/models.py:497 +#: common/models.py:502 msgid "Settings value" -msgstr "" +msgstr "设定值" -#: common/models.py:538 +#: common/models.py:543 msgid "Chosen value is not a valid option" -msgstr "" +msgstr "选择的值不是一个有效的选项" -#: common/models.py:555 +#: common/models.py:560 msgid "Value must be a boolean value" -msgstr "" +msgstr "值必须是布尔量" -#: common/models.py:566 +#: common/models.py:571 msgid "Value must be an integer value" -msgstr "" +msgstr "值必须为整数" -#: common/models.py:611 +#: common/models.py:616 msgid "Key string must be unique" -msgstr "" +msgstr "关键字必须是唯一的" -#: common/models.py:795 +#: common/models.py:811 msgid "No group" -msgstr "" +msgstr "无群组" -#: common/models.py:820 +#: common/models.py:836 msgid "An empty domain is not allowed." -msgstr "" +msgstr "不允许空域。" -#: common/models.py:822 +#: common/models.py:838 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" - -#: common/models.py:873 -msgid "Restart required" -msgstr "" - -#: common/models.py:874 -msgid "A setting has been changed which requires a server restart" -msgstr "" - -#: common/models.py:881 -msgid "Server Instance Name" -msgstr "" - -#: common/models.py:883 -msgid "String descriptor for the server instance" -msgstr "" - -#: common/models.py:888 -msgid "Use instance name" -msgstr "" - -#: common/models.py:889 -msgid "Use the instance name in the title-bar" -msgstr "" +msgstr "无效的域名: {domain}" #: common/models.py:895 -msgid "Restrict showing `about`" -msgstr "" +msgid "Restart required" +msgstr "需要重启" #: common/models.py:896 -msgid "Show the `about` modal only to superusers" -msgstr "" +msgid "A setting has been changed which requires a server restart" +msgstr "设置已更改,需要服务器重启" -#: common/models.py:902 company/models.py:98 company/models.py:99 +#: common/models.py:903 +msgid "Server Instance Name" +msgstr "服务器实例名称" + +#: common/models.py:905 +msgid "String descriptor for the server instance" +msgstr "服务器实例的字符串描述" + +#: common/models.py:910 +msgid "Use instance name" +msgstr "使用实例名称" + +#: common/models.py:911 +msgid "Use the instance name in the title-bar" +msgstr "在标题栏中使用实例名称" + +#: common/models.py:917 +msgid "Restrict showing `about`" +msgstr "限制显示 `关于` 信息" + +#: common/models.py:918 +msgid "Show the `about` modal only to superusers" +msgstr "只向超级用户显示 `about` 信息" + +#: common/models.py:924 company/models.py:98 company/models.py:99 msgid "Company name" msgstr "公司名称" -#: common/models.py:903 +#: common/models.py:925 msgid "Internal company name" msgstr "内部公司名称" -#: common/models.py:908 +#: common/models.py:930 msgid "Base URL" -msgstr "" - -#: common/models.py:909 -msgid "Base URL for server instance" -msgstr "" - -#: common/models.py:916 -msgid "Default Currency" -msgstr "" - -#: common/models.py:917 -msgid "Select base currency for pricing caluclations" -msgstr "" - -#: common/models.py:924 -msgid "Download from URL" -msgstr "" - -#: common/models.py:925 -msgid "Allow download of remote images and files from external URL" -msgstr "" +msgstr "基准 URL" #: common/models.py:931 +msgid "Base URL for server instance" +msgstr "服务器实例的基准 URL" + +#: common/models.py:938 +msgid "Default Currency" +msgstr "默认货币" + +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" +msgstr "为价格计算选择基础货币" + +#: common/models.py:946 +msgid "Download from URL" +msgstr "从 URL 下载" + +#: common/models.py:947 +msgid "Allow download of remote images and files from external URL" +msgstr "允许从外部 URL 下载图像和文件" + +#: common/models.py:953 msgid "Download Size Limit" -msgstr "" +msgstr "下载大小限速" -#: common/models.py:932 +#: common/models.py:954 msgid "Maximum allowable download size for remote image" -msgstr "" +msgstr "远程图像的最大允许下载大小" -#: common/models.py:943 +#: common/models.py:965 msgid "User-agent used to download from URL" -msgstr "" - -#: common/models.py:944 -msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "" - -#: common/models.py:949 -msgid "Require confirm" -msgstr "" - -#: common/models.py:950 -msgid "Require explicit user confirmation for certain action." -msgstr "" - -#: common/models.py:956 -msgid "Tree Depth" -msgstr "" - -#: common/models.py:957 -msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." -msgstr "" +msgstr "用于从 URL 下载的用户代理配置" #: common/models.py:966 -msgid "Automatic Backup" +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "允许覆盖用于从外部 URL 下载图像和文件的用户代理(默认值为空)" + +#: common/models.py:971 +msgid "Require confirm" +msgstr "需要确认" + +#: common/models.py:972 +msgid "Require explicit user confirmation for certain action." +msgstr "某些操作需要用户确认。" + +#: common/models.py:978 +msgid "Tree Depth" +msgstr "树深度" + +#: common/models.py:979 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "树视图的默认深度。更深的层级会待需要时再加载。" + +#: common/models.py:988 +msgid "Update Check Inverval" msgstr "" -#: common/models.py:967 -msgid "Enable automatic backup of database and media files" +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:973 -msgid "Days Between Backup" -msgstr "" - -#: common/models.py:974 -msgid "Specify number of days between automated backup events" -msgstr "" - -#: common/models.py:983 -msgid "Delete Old Tasks" -msgstr "" - -#: common/models.py:984 -msgid "Background task results will be deleted after specified number of days" -msgstr "" - -#: common/models.py:994 -msgid "Delete Error Logs" -msgstr "" - -#: common/models.py:995 -msgid "Error logs will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1005 templates/InvenTree/notifications/history.html:13 -#: templates/InvenTree/notifications/history.html:14 -#: templates/InvenTree/notifications/notifications.html:77 -msgid "Delete Notifications" -msgstr "" - -#: common/models.py:1006 -msgid "User notifications will be deleted after specified number of days" -msgstr "" - -#: common/models.py:1016 templates/InvenTree/settings/sidebar.html:33 -msgid "Barcode Support" -msgstr "" - -#: common/models.py:1017 -msgid "Enable barcode scanner support" -msgstr "启用条形码扫描支持" - -#: common/models.py:1023 -msgid "Barcode Input Delay" -msgstr "" - -#: common/models.py:1024 -msgid "Barcode input processing delay time" -msgstr "" - -#: common/models.py:1034 -msgid "Barcode Webcam Support" -msgstr "" - -#: common/models.py:1035 -msgid "Allow barcode scanning via webcam in browser" -msgstr "" - -#: common/models.py:1041 -msgid "IPN Regex" -msgstr "" - -#: common/models.py:1042 -msgid "Regular expression pattern for matching Part IPN" -msgstr "" - -#: common/models.py:1046 -msgid "Allow Duplicate IPN" -msgstr "" - -#: common/models.py:1047 -msgid "Allow multiple parts to share the same IPN" -msgstr "" - -#: common/models.py:1053 -msgid "Allow Editing IPN" -msgstr "" - -#: common/models.py:1054 -msgid "Allow changing the IPN value while editing a part" -msgstr "" - -#: common/models.py:1060 -msgid "Copy Part BOM Data" -msgstr "" - -#: common/models.py:1061 -msgid "Copy BOM data by default when duplicating a part" -msgstr "" - -#: common/models.py:1067 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:1068 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:1074 -msgid "Copy Part Test Data" -msgstr "" - -#: common/models.py:1075 -msgid "Copy test data by default when duplicating a part" -msgstr "" - -#: common/models.py:1081 -msgid "Copy Category Parameter Templates" -msgstr "" - -#: common/models.py:1082 -msgid "Copy category parameter templates when creating a part" -msgstr "" - -#: common/models.py:1088 part/admin.py:41 part/models.py:3234 -#: report/models.py:158 templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:516 -msgid "Template" -msgstr "模板" - -#: common/models.py:1089 -msgid "Parts are templates by default" -msgstr "" - -#: common/models.py:1095 part/admin.py:37 part/admin.py:262 part/models.py:958 -#: templates/js/translated/bom.js:1602 -#: templates/js/translated/table_filters.js:196 -#: templates/js/translated/table_filters.js:475 -msgid "Assembly" -msgstr "组装" - -#: common/models.py:1096 -msgid "Parts can be assembled from other components by default" -msgstr "" - -#: common/models.py:1102 part/admin.py:38 part/models.py:964 -#: templates/js/translated/table_filters.js:483 -msgid "Component" -msgstr "组件" - -#: common/models.py:1103 -msgid "Parts can be used as sub-components by default" -msgstr "" - -#: common/models.py:1109 part/admin.py:39 part/models.py:975 -msgid "Purchaseable" -msgstr "可购买" - -#: common/models.py:1110 -msgid "Parts are purchaseable by default" -msgstr "商品默认可购买" - -#: common/models.py:1116 part/admin.py:40 part/models.py:980 -#: templates/js/translated/table_filters.js:504 -msgid "Salable" -msgstr "可销售" - -#: common/models.py:1117 -msgid "Parts are salable by default" -msgstr "商品默认可销售" - -#: common/models.py:1123 part/admin.py:42 part/models.py:970 -#: templates/js/translated/table_filters.js:46 -#: templates/js/translated/table_filters.js:120 -#: templates/js/translated/table_filters.js:520 -msgid "Trackable" -msgstr "可追踪" - -#: common/models.py:1124 -msgid "Parts are trackable by default" -msgstr "商品默认可跟踪" - -#: common/models.py:1130 part/admin.py:43 part/models.py:990 -#: part/templates/part/part_base.html:156 -#: templates/js/translated/table_filters.js:42 -#: templates/js/translated/table_filters.js:524 -msgid "Virtual" -msgstr "虚拟" - -#: common/models.py:1131 -msgid "Parts are virtual by default" -msgstr "商品默认是虚拟的" - -#: common/models.py:1137 -msgid "Show Import in Views" -msgstr "视图中显示导入" - -#: common/models.py:1138 -msgid "Display the import wizard in some part views" -msgstr "在一些商品视图中显示导入向导" - -#: common/models.py:1144 -msgid "Show related parts" -msgstr "显示相关商品" - -#: common/models.py:1145 -msgid "Display related parts for a part" -msgstr "" - -#: common/models.py:1151 -msgid "Initial Stock Data" -msgstr "" - -#: common/models.py:1152 -msgid "Allow creation of initial stock when adding a new part" -msgstr "" - -#: common/models.py:1158 templates/js/translated/part.js:73 -msgid "Initial Supplier Data" -msgstr "" - -#: common/models.py:1159 -msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" - -#: common/models.py:1165 -msgid "Part Name Display Format" -msgstr "" - -#: common/models.py:1166 -msgid "Format to display the part name" -msgstr "" - -#: common/models.py:1173 -msgid "Part Category Default Icon" -msgstr "" - -#: common/models.py:1174 -msgid "Part category default icon (empty means no icon)" -msgstr "" - -#: common/models.py:1179 -msgid "Pricing Decimal Places" -msgstr "" - -#: common/models.py:1180 -msgid "Number of decimal places to display when rendering pricing data" -msgstr "" - -#: common/models.py:1190 -msgid "Use Supplier Pricing" -msgstr "" - -#: common/models.py:1191 -msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" - -#: common/models.py:1197 -msgid "Purchase History Override" -msgstr "" - -#: common/models.py:1198 -msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" - -#: common/models.py:1204 -msgid "Use Stock Item Pricing" -msgstr "" - -#: common/models.py:1205 -msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" - -#: common/models.py:1211 -msgid "Stock Item Pricing Age" -msgstr "" - -#: common/models.py:1212 -msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" - -#: common/models.py:1222 -msgid "Use Variant Pricing" -msgstr "" - -#: common/models.py:1223 -msgid "Include variant pricing in overall pricing calculations" -msgstr "" - -#: common/models.py:1229 -msgid "Active Variants Only" -msgstr "" - -#: common/models.py:1230 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "" - -#: common/models.py:1236 -msgid "Pricing Rebuild Time" -msgstr "" - -#: common/models.py:1237 -msgid "Number of days before part pricing is automatically updated" -msgstr "" - -#: common/models.py:1238 common/models.py:1361 +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 msgid "days" msgstr "天" -#: common/models.py:1247 +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "自动备份" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "启用数据库和媒体文件自动备份" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "指定自动备份之间的间隔天数" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "后台任务结果将在指定天数后删除" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "错误日志将在指定天数后删除" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "用户通知将在指定天数后删除" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "条形码支持" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "启用条形码扫描支持" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "条码输入延迟" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "条码输入处理延迟时间" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "条码摄像头支持" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "允许在浏览器中通过摄像头扫描条码" + +#: common/models.py:1075 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1076 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "IPN 正则表达式" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "用于匹配零件 IPN 的正则表达式模式" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "允许重复的 IPN" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "允许多个部件使用同一 IPN" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "允许编辑 IPN" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "允许编辑部件时更改 IPN 值" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "复制零件 BOM 数据" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "复制零件时默认复制 BOM 数据" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "复制零件参数数据" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "复制零件时默认复制参数数据" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "复制零件测试数据" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "复制零件时默认复制测试数据" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "复制类别参数模板" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "创建零件时复制类别参数模板" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "模板" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "零件默认为模板" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "组装" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "默认情况下可以从其他组件组装部件" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "组件" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "默认情况下可以从其他组件组装部件" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "可购买" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "商品默认可购买" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "可销售" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "商品默认可销售" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "可追踪" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "商品默认可跟踪" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "虚拟" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "商品默认是虚拟的" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "视图中显示导入" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "在一些商品视图中显示导入向导" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "显示相关商品" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "初始库存数据" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "初始供应商数据" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "部件名称显示格式" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "零件名称显示格式" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "零件类别默认图标" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "零件类别默认图标(留空表示没有图标)" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "使用供应商价格" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "覆盖购买记录" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 msgid "Internal Prices" msgstr "内部价格" -#: common/models.py:1248 +#: common/models.py:1300 msgid "Enable internal prices for parts" msgstr "启用内部商品价格" -#: common/models.py:1254 +#: common/models.py:1306 msgid "Internal Price Override" -msgstr "" +msgstr "覆盖内部价格" -#: common/models.py:1255 +#: common/models.py:1307 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1261 +#: common/models.py:1313 msgid "Enable label printing" -msgstr "" +msgstr "启用标签打印功能" -#: common/models.py:1262 +#: common/models.py:1314 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1268 +#: common/models.py:1320 msgid "Label Image DPI" -msgstr "" +msgstr "标签图像 DPI" -#: common/models.py:1269 +#: common/models.py:1321 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1278 +#: common/models.py:1330 msgid "Enable Reports" -msgstr "" +msgstr "启用报告" -#: common/models.py:1279 +#: common/models.py:1331 msgid "Enable generation of reports" -msgstr "" +msgstr "启用报告生成" -#: common/models.py:1285 templates/stats.html:25 +#: common/models.py:1337 templates/stats.html:25 msgid "Debug Mode" msgstr "调试模式" -#: common/models.py:1286 +#: common/models.py:1338 msgid "Generate reports in debug mode (HTML output)" msgstr "在调试模式生成报告(HTML输出)" -#: common/models.py:1292 +#: common/models.py:1344 msgid "Page Size" msgstr "页面大小" -#: common/models.py:1293 +#: common/models.py:1345 msgid "Default page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: common/models.py:1303 +#: common/models.py:1355 msgid "Enable Test Reports" -msgstr "" +msgstr "启用测试报告" -#: common/models.py:1304 +#: common/models.py:1356 msgid "Enable generation of test reports" msgstr "启用生成测试报表" -#: common/models.py:1310 +#: common/models.py:1362 msgid "Attach Test Reports" -msgstr "" +msgstr "添加测试报告" -#: common/models.py:1311 +#: common/models.py:1363 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1317 +#: common/models.py:1369 msgid "Globally Unique Serials" -msgstr "" +msgstr "全局唯一序列号" -#: common/models.py:1318 +#: common/models.py:1370 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1324 +#: common/models.py:1376 msgid "Autofill Serial Numbers" -msgstr "" +msgstr "自动填充序列号" -#: common/models.py:1325 +#: common/models.py:1377 msgid "Autofill serial numbers in forms" -msgstr "" +msgstr "以表格形式自动填写序列号" -#: common/models.py:1331 +#: common/models.py:1383 msgid "Delete Depleted Stock" -msgstr "" +msgstr "删除已耗尽的库存" -#: common/models.py:1332 +#: common/models.py:1384 msgid "Determines default behaviour when a stock item is depleted" msgstr "" -#: common/models.py:1338 +#: common/models.py:1390 msgid "Batch Code Template" msgstr "" -#: common/models.py:1339 +#: common/models.py:1391 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1344 +#: common/models.py:1396 msgid "Stock Expiry" msgstr "库存到期" -#: common/models.py:1345 +#: common/models.py:1397 msgid "Enable stock expiry functionality" msgstr "启用库存到期功能" -#: common/models.py:1351 +#: common/models.py:1403 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/models.py:1352 +#: common/models.py:1404 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/models.py:1358 +#: common/models.py:1410 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1359 +#: common/models.py:1411 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1366 +#: common/models.py:1418 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1367 +#: common/models.py:1419 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1373 +#: common/models.py:1425 msgid "Stock Ownership Control" msgstr "库存所有权控制" -#: common/models.py:1374 +#: common/models.py:1426 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1380 +#: common/models.py:1432 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1381 +#: common/models.py:1433 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1386 +#: common/models.py:1438 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1387 +#: common/models.py:1439 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1393 +#: common/models.py:1445 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1394 +#: common/models.py:1467 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1400 +#: common/models.py:1473 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1401 +#: common/models.py:1474 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1407 +#: common/models.py:1480 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1408 +#: common/models.py:1481 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1414 +#: common/models.py:1487 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1415 +#: common/models.py:1488 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1421 +#: common/models.py:1494 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "编辑已完成的采购订单" -#: common/models.py:1422 +#: common/models.py:1495 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1429 +#: common/models.py:1502 msgid "Enable password forgot" -msgstr "" +msgstr "启用忘记密码" -#: common/models.py:1430 +#: common/models.py:1503 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "在登录页面启用忘记密码功能" -#: common/models.py:1436 +#: common/models.py:1509 msgid "Enable registration" -msgstr "" +msgstr "启用注册" -#: common/models.py:1437 +#: common/models.py:1510 msgid "Enable self-registration for users on the login pages" -msgstr "" +msgstr "在登录页面启用注册功能" -#: common/models.py:1443 +#: common/models.py:1516 msgid "Enable SSO" -msgstr "" +msgstr "启用 SSO" -#: common/models.py:1444 +#: common/models.py:1517 msgid "Enable SSO on the login pages" -msgstr "" +msgstr "在登录页面启用 SSO" -#: common/models.py:1450 +#: common/models.py:1523 msgid "Enable SSO registration" -msgstr "" +msgstr "启用 SSO 注册" -#: common/models.py:1451 +#: common/models.py:1524 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1457 +#: common/models.py:1530 msgid "Email required" -msgstr "" +msgstr "需要邮箱" -#: common/models.py:1458 +#: common/models.py:1531 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1464 +#: common/models.py:1537 msgid "Auto-fill SSO users" -msgstr "" +msgstr "自动填充 SSO 用户" -#: common/models.py:1465 +#: common/models.py:1538 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1471 +#: common/models.py:1544 msgid "Mail twice" msgstr "" -#: common/models.py:1472 +#: common/models.py:1545 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1478 +#: common/models.py:1551 msgid "Password twice" msgstr "" -#: common/models.py:1479 +#: common/models.py:1552 msgid "On signup ask users twice for their password" -msgstr "" +msgstr "当注册时请用户两次输入密码" -#: common/models.py:1485 +#: common/models.py:1558 msgid "Allowed domains" msgstr "" -#: common/models.py:1486 +#: common/models.py:1559 msgid "Restrict signup to certain domains (comma-separated, strarting with @)" msgstr "" -#: common/models.py:1492 +#: common/models.py:1565 msgid "Group on signup" msgstr "" -#: common/models.py:1493 +#: common/models.py:1566 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1499 +#: common/models.py:1572 msgid "Enforce MFA" -msgstr "" +msgstr "强制启用 MFA" -#: common/models.py:1500 +#: common/models.py:1573 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1506 +#: common/models.py:1579 msgid "Check plugins on startup" -msgstr "" +msgstr "启动时检查插件" -#: common/models.py:1507 +#: common/models.py:1580 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1514 +#: common/models.py:1587 msgid "Check plugin signatures" -msgstr "" +msgstr "检查插件签名" -#: common/models.py:1515 +#: common/models.py:1588 msgid "Check and show signatures for plugins" -msgstr "" +msgstr "检查并显示插件的签名" -#: common/models.py:1522 +#: common/models.py:1595 msgid "Enable URL integration" -msgstr "" +msgstr "启用 URL 集成" -#: common/models.py:1523 +#: common/models.py:1596 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1530 +#: common/models.py:1603 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1531 +#: common/models.py:1604 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1538 +#: common/models.py:1611 msgid "Enable app integration" -msgstr "" +msgstr "启用应用集成" -#: common/models.py:1539 +#: common/models.py:1612 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:1546 +#: common/models.py:1619 msgid "Enable schedule integration" msgstr "" -#: common/models.py:1547 +#: common/models.py:1620 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1554 +#: common/models.py:1627 msgid "Enable event integration" msgstr "" -#: common/models.py:1555 +#: common/models.py:1628 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:1574 common/models.py:1923 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:1635 +msgid "Stocktake Functionality" msgstr "" -#: common/models.py:1596 -msgid "Show subscribed parts" +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:1597 -msgid "Show subscribed parts on the homepage" +#: common/models.py:1642 +msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:1603 -msgid "Show subscribed categories" -msgstr "" - -#: common/models.py:1604 -msgid "Show subscribed part categories on the homepage" -msgstr "" - -#: common/models.py:1610 -msgid "Show latest parts" -msgstr "显示最近商品" - -#: common/models.py:1611 -msgid "Show latest parts on the homepage" -msgstr "在主页上显示最近商品" - -#: common/models.py:1617 -msgid "Recent Part Count" -msgstr "" - -#: common/models.py:1618 -msgid "Number of recent parts to display on index page" -msgstr "" - -#: common/models.py:1624 -msgid "Show unvalidated BOMs" -msgstr "" - -#: common/models.py:1625 -msgid "Show BOMs that await validation on the homepage" -msgstr "" - -#: common/models.py:1631 -msgid "Show recent stock changes" -msgstr "" - -#: common/models.py:1632 -msgid "Show recently changed stock items on the homepage" -msgstr "" - -#: common/models.py:1638 -msgid "Recent Stock Count" -msgstr "" - -#: common/models.py:1639 -msgid "Number of recent stock items to display on index page" -msgstr "" - -#: common/models.py:1645 -msgid "Show low stock" -msgstr "" - -#: common/models.py:1646 -msgid "Show low stock items on the homepage" +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" #: common/models.py:1652 -msgid "Show depleted stock" +msgid "Report Deletion Interval" msgstr "" #: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "查看订阅中的部件" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "在主页上显示订阅中的部件" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "查看订阅中的类别" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "在主页上显示订阅中的部件类别" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "显示最近商品" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "在主页上显示最近商品" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "显示未验证的物料清单" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "在主页上显示待验证的物料清单" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "显示最近的库存变化" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "显示低库存" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "在主页上显示低库存的项目" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1659 +#: common/models.py:1773 msgid "Show needed stock" msgstr "" -#: common/models.py:1660 +#: common/models.py:1774 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1666 +#: common/models.py:1780 msgid "Show expired stock" -msgstr "" +msgstr "显示过期库存" -#: common/models.py:1667 +#: common/models.py:1781 msgid "Show expired stock items on the homepage" -msgstr "" +msgstr "在主页上显示过期的库存项目" -#: common/models.py:1673 +#: common/models.py:1787 msgid "Show stale stock" msgstr "" -#: common/models.py:1674 +#: common/models.py:1788 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1680 +#: common/models.py:1794 msgid "Show pending builds" msgstr "" -#: common/models.py:1681 +#: common/models.py:1795 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1687 +#: common/models.py:1801 msgid "Show overdue builds" msgstr "显示逾期生产" -#: common/models.py:1688 +#: common/models.py:1802 msgid "Show overdue builds on the homepage" msgstr "在主页上显示逾期的生产" -#: common/models.py:1694 +#: common/models.py:1808 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1695 +#: common/models.py:1809 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1701 +#: common/models.py:1815 msgid "Show overdue POs" msgstr "" -#: common/models.py:1702 +#: common/models.py:1816 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1708 +#: common/models.py:1822 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1709 +#: common/models.py:1823 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1715 +#: common/models.py:1829 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1716 +#: common/models.py:1830 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1722 +#: common/models.py:1836 msgid "Show News" msgstr "" -#: common/models.py:1723 +#: common/models.py:1837 msgid "Show news on the homepage" msgstr "" -#: common/models.py:1729 +#: common/models.py:1843 msgid "Inline label display" msgstr "内嵌标签显示" -#: common/models.py:1730 +#: common/models.py:1844 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:1736 +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 msgid "Inline report display" msgstr "" -#: common/models.py:1737 +#: common/models.py:1858 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:1743 +#: common/models.py:1864 msgid "Search Parts" -msgstr "" +msgstr "搜索部件" -#: common/models.py:1744 +#: common/models.py:1865 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:1750 -msgid "Seach Supplier Parts" -msgstr "" +#: common/models.py:1871 +msgid "Search Supplier Parts" +msgstr "搜索供应商部件" -#: common/models.py:1751 +#: common/models.py:1872 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:1757 +#: common/models.py:1878 msgid "Search Manufacturer Parts" -msgstr "" +msgstr "搜索制造商部件" -#: common/models.py:1758 +#: common/models.py:1879 msgid "Display manufacturer parts in search preview window" -msgstr "" +msgstr "在搜索预览窗口中显示制造商部件" -#: common/models.py:1764 +#: common/models.py:1885 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1765 +#: common/models.py:1886 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:1771 +#: common/models.py:1892 msgid "Search Categories" -msgstr "" +msgstr "搜索分类" -#: common/models.py:1772 +#: common/models.py:1893 msgid "Display part categories in search preview window" -msgstr "" +msgstr "在搜索预览窗口中显示部件类别" -#: common/models.py:1778 +#: common/models.py:1899 msgid "Search Stock" -msgstr "" +msgstr "搜索库存" -#: common/models.py:1779 +#: common/models.py:1900 msgid "Display stock items in search preview window" -msgstr "" +msgstr "在搜索预览窗口中显示库存项目" -#: common/models.py:1785 +#: common/models.py:1906 msgid "Hide Unavailable Stock Items" -msgstr "" +msgstr "隐藏不可用的库存项目" -#: common/models.py:1786 +#: common/models.py:1907 msgid "Exclude stock items which are not available from the search preview window" -msgstr "" +msgstr "在搜索预览窗口中排除不可用的库存项目" -#: common/models.py:1792 +#: common/models.py:1913 msgid "Search Locations" -msgstr "" +msgstr "搜索位置" -#: common/models.py:1793 +#: common/models.py:1914 msgid "Display stock locations in search preview window" -msgstr "" +msgstr "在搜索预览窗口中显示库存位置" -#: common/models.py:1799 +#: common/models.py:1920 msgid "Search Companies" -msgstr "" +msgstr "搜索公司" -#: common/models.py:1800 +#: common/models.py:1921 msgid "Display companies in search preview window" -msgstr "" +msgstr "在搜索预览窗口中显示公司" -#: common/models.py:1806 +#: common/models.py:1927 msgid "Search Build Orders" msgstr "" -#: common/models.py:1807 +#: common/models.py:1928 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:1813 +#: common/models.py:1934 msgid "Search Purchase Orders" -msgstr "" +msgstr "搜索采购订单" -#: common/models.py:1814 +#: common/models.py:1935 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:1820 +#: common/models.py:1941 msgid "Exclude Inactive Purchase Orders" -msgstr "" +msgstr "排除不活动的采购订单" -#: common/models.py:1821 +#: common/models.py:1942 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:1827 +#: common/models.py:1948 msgid "Search Sales Orders" msgstr "" -#: common/models.py:1828 +#: common/models.py:1949 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:1834 +#: common/models.py:1955 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:1835 +#: common/models.py:1956 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:1841 -msgid "Search Preview Results" -msgstr "搜索预览结果" - -#: common/models.py:1842 -msgid "Number of results to show in each section of the search preview window" -msgstr "" - -#: common/models.py:1848 -msgid "Show Quantity in Forms" -msgstr "在表格中显示数量" - -#: common/models.py:1849 -msgid "Display available part quantity in some forms" -msgstr "在某些表格中显示可用的商品数量" - -#: common/models.py:1855 -msgid "Escape Key Closes Forms" -msgstr "" - -#: common/models.py:1856 -msgid "Use the escape key to close modal forms" -msgstr "" - -#: common/models.py:1862 -msgid "Fixed Navbar" -msgstr "" - -#: common/models.py:1863 -msgid "The navbar position is fixed to the top of the screen" -msgstr "" - -#: common/models.py:1869 -msgid "Date Format" -msgstr "" - -#: common/models.py:1870 -msgid "Preferred format for displaying dates" -msgstr "" - -#: common/models.py:1884 part/templates/part/detail.html:41 -msgid "Part Scheduling" -msgstr "" - -#: common/models.py:1885 -msgid "Display part scheduling information" -msgstr "" - -#: common/models.py:1891 part/templates/part/detail.html:61 -#: templates/js/translated/part.js:797 -msgid "Part Stocktake" -msgstr "" - -#: common/models.py:1892 -msgid "Display part stocktake information" -msgstr "" - -#: common/models.py:1898 -msgid "Table String Length" -msgstr "" - -#: common/models.py:1899 -msgid "Maximimum length limit for strings displayed in table views" +#: common/models.py:1962 +msgid "Search Return Orders" msgstr "" #: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "搜索预览结果" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +msgid "Regex Search" +msgstr "" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "在表格中显示数量" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "在某些表格中显示可用的商品数量" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "固定导航栏" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "日期格式" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 msgid "Price break quantity" msgstr "" -#: common/models.py:1970 company/serializers.py:397 order/models.py:975 -#: templates/js/translated/company.js:1169 templates/js/translated/part.js:1391 -#: templates/js/translated/pricing.js:595 +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 msgid "Price" msgstr "价格" -#: common/models.py:1971 +#: common/models.py:2111 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2131 common/models.py:2309 +#: common/models.py:2271 common/models.py:2449 msgid "Endpoint" msgstr "" -#: common/models.py:2132 +#: common/models.py:2272 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2141 +#: common/models.py:2281 msgid "Name for this webhook" msgstr "" -#: common/models.py:2146 part/admin.py:36 part/models.py:985 -#: plugin/models.py:100 templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:116 -#: templates/js/translated/table_filters.js:344 -#: templates/js/translated/table_filters.js:470 +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 msgid "Active" msgstr "" -#: common/models.py:2147 +#: common/models.py:2287 msgid "Is this webhook active" msgstr "" -#: common/models.py:2161 +#: common/models.py:2301 msgid "Token" msgstr "令牌" -#: common/models.py:2162 +#: common/models.py:2302 msgid "Token for access" msgstr "" -#: common/models.py:2169 +#: common/models.py:2309 msgid "Secret" msgstr "" -#: common/models.py:2170 +#: common/models.py:2310 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2276 +#: common/models.py:2416 msgid "Message ID" msgstr "" -#: common/models.py:2277 +#: common/models.py:2417 msgid "Unique identifier for this message" -msgstr "" +msgstr "该消息的唯一标识符" -#: common/models.py:2285 +#: common/models.py:2425 msgid "Host" msgstr "" -#: common/models.py:2286 +#: common/models.py:2426 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2293 +#: common/models.py:2433 msgid "Header" msgstr "" -#: common/models.py:2294 +#: common/models.py:2434 msgid "Header of this message" msgstr "" -#: common/models.py:2300 +#: common/models.py:2440 msgid "Body" msgstr "" -#: common/models.py:2301 +#: common/models.py:2441 msgid "Body of this message" msgstr "" -#: common/models.py:2310 +#: common/models.py:2450 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2315 +#: common/models.py:2455 msgid "Worked on" msgstr "" -#: common/models.py:2316 +#: common/models.py:2456 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:2470 +#: common/models.py:2610 msgid "Id" msgstr "" -#: common/models.py:2476 templates/js/translated/news.js:35 +#: common/models.py:2616 templates/js/translated/news.js:35 msgid "Title" -msgstr "" +msgstr "标题" -#: common/models.py:2486 templates/js/translated/news.js:51 +#: common/models.py:2626 templates/js/translated/news.js:51 msgid "Published" msgstr "" -#: common/models.py:2491 templates/InvenTree/settings/plugin.html:62 +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 #: templates/InvenTree/settings/plugin_settings.html:33 #: templates/js/translated/news.js:47 msgid "Author" -msgstr "" +msgstr "作者" -#: common/models.py:2496 templates/js/translated/news.js:43 +#: common/models.py:2636 templates/js/translated/news.js:43 msgid "Summary" -msgstr "" +msgstr "概述" -#: common/models.py:2501 +#: common/models.py:2641 msgid "Read" msgstr "" -#: common/models.py:2502 +#: common/models.py:2642 msgid "Was this news item read?" msgstr "" @@ -2998,9 +3263,9 @@ msgstr "" #: common/notifications.py:296 msgid "A new order has been created and assigned to you" -msgstr "" +msgstr "有新订单被创建并分配给你" -#: common/notifications.py:302 +#: common/notifications.py:302 common/notifications.py:309 msgid "Items Received" msgstr "" @@ -3008,21 +3273,25 @@ msgstr "" msgid "Items have been received against a purchase order" msgstr "" -#: common/notifications.py:416 +#: common/notifications.py:311 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:423 msgid "Error raised by plugin" msgstr "" #: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 -#: order/templates/order/purchase_order_detail.html:25 order/views.py:102 -#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 #: templates/patterns/wizard/upload.html:37 msgid "Upload File" msgstr "上传文件" #: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:103 +#: order/views.py:119 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 #: templates/patterns/wizard/match_fields.html:51 msgid "Match Fields" msgstr "匹配字段" @@ -3060,7 +3329,7 @@ msgstr "公司简介" #: company/models.py:110 company/templates/company/company_base.html:101 #: templates/InvenTree/settings/plugin_settings.html:55 -#: templates/js/translated/company.js:449 +#: templates/js/translated/company.js:500 msgid "Website" msgstr "网站" @@ -3086,6 +3355,7 @@ msgstr "联系电话" #: company/models.py:123 company/templates/company/company_base.html:133 #: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 msgid "Email" msgstr "电子邮件" @@ -3094,6 +3364,9 @@ msgid "Contact email address" msgstr "联系人电子邮件" #: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 msgid "Contact" msgstr "联系人" @@ -3105,11 +3378,11 @@ msgstr "" msgid "Link to external company information" msgstr "链接到外部公司信息" -#: company/models.py:140 part/models.py:879 +#: company/models.py:140 part/models.py:905 msgid "Image" msgstr "图片" -#: company/models.py:143 company/templates/company/detail.html:185 +#: company/models.py:143 company/templates/company/detail.html:221 msgid "Company Notes" msgstr "公司备注" @@ -3137,229 +3410,230 @@ msgstr "是制造商" msgid "Does this company manufacture parts?" msgstr "该公司制造商品吗?" -#: company/models.py:153 company/serializers.py:403 -#: company/templates/company/company_base.html:107 part/models.py:2774 -#: part/serializers.py:159 part/serializers.py:187 stock/serializers.py:182 -#: templates/InvenTree/settings/settings.html:191 -msgid "Currency" -msgstr "货币" - #: company/models.py:156 msgid "Default currency used for this company" msgstr "该公司使用的默认货币" -#: company/models.py:253 company/models.py:488 stock/models.py:656 -#: stock/serializers.py:89 stock/templates/stock/item_base.html:143 -#: templates/js/translated/bom.js:588 -msgid "Base Part" -msgstr "" - -#: company/models.py:257 company/models.py:492 -msgid "Select part" -msgstr "选择商品" - -#: company/models.py:268 company/templates/company/company_base.html:77 -#: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:152 part/serializers.py:370 -#: stock/templates/stock/item_base.html:210 -#: templates/js/translated/company.js:433 -#: templates/js/translated/company.js:534 -#: templates/js/translated/company.js:669 -#: templates/js/translated/company.js:957 -#: templates/js/translated/table_filters.js:447 -msgid "Manufacturer" -msgstr "制造商" - -#: company/models.py:269 -msgid "Select manufacturer" -msgstr "选择制造商" - -#: company/models.py:275 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:160 part/serializers.py:376 -#: templates/js/translated/company.js:305 -#: templates/js/translated/company.js:533 -#: templates/js/translated/company.js:685 -#: templates/js/translated/company.js:976 templates/js/translated/order.js:2320 -#: templates/js/translated/part.js:1313 -msgid "MPN" -msgstr "" - -#: company/models.py:276 -msgid "Manufacturer Part Number" -msgstr "制造商商品编号" - -#: company/models.py:282 -msgid "URL for external manufacturer part link" -msgstr "" - -#: company/models.py:288 -msgid "Manufacturer part description" -msgstr "制造商商品描述" - -#: company/models.py:333 company/models.py:357 company/models.py:511 -#: company/templates/company/manufacturer_part.html:7 -#: company/templates/company/manufacturer_part.html:24 -#: stock/templates/stock/item_base.html:220 -msgid "Manufacturer Part" -msgstr "制造商商品" - -#: company/models.py:364 -msgid "Parameter name" -msgstr "参数名称" - -#: company/models.py:370 -#: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:2177 templates/js/translated/company.js:582 -#: templates/js/translated/company.js:800 templates/js/translated/part.js:1135 -#: templates/js/translated/stock.js:1405 -msgid "Value" -msgstr "数值" - -#: company/models.py:371 -msgid "Parameter value" -msgstr "参数值" - -#: company/models.py:377 part/admin.py:26 part/models.py:952 -#: part/models.py:3194 part/templates/part/part_base.html:286 -#: templates/InvenTree/settings/settings.html:396 -#: templates/js/translated/company.js:806 templates/js/translated/part.js:1141 -msgid "Units" -msgstr "单位" - -#: company/models.py:378 -msgid "Parameter units" -msgstr "参数单位" - -#: company/models.py:456 -msgid "Linked manufacturer part must reference the same base part" -msgstr "" - -#: company/models.py:498 company/templates/company/company_base.html:82 -#: company/templates/company/supplier_part.html:136 order/models.py:264 -#: order/templates/order/order_base.html:121 part/bom.py:285 part/bom.py:313 -#: part/serializers.py:359 stock/templates/stock/item_base.html:227 -#: templates/email/overdue_purchase_order.html:16 -#: templates/js/translated/company.js:304 -#: templates/js/translated/company.js:437 -#: templates/js/translated/company.js:930 templates/js/translated/order.js:2051 -#: templates/js/translated/part.js:1281 templates/js/translated/pricing.js:472 -#: templates/js/translated/table_filters.js:451 -msgid "Supplier" -msgstr "供应商" - -#: company/models.py:499 -msgid "Select supplier" -msgstr "选择供应商" - -#: company/models.py:504 company/templates/company/supplier_part.html:146 -#: part/bom.py:286 part/bom.py:314 part/serializers.py:365 -#: templates/js/translated/company.js:303 templates/js/translated/order.js:2307 -#: templates/js/translated/part.js:1299 templates/js/translated/pricing.js:484 -msgid "SKU" -msgstr "" - -#: company/models.py:505 part/serializers.py:365 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:512 -msgid "Select manufacturer part" -msgstr "选择制造商商品" - -#: company/models.py:518 -msgid "URL for external supplier part link" -msgstr "外部供货商商品链接URL" - -#: company/models.py:524 -msgid "Supplier part description" -msgstr "供应商商品描述" - -#: company/models.py:529 company/templates/company/supplier_part.html:181 -#: part/admin.py:258 part/models.py:3447 part/templates/part/upload_bom.html:59 -#: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report.html:92 -#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:397 -msgid "Note" -msgstr "备注" - -#: company/models.py:533 part/models.py:1867 -msgid "base cost" -msgstr "" - -#: company/models.py:533 part/models.py:1867 -msgid "Minimum charge (e.g. stocking fee)" -msgstr "最低收费(例如库存费)" - -#: company/models.py:535 company/templates/company/supplier_part.html:167 -#: stock/admin.py:101 stock/models.py:682 -#: stock/templates/stock/item_base.html:243 -#: templates/js/translated/company.js:992 templates/js/translated/stock.js:2019 -msgid "Packaging" -msgstr "打包" - -#: company/models.py:535 -msgid "Part packaging" -msgstr "商品打包" - -#: company/models.py:538 company/serializers.py:242 -#: company/templates/company/supplier_part.html:174 -#: templates/js/translated/company.js:997 templates/js/translated/order.js:852 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1542 -#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2368 -#: templates/js/translated/part.js:1331 templates/js/translated/part.js:1383 -msgid "Pack Quantity" -msgstr "" - -#: company/models.py:539 -msgid "Unit quantity supplied in a single pack" -msgstr "" - -#: company/models.py:545 part/models.py:1869 -msgid "multiple" -msgstr "" - -#: company/models.py:545 -msgid "Order multiple" -msgstr "" - -#: company/models.py:553 company/templates/company/supplier_part.html:115 -#: templates/email/build_order_required_stock.html:19 -#: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:1125 templates/js/translated/build.js:1884 -#: templates/js/translated/build.js:2777 templates/js/translated/part.js:601 -#: templates/js/translated/part.js:604 -#: templates/js/translated/table_filters.js:206 -msgid "Available" -msgstr "空闲" - -#: company/models.py:554 -msgid "Quantity available from supplier" -msgstr "" - -#: company/models.py:558 -msgid "Availability Updated" -msgstr "" - -#: company/models.py:559 -msgid "Date of last update of availability data" -msgstr "" - -#: company/serializers.py:72 -msgid "Default currency used for this supplier" -msgstr "该公司使用的默认货币" - -#: company/serializers.py:73 -msgid "Currency Code" -msgstr "货币代码" - -#: company/templates/company/company_base.html:8 +#: company/models.py:222 company/templates/company/company_base.html:8 #: company/templates/company/company_base.html:12 -#: templates/InvenTree/search.html:179 templates/js/translated/company.js:422 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 msgid "Company" msgstr "公司" +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "选择商品" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "制造商" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "选择制造商" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "制造商商品编号" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "制造商商品描述" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "制造商商品" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "参数名称" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "数值" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "参数值" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "单位" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "参数单位" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "供应商" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "选择供应商" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "选择制造商商品" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "外部供货商商品链接URL" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "供应商商品描述" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "备注" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "最低收费(例如库存费)" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "打包" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "商品打包" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "包装数量" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "单个包装提供的的单位数量" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "订购多个" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "空闲" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "供应商的存货数量" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "该公司使用的默认货币" + #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:710 +#: templates/js/translated/purchase_order.js:178 msgid "Create Purchase Order" msgstr "创建采购订单" @@ -3372,13 +3646,13 @@ msgid "Edit company information" msgstr "编辑公司信息" #: company/templates/company/company_base.html:34 -#: templates/js/translated/company.js:365 +#: templates/js/translated/company.js:422 msgid "Edit Company" msgstr "编辑公司信息" #: company/templates/company/company_base.html:38 msgid "Delete company" -msgstr "" +msgstr "删除公司" #: company/templates/company/company_base.html:39 #: company/templates/company/company_base.html:163 @@ -3398,16 +3672,19 @@ msgstr "从 URL 下载图片" #: company/templates/company/company_base.html:61 #: part/templates/part/part_thumb.html:16 msgid "Delete image" -msgstr "" +msgstr "删除图片" -#: company/templates/company/company_base.html:87 order/models.py:665 -#: order/templates/order/sales_order_base.html:116 stock/models.py:701 -#: stock/models.py:702 stock/serializers.py:813 -#: stock/templates/stock/item_base.html:399 +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 #: templates/email/overdue_sales_order.html:16 -#: templates/js/translated/company.js:429 templates/js/translated/order.js:2857 -#: templates/js/translated/stock.js:2610 -#: templates/js/translated/table_filters.js:455 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 msgid "Customer" msgstr "客户" @@ -3420,132 +3697,162 @@ msgid "Phone" msgstr "电话" #: company/templates/company/company_base.html:206 -#: part/templates/part/part_base.html:525 +#: part/templates/part/part_base.html:529 msgid "Remove Image" -msgstr "" +msgstr "移除图像" #: company/templates/company/company_base.html:207 msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:209 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:532 #: templates/InvenTree/settings/user.html:87 #: templates/InvenTree/settings/user.html:149 msgid "Remove" -msgstr "" +msgstr "移除" #: company/templates/company/company_base.html:238 -#: part/templates/part/part_base.html:557 +#: part/templates/part/part_base.html:561 msgid "Upload Image" msgstr "上传图片" #: company/templates/company/company_base.html:253 -#: part/templates/part/part_base.html:612 +#: part/templates/part/part_base.html:616 msgid "Download Image" msgstr "下载图片" -#: company/templates/company/detail.html:14 +#: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 -#: templates/InvenTree/search.html:120 templates/js/translated/search.js:172 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 msgid "Supplier Parts" msgstr "供应商商品" -#: company/templates/company/detail.html:18 +#: company/templates/company/detail.html:19 msgid "Create new supplier part" msgstr "创建新的供应商商品" -#: company/templates/company/detail.html:19 +#: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:123 -#: part/templates/part/detail.html:380 +#: part/templates/part/detail.html:381 msgid "New Supplier Part" msgstr "新建供应商商品" -#: company/templates/company/detail.html:36 -#: company/templates/company/detail.html:84 -#: part/templates/part/category.html:177 +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 msgid "Order parts" msgstr "订购商品" -#: company/templates/company/detail.html:41 -#: company/templates/company/detail.html:89 +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 msgid "Delete parts" msgstr "删除商品" -#: company/templates/company/detail.html:42 -#: company/templates/company/detail.html:90 +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 msgid "Delete Parts" msgstr "删除商品" -#: company/templates/company/detail.html:61 templates/InvenTree/search.html:105 -#: templates/js/translated/search.js:185 +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 msgid "Manufacturer Parts" msgstr "制造商商品" -#: company/templates/company/detail.html:65 +#: company/templates/company/detail.html:66 msgid "Create new manufacturer part" msgstr "新建制造商商品" -#: company/templates/company/detail.html:66 part/templates/part/detail.html:410 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 msgid "New Manufacturer Part" msgstr "新建制造商商品" -#: company/templates/company/detail.html:107 +#: company/templates/company/detail.html:108 msgid "Supplier Stock" msgstr "供货商库存" -#: company/templates/company/detail.html:117 +#: company/templates/company/detail.html:118 #: company/templates/company/sidebar.html:12 #: company/templates/company/supplier_part_sidebar.html:7 #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:107 part/templates/part/part_sidebar.html:35 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 #: templates/InvenTree/settings/sidebar.html:51 -#: templates/js/translated/search.js:293 templates/navbar.html:50 -#: users/models.py:42 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 msgid "Purchase Orders" msgstr "采购订单" -#: company/templates/company/detail.html:121 +#: company/templates/company/detail.html:122 #: order/templates/order/purchase_orders.html:17 msgid "Create new purchase order" msgstr "新建采购订单" -#: company/templates/company/detail.html:122 +#: company/templates/company/detail.html:123 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "新建采购订单" -#: company/templates/company/detail.html:143 -#: company/templates/company/sidebar.html:20 +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:130 part/templates/part/part_sidebar.html:39 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/search.js:317 templates/navbar.html:61 -#: users/models.py:43 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 msgid "Sales Orders" msgstr "销售订单" -#: company/templates/company/detail.html:147 +#: company/templates/company/detail.html:150 #: order/templates/order/sales_orders.html:20 msgid "Create new sales order" msgstr "新建销售订单" -#: company/templates/company/detail.html:148 +#: company/templates/company/detail.html:151 #: order/templates/order/sales_orders.html:21 msgid "New Sales Order" msgstr "新建销售订单" -#: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:1733 +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 msgid "Assigned Stock" msgstr "" +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:236 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +msgid "Add Contact" +msgstr "" + #: company/templates/company/index.html:8 msgid "Supplier List" msgstr "供应商列表" @@ -3556,18 +3863,18 @@ msgid "Manufacturers" msgstr "制造商" #: company/templates/company/manufacturer_part.html:35 -#: company/templates/company/supplier_part.html:221 -#: part/templates/part/detail.html:110 part/templates/part/part_base.html:85 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 msgid "Order part" msgstr "订购商品" #: company/templates/company/manufacturer_part.html:39 -#: templates/js/translated/company.js:717 +#: templates/js/translated/company.js:986 msgid "Edit manufacturer part" msgstr "编辑制造商商品" #: company/templates/company/manufacturer_part.html:43 -#: templates/js/translated/company.js:718 +#: templates/js/translated/company.js:987 msgid "Delete manufacturer part" msgstr "删除生产商商品" @@ -3582,36 +3889,36 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:32 -#: part/admin.py:46 part/templates/part/part_sidebar.html:33 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/search.html:191 templates/navbar.html:48 msgid "Suppliers" msgstr "供应商" #: company/templates/company/manufacturer_part.html:136 -#: part/templates/part/detail.html:391 +#: part/templates/part/detail.html:392 msgid "Delete supplier parts" msgstr "删除供应商商品" #: company/templates/company/manufacturer_part.html:136 #: company/templates/company/manufacturer_part.html:183 -#: part/templates/part/detail.html:392 part/templates/part/detail.html:422 -#: templates/js/translated/forms.js:504 templates/js/translated/helpers.js:36 -#: templates/js/translated/part.js:303 templates/js/translated/stock.js:187 -#: users/models.py:225 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 msgid "Delete" msgstr "删除" #: company/templates/company/manufacturer_part.html:166 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:19 -#: part/templates/part/detail.html:207 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "参数" #: company/templates/company/manufacturer_part.html:170 -#: part/templates/part/detail.html:212 +#: part/templates/part/detail.html:213 #: templates/InvenTree/settings/category.html:12 -#: templates/InvenTree/settings/part.html:63 +#: templates/InvenTree/settings/part.html:64 msgid "New Parameter" msgstr "新建参数" @@ -3619,8 +3926,8 @@ msgstr "新建参数" msgid "Delete parameters" msgstr "删除参数" -#: company/templates/company/manufacturer_part.html:245 -#: part/templates/part/detail.html:869 +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 msgid "Add Parameter" msgstr "添加参数" @@ -3630,178 +3937,127 @@ msgstr "" #: company/templates/company/sidebar.html:10 msgid "Supplied Parts" -msgstr "" +msgstr "供应商部件" #: company/templates/company/sidebar.html:16 msgid "Supplied Stock Items" msgstr "" -#: company/templates/company/sidebar.html:22 +#: company/templates/company/sidebar.html:25 msgid "Assigned Stock Items" msgstr "" +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:665 -#: stock/templates/stock/item_base.html:236 -#: templates/js/translated/company.js:946 templates/js/translated/order.js:1207 -#: templates/js/translated/stock.js:1977 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 msgid "Supplier Part" msgstr "供应商商品" -#: company/templates/company/supplier_part.html:36 -#: part/templates/part/part_base.html:43 -#: stock/templates/stock/item_base.html:41 -#: stock/templates/stock/location.html:48 -msgid "Barcode actions" -msgstr "" - -#: company/templates/company/supplier_part.html:40 -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:45 -#: stock/templates/stock/location.html:50 templates/qr_button.html:1 -msgid "Show QR Code" -msgstr "" - -#: company/templates/company/supplier_part.html:42 -#: stock/templates/stock/item_base.html:48 -#: stock/templates/stock/location.html:52 -#: templates/js/translated/barcode.js:454 -#: templates/js/translated/barcode.js:459 -msgid "Unlink Barcode" -msgstr "" - -#: company/templates/company/supplier_part.html:44 -#: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:50 -#: stock/templates/stock/location.html:54 -msgid "Link Barcode" -msgstr "" - #: company/templates/company/supplier_part.html:51 msgid "Supplier part actions" msgstr "" #: company/templates/company/supplier_part.html:56 #: company/templates/company/supplier_part.html:57 -#: company/templates/company/supplier_part.html:222 -#: part/templates/part/detail.html:111 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 msgid "Order Part" msgstr "订购商品" #: company/templates/company/supplier_part.html:61 #: company/templates/company/supplier_part.html:62 msgid "Update Availability" -msgstr "" +msgstr "更新可用性" #: company/templates/company/supplier_part.html:64 #: company/templates/company/supplier_part.html:65 -#: templates/js/translated/company.js:248 +#: templates/js/translated/company.js:268 msgid "Edit Supplier Part" msgstr "编辑供应商商品" #: company/templates/company/supplier_part.html:69 #: company/templates/company/supplier_part.html:70 -#: templates/js/translated/company.js:223 +#: templates/js/translated/company.js:243 msgid "Duplicate Supplier Part" -msgstr "" +msgstr "复制供应商部件" #: company/templates/company/supplier_part.html:74 msgid "Delete Supplier Part" -msgstr "" +msgstr "删除供应商部件" #: company/templates/company/supplier_part.html:75 msgid "Delete Supplier Part" -msgstr "" +msgstr "删除供应商部件" -#: company/templates/company/supplier_part.html:122 -#: part/templates/part/part_base.html:307 -#: stock/templates/stock/item_base.html:161 -#: stock/templates/stock/location.html:150 -msgid "Barcode Identifier" -msgstr "" - -#: company/templates/company/supplier_part.html:140 +#: company/templates/company/supplier_part.html:134 msgid "No supplier information available" -msgstr "" +msgstr "无可用供应商信息" -#: company/templates/company/supplier_part.html:200 -#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part.html:194 msgid "Supplier Part Stock" msgstr "供货商商品库存" -#: company/templates/company/supplier_part.html:203 +#: company/templates/company/supplier_part.html:197 #: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 msgid "Create new stock item" -msgstr "" +msgstr "新建库存物品" -#: company/templates/company/supplier_part.html:204 +#: company/templates/company/supplier_part.html:198 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 -#: templates/js/translated/stock.js:466 +#: templates/js/translated/stock.js:471 msgid "New Stock Item" -msgstr "" +msgstr "新库存物品" -#: company/templates/company/supplier_part.html:217 -#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part.html:211 msgid "Supplier Part Orders" msgstr "供应商商品订单" -#: company/templates/company/supplier_part.html:242 +#: company/templates/company/supplier_part.html:236 msgid "Pricing Information" msgstr "价格信息" -#: company/templates/company/supplier_part.html:247 -#: company/templates/company/supplier_part.html:317 -#: templates/js/translated/pricing.js:654 +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part.html:285 +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "供应商部件二维码" + +#: company/templates/company/supplier_part.html:279 msgid "Link Barcode to Supplier Part" -msgstr "" +msgstr "将条码绑定至供应商部件" -#: company/templates/company/supplier_part.html:375 +#: company/templates/company/supplier_part.html:354 msgid "Update Part Availability" -msgstr "" +msgstr "更新部件可用性" -#: company/templates/company/supplier_part_navbar.html:15 -#: part/templates/part/part_sidebar.html:14 -#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 -#: stock/templates/stock/stock_app_base.html:10 -#: templates/InvenTree/search.html:153 -#: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:1023 templates/js/translated/part.js:1624 -#: templates/js/translated/part.js:1780 templates/js/translated/stock.js:993 -#: templates/js/translated/stock.js:1802 templates/navbar.html:31 -msgid "Stock" -msgstr "库存" - -#: company/templates/company/supplier_part_navbar.html:22 -msgid "Orders" -msgstr "订单" - -#: company/templates/company/supplier_part_navbar.html:26 -#: company/templates/company/supplier_part_sidebar.html:9 -msgid "Supplier Part Pricing" -msgstr "供应商商品价格" - -#: company/templates/company/supplier_part_navbar.html:29 -#: part/templates/part/part_sidebar.html:30 -#: templates/InvenTree/settings/sidebar.html:37 -msgid "Pricing" -msgstr "定价" - -#: company/templates/company/supplier_part_sidebar.html:5 -#: part/templates/part/category.html:198 -#: part/templates/part/category_sidebar.html:17 stock/admin.py:31 +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 #: stock/templates/stock/location.html:168 #: stock/templates/stock/location.html:182 #: stock/templates/stock/location.html:194 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225 -#: templates/js/translated/stock.js:2487 users/models.py:40 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 msgid "Stock Items" msgstr "库存项" +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "供应商商品价格" + #: company/views.py:33 msgid "New Supplier" msgstr "新增供应商" @@ -3819,7 +4075,7 @@ msgstr "客户信息" msgid "New Customer" msgstr "新建客户" -#: company/views.py:52 templates/js/translated/search.js:270 +#: company/views.py:52 templates/js/translated/search.js:222 msgid "Companies" msgstr "公司" @@ -3827,527 +4083,612 @@ msgstr "公司" msgid "New Company" msgstr "新建公司信息" -#: company/views.py:120 stock/views.py:125 -msgid "Stock Item QR Code" -msgstr "" - -#: label/models.py:102 +#: label/models.py:103 msgid "Label name" msgstr "标签名称" -#: label/models.py:109 +#: label/models.py:110 msgid "Label description" msgstr "标签说明" -#: label/models.py:116 +#: label/models.py:117 msgid "Label" msgstr "标签" -#: label/models.py:117 +#: label/models.py:118 msgid "Label template file" msgstr "标签模板文件" -#: label/models.py:123 report/models.py:254 +#: label/models.py:124 report/models.py:264 msgid "Enabled" msgstr "已启用" -#: label/models.py:124 +#: label/models.py:125 msgid "Label template is enabled" msgstr "标签模板已启用" -#: label/models.py:129 +#: label/models.py:130 msgid "Width [mm]" msgstr "宽度 [mm]" -#: label/models.py:130 +#: label/models.py:131 msgid "Label width, specified in mm" msgstr "标注宽度,以毫米为单位。" -#: label/models.py:136 +#: label/models.py:137 msgid "Height [mm]" msgstr "高度 [mm]" -#: label/models.py:137 +#: label/models.py:138 msgid "Label height, specified in mm" msgstr "标注高度,以毫米为单位。" -#: label/models.py:143 report/models.py:247 +#: label/models.py:144 report/models.py:257 msgid "Filename Pattern" msgstr "文件名样式" -#: label/models.py:144 +#: label/models.py:145 msgid "Pattern for generating label filenames" msgstr "" -#: label/models.py:233 +#: label/models.py:234 msgid "Query filters (comma-separated list of key=value pairs)," msgstr "查询筛选器 (逗号分隔的键值对列表)" -#: label/models.py:234 label/models.py:275 label/models.py:303 -#: report/models.py:280 report/models.py:411 report/models.py:449 +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 msgid "Filters" msgstr "筛选器" -#: label/models.py:274 +#: label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "查询筛选器 (逗号分隔的键值对列表" -#: label/models.py:302 +#: label/models.py:303 msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "商品查询筛选器 (逗号分隔的键值对列表)" -#: order/api.py:161 +#: order/api.py:225 msgid "No matching purchase order found" msgstr "" -#: order/api.py:1257 order/models.py:1021 order/models.py:1100 +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 #: order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report.html:76 -#: stock/templates/stock/item_base.html:182 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 #: templates/email/overdue_purchase_order.html:15 -#: templates/js/translated/order.js:640 templates/js/translated/order.js:1208 -#: templates/js/translated/order.js:2035 templates/js/translated/part.js:1258 -#: templates/js/translated/pricing.js:756 templates/js/translated/stock.js:1957 -#: templates/js/translated/stock.js:2591 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 msgid "Purchase Order" msgstr "" -#: order/api.py:1261 +#: order/api.py:1424 msgid "Unknown" +msgstr "未知" + +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" msgstr "" -#: order/models.py:83 -msgid "Order description" +#: order/models.py:68 +msgid "Total price for this order" msgstr "" -#: order/models.py:85 order/models.py:1283 +#: order/models.py:178 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:200 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 msgid "Link to external page" -msgstr "" +msgstr "链接到外部页面" -#: order/models.py:93 +#: order/models.py:207 +msgid "Expected date for order delivery. Order will be overdue after this date." +msgstr "预期订单交付日期。超过该日期后订单将逾期。" + +#: order/models.py:216 msgid "Created By" -msgstr "" +msgstr "创建者" -#: order/models.py:100 +#: order/models.py:223 msgid "User or group responsible for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:105 -msgid "Order notes" +#: order/models.py:233 +msgid "Point of contact for this order" msgstr "" -#: order/models.py:242 order/models.py:652 +#: order/models.py:237 +msgid "Order notes" +msgstr "订单备注" + +#: order/models.py:328 order/models.py:735 msgid "Order reference" msgstr "" -#: order/models.py:250 order/models.py:670 +#: order/models.py:336 order/models.py:760 msgid "Purchase order status" msgstr "" -#: order/models.py:265 +#: order/models.py:351 msgid "Company from which the items are being ordered" msgstr "订购该商品的公司" -#: order/models.py:268 order/templates/order/order_base.html:133 -#: templates/js/translated/order.js:2060 +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 msgid "Supplier Reference" msgstr "" -#: order/models.py:268 +#: order/models.py:359 msgid "Supplier order reference code" msgstr "" -#: order/models.py:275 +#: order/models.py:366 msgid "received by" -msgstr "" +msgstr "接收方" -#: order/models.py:280 +#: order/models.py:371 order/models.py:1710 msgid "Issue Date" -msgstr "" +msgstr "签发日期" -#: order/models.py:281 +#: order/models.py:372 order/models.py:1711 msgid "Date order was issued" -msgstr "" +msgstr "订单签发日期" -#: order/models.py:286 -msgid "Target Delivery Date" -msgstr "" - -#: order/models.py:287 -msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" - -#: order/models.py:293 +#: order/models.py:378 order/models.py:1717 msgid "Date order was completed" -msgstr "" +msgstr "订单完成日期" -#: order/models.py:332 +#: order/models.py:413 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:491 +#: order/models.py:566 msgid "Quantity must be a positive number" msgstr "数量必须大于0" -#: order/models.py:666 +#: order/models.py:749 msgid "Company to which the items are being sold" msgstr "向其出售该商品的公司" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1704 msgid "Customer Reference " msgstr "" -#: order/models.py:677 +#: order/models.py:768 order/models.py:1705 msgid "Customer order reference code" msgstr "" -#: order/models.py:682 -msgid "Target date for order completion. Order will be overdue after this date." -msgstr "" - -#: order/models.py:685 order/models.py:1241 -#: templates/js/translated/order.js:2904 templates/js/translated/order.js:3066 +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 msgid "Shipment Date" -msgstr "" +msgstr "发货日期" -#: order/models.py:692 +#: order/models.py:777 msgid "shipped by" msgstr "" -#: order/models.py:747 +#: order/models.py:826 msgid "Order cannot be completed as no parts have been assigned" +msgstr "尚未分配部件,因此订单无法完成" + +#: order/models.py:830 +msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:751 -msgid "Only a pending order can be marked as complete" -msgstr "" - -#: order/models.py:754 templates/js/translated/order.js:420 +#: order/models.py:833 templates/js/translated/sales_order.js:441 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:757 +#: order/models.py:836 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:935 +#: order/models.py:1043 msgid "Item quantity" -msgstr "" +msgstr "物品数量" -#: order/models.py:941 +#: order/models.py:1056 msgid "Line item reference" msgstr "" -#: order/models.py:943 +#: order/models.py:1058 msgid "Line item notes" msgstr "" -#: order/models.py:948 +#: order/models.py:1069 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:966 +#: order/models.py:1086 msgid "Context" msgstr "" -#: order/models.py:967 +#: order/models.py:1087 msgid "Additional context for this line" msgstr "" -#: order/models.py:976 +#: order/models.py:1096 msgid "Unit price" -msgstr "" +msgstr "单价" -#: order/models.py:1006 +#: order/models.py:1126 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1014 +#: order/models.py:1134 msgid "deleted" msgstr "" -#: order/models.py:1020 order/models.py:1100 order/models.py:1141 -#: order/models.py:1235 order/models.py:1367 -#: templates/js/translated/order.js:3522 +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 msgid "Order" msgstr "" -#: order/models.py:1039 +#: order/models.py:1159 msgid "Supplier part" msgstr "供应商商品" -#: order/models.py:1046 order/templates/order/order_base.html:178 -#: templates/js/translated/order.js:1713 templates/js/translated/order.js:2436 -#: templates/js/translated/part.js:1375 templates/js/translated/part.js:1407 -#: templates/js/translated/table_filters.js:366 +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 msgid "Received" msgstr "" -#: order/models.py:1047 +#: order/models.py:1167 msgid "Number of items received" msgstr "" -#: order/models.py:1054 stock/models.py:798 stock/serializers.py:173 -#: stock/templates/stock/item_base.html:189 -#: templates/js/translated/stock.js:2008 +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1055 +#: order/models.py:1175 msgid "Unit purchase price" msgstr "" -#: order/models.py:1063 +#: order/models.py:1188 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1129 +#: order/models.py:1254 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1134 +#: order/models.py:1259 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1160 part/templates/part/part_pricing.html:107 -#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:906 +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 msgid "Sale Price" msgstr "销售价格" -#: order/models.py:1161 +#: order/models.py:1286 msgid "Unit sale price" msgstr "" -#: order/models.py:1166 +#: order/models.py:1296 msgid "Shipped quantity" msgstr "" -#: order/models.py:1242 +#: order/models.py:1372 msgid "Date of shipment" msgstr "" -#: order/models.py:1249 +#: order/models.py:1379 msgid "Checked By" msgstr "" -#: order/models.py:1250 +#: order/models.py:1380 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1257 order/models.py:1442 order/serializers.py:1221 -#: order/serializers.py:1349 templates/js/translated/model_renderers.js:314 +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 msgid "Shipment" msgstr "" -#: order/models.py:1258 +#: order/models.py:1388 msgid "Shipment number" msgstr "" -#: order/models.py:1262 +#: order/models.py:1392 msgid "Shipment notes" msgstr "" -#: order/models.py:1268 +#: order/models.py:1398 msgid "Tracking Number" msgstr "" -#: order/models.py:1269 +#: order/models.py:1399 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1276 +#: order/models.py:1406 msgid "Invoice Number" msgstr "" -#: order/models.py:1277 +#: order/models.py:1407 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1295 +#: order/models.py:1425 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1298 +#: order/models.py:1428 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1401 order/models.py:1403 +#: order/models.py:1535 order/models.py:1537 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1407 +#: order/models.py:1541 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1409 +#: order/models.py:1543 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1412 +#: order/models.py:1546 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1422 order/serializers.py:1083 +#: order/models.py:1556 order/serializers.py:1086 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1425 +#: order/models.py:1559 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1426 +#: order/models.py:1560 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1434 +#: order/models.py:1568 msgid "Line" msgstr "" -#: order/models.py:1443 +#: order/models.py:1577 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1456 templates/js/translated/notification.js:55 +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 msgid "Item" -msgstr "" +msgstr "物品" -#: order/models.py:1457 +#: order/models.py:1591 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1460 +#: order/models.py:1594 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:63 -msgid "Price currency" +#: order/models.py:1674 +msgid "Return Order reference" msgstr "" -#: order/serializers.py:193 +#: order/models.py:1688 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +msgid "Return Order" +msgstr "" + +#: order/models.py:1866 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 msgid "Order cannot be cancelled" msgstr "无法取消订单" -#: order/serializers.py:203 order/serializers.py:1101 +#: order/serializers.py:243 order/serializers.py:1104 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:214 order/serializers.py:1112 +#: order/serializers.py:254 order/serializers.py:1115 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:305 +#: order/serializers.py:367 msgid "Order is not open" msgstr "" -#: order/serializers.py:327 +#: order/serializers.py:385 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:346 +#: order/serializers.py:403 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:351 +#: order/serializers.py:408 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:357 +#: order/serializers.py:414 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:358 +#: order/serializers.py:415 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:421 order/serializers.py:1189 +#: order/serializers.py:453 order/serializers.py:1192 msgid "Line Item" msgstr "" -#: order/serializers.py:427 +#: order/serializers.py:459 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:437 order/serializers.py:548 +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:456 templates/js/translated/order.js:1569 +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:464 templates/js/translated/order.js:1580 +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:478 -msgid "Unique identifier field" +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "条形码" + +#: order/serializers.py:510 +msgid "Scanned barcode" msgstr "" -#: order/serializers.py:492 +#: order/serializers.py:526 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:518 +#: order/serializers.py:552 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:564 +#: order/serializers.py:606 order/serializers.py:1578 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:623 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:592 +#: order/serializers.py:634 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:900 +#: order/serializers.py:929 msgid "Sale price currency" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:984 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1044 order/serializers.py:1198 +#: order/serializers.py:1047 order/serializers.py:1201 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1066 +#: order/serializers.py:1069 msgid "Quantity must be positive" -msgstr "" +msgstr "数量必须大于0" -#: order/serializers.py:1211 +#: order/serializers.py:1214 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "输入序列号以进行分配" -#: order/serializers.py:1233 order/serializers.py:1357 +#: order/serializers.py:1236 order/serializers.py:1360 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1236 order/serializers.py:1360 +#: order/serializers.py:1239 order/serializers.py:1363 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1290 +#: order/serializers.py:1293 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1300 +#: order/serializers.py:1303 msgid "The following serial numbers are already allocated" msgstr "" +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1539 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +msgid "Line price currency" +msgstr "" + #: order/tasks.py:26 msgid "Overdue Purchase Order" -msgstr "" +msgstr "超时采购订单" #: order/tasks.py:31 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "" +msgstr "采购订单 {po} 已逾期" #: order/tasks.py:89 msgid "Overdue Sales Order" @@ -4358,102 +4699,123 @@ msgstr "" msgid "Sales order {so} is now overdue" msgstr "" -#: order/templates/order/order_base.html:33 +#: order/templates/order/order_base.html:51 msgid "Print purchase order report" msgstr "" -#: order/templates/order/order_base.html:35 -#: order/templates/order/sales_order_base.html:45 +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:41 -#: order/templates/order/sales_order_base.html:54 +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 msgid "Order actions" msgstr "" -#: order/templates/order/order_base.html:46 -#: order/templates/order/sales_order_base.html:58 +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 msgid "Edit order" -msgstr "" +msgstr "编辑订单" -#: order/templates/order/order_base.html:50 -#: order/templates/order/sales_order_base.html:61 +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 msgid "Cancel order" msgstr "取消订单" -#: order/templates/order/order_base.html:55 +#: order/templates/order/order_base.html:73 msgid "Duplicate order" +msgstr "复制订单" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +msgid "Issue Order" msgstr "" -#: order/templates/order/order_base.html:61 -#: order/templates/order/order_base.html:62 -msgid "Submit Order" -msgstr "" - -#: order/templates/order/order_base.html:65 +#: order/templates/order/order_base.html:83 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:67 -#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/order_base.html:85 msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:69 +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 msgid "Mark order as complete" -msgstr "" +msgstr "标记订单为完成" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:68 +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 msgid "Complete Order" -msgstr "" +msgstr "完成订单" -#: order/templates/order/order_base.html:93 -#: order/templates/order/sales_order_base.html:80 +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:98 -#: order/templates/order/sales_order_base.html:85 +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 msgid "Order Description" msgstr "" -#: order/templates/order/order_base.html:103 -#: order/templates/order/sales_order_base.html:90 +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:126 +#: order/templates/order/order_base.html:144 msgid "No suppplier information available" msgstr "" -#: order/templates/order/order_base.html:139 -#: order/templates/order/sales_order_base.html:129 +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 msgid "Completed Line Items" msgstr "" -#: order/templates/order/order_base.html:145 -#: order/templates/order/sales_order_base.html:135 -#: order/templates/order/sales_order_base.html:145 +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 msgid "Incomplete" msgstr "" -#: order/templates/order/order_base.html:164 +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 #: report/templates/report/inventree_build_order_base.html:121 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:192 -#: order/templates/order/sales_order_base.html:190 +#: order/templates/order/order_base.html:220 msgid "Total cost" msgstr "" -#: order/templates/order/order_base.html:196 -#: order/templates/order/sales_order_base.html:194 +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 msgid "Total cost could not be calculated" msgstr "" +#: order/templates/order/order_base.html:330 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:342 +msgid "Link Barcode to Purchase Order" +msgstr "" + #: order/templates/order/order_wizard/match_fields.html:9 #: part/templates/part/import_wizard/ajax_match_fields.html:9 #: part/templates/part/import_wizard/match_fields.html:9 @@ -4503,11 +4865,13 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/bom.js:102 templates/js/translated/build.js:486 -#: templates/js/translated/build.js:642 templates/js/translated/build.js:2089 -#: templates/js/translated/order.js:1152 templates/js/translated/order.js:1658 -#: templates/js/translated/order.js:3141 templates/js/translated/stock.js:656 -#: templates/js/translated/stock.js:824 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" msgstr "移除行" @@ -4549,9 +4913,11 @@ msgid "Step %(step)s of %(count)s" msgstr "步骤 %(step)s / %(count)s" #: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 #: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report.html:84 -#: report/templates/report/inventree_so_report.html:85 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 msgid "Line Items" msgstr "" @@ -4564,1105 +4930,1269 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 -#: templates/js/translated/order.js:577 templates/js/translated/order.js:750 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 msgid "Add Line Item" msgstr "" -#: order/templates/order/purchase_order_detail.html:31 -msgid "Receive selected items" +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" msgstr "" #: order/templates/order/purchase_order_detail.html:50 -#: order/templates/order/sales_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:51 +msgid "Delete Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 msgid "Extra Lines" msgstr "" -#: order/templates/order/purchase_order_detail.html:56 -#: order/templates/order/sales_order_detail.html:51 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 msgid "Add Extra Line" msgstr "" -#: order/templates/order/purchase_order_detail.html:76 +#: order/templates/order/purchase_order_detail.html:93 msgid "Received Items" msgstr "" -#: order/templates/order/purchase_order_detail.html:101 -#: order/templates/order/sales_order_detail.html:155 +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 msgid "Order Notes" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 -msgid "Add Order Line" +#: order/templates/order/return_order_base.html:61 +msgid "Print return order report" msgstr "" -#: order/templates/order/purchase_orders.html:30 -#: order/templates/order/sales_orders.html:33 -msgid "Print Order Reports" -msgstr "打印订单报表" - -#: order/templates/order/sales_order_base.html:43 -msgid "Print sales order report" -msgstr "" - -#: order/templates/order/sales_order_base.html:47 +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 msgid "Print packing list" msgstr "" -#: order/templates/order/sales_order_base.html:60 -#: templates/js/translated/order.js:233 -msgid "Complete Shipments" -msgstr "" - -#: order/templates/order/sales_order_base.html:67 -#: templates/js/translated/order.js:398 -msgid "Complete Sales Order" -msgstr "" - -#: order/templates/order/sales_order_base.html:103 -msgid "This Sales Order has not been fully allocated" -msgstr "" - -#: order/templates/order/sales_order_base.html:123 -#: templates/js/translated/order.js:2870 +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:141 -#: order/templates/order/sales_order_detail.html:109 +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "总成本" + +#: order/templates/order/return_order_base.html:258 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:270 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:230 -msgid "Edit Sales Order" +#: order/templates/order/sales_order_base.html:305 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:317 +msgid "Link Barcode to Sales Order" msgstr "" #: order/templates/order/sales_order_detail.html:18 msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:73 +#: order/templates/order/sales_order_detail.html:71 #: order/templates/order/so_sidebar.html:8 msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_detail.html:77 -#: templates/attachment_table.html:6 templates/js/translated/bom.js:1231 -#: templates/js/translated/build.js:1990 +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 msgid "Actions" -msgstr "" +msgstr "操作" -#: order/templates/order/sales_order_detail.html:86 +#: order/templates/order/sales_order_detail.html:84 msgid "New Shipment" msgstr "" -#: order/views.py:104 +#: order/views.py:120 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:377 +#: order/views.py:393 msgid "Sales order not found" msgstr "" -#: order/views.py:383 +#: order/views.py:399 msgid "Price not found" -msgstr "" +msgstr "未找到价格" -#: order/views.py:386 +#: order/views.py:402 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:391 +#: order/views.py:407 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:19 part/admin.py:252 part/models.py:3328 stock/admin.py:84 -#: templates/js/translated/model_renderers.js:212 +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 msgid "Part ID" msgstr "商品ID" -#: part/admin.py:20 part/admin.py:254 part/models.py:3332 stock/admin.py:85 +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 msgid "Part Name" -msgstr "" +msgstr "部件名称" -#: part/admin.py:21 +#: part/admin.py:35 part/tasks.py:285 msgid "Part Description" -msgstr "" +msgstr "部件描述" -#: part/admin.py:22 part/models.py:853 part/templates/part/part_base.html:272 -#: templates/js/translated/part.js:1009 templates/js/translated/part.js:1737 -#: templates/js/translated/stock.js:1768 +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 msgid "IPN" msgstr "" -#: part/admin.py:23 part/models.py:861 part/templates/part/part_base.html:279 -#: report/models.py:171 templates/js/translated/part.js:1014 +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 msgid "Revision" -msgstr "" +msgstr "版本号" -#: part/admin.py:24 part/admin.py:178 part/models.py:839 -#: part/templates/part/category.html:87 part/templates/part/part_base.html:300 +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 msgid "Keywords" msgstr "关键词" -#: part/admin.py:28 part/admin.py:172 -#: templates/js/translated/model_renderers.js:338 +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 msgid "Category ID" msgstr "类别 ID" -#: part/admin.py:29 part/admin.py:173 +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 msgid "Category Name" msgstr "" -#: part/admin.py:30 part/admin.py:177 +#: part/admin.py:44 part/admin.py:197 msgid "Default Location ID" msgstr "" -#: part/admin.py:31 +#: part/admin.py:45 msgid "Default Supplier ID" msgstr "" -#: part/admin.py:33 part/models.py:945 part/templates/part/part_base.html:206 +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 msgid "Minimum Stock" msgstr "最低库存" -#: part/admin.py:47 part/templates/part/part_base.html:200 -#: templates/js/translated/company.js:1028 -#: templates/js/translated/table_filters.js:221 +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 msgid "In Stock" -msgstr "" +msgstr "有库存" -#: part/admin.py:48 part/bom.py:178 part/templates/part/part_base.html:213 -#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1936 -#: templates/js/translated/part.js:591 templates/js/translated/part.js:611 -#: templates/js/translated/part.js:1627 templates/js/translated/part.js:1805 -#: templates/js/translated/table_filters.js:68 +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 msgid "On Order" -msgstr "" +msgstr "订购中" -#: part/admin.py:49 part/templates/part/part_sidebar.html:27 +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "" +msgstr "用于" -#: part/admin.py:50 templates/js/translated/build.js:1948 -#: templates/js/translated/build.js:2206 templates/js/translated/build.js:2784 -#: templates/js/translated/order.js:3979 +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 msgid "Allocated" -msgstr "" +msgstr "已分配" -#: part/admin.py:51 part/templates/part/part_base.html:244 -#: templates/js/translated/part.js:594 templates/js/translated/part.js:614 -#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1812 +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 msgid "Building" msgstr "" -#: part/admin.py:52 part/models.py:2852 +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 msgid "Minimum Cost" msgstr "" -#: part/admin.py:53 part/models.py:2858 +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 msgid "Maximum Cost" msgstr "" -#: part/admin.py:175 part/admin.py:249 stock/admin.py:26 stock/admin.py:98 +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 msgid "Parent ID" msgstr "" -#: part/admin.py:176 part/admin.py:251 stock/admin.py:27 +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 msgid "Parent Name" msgstr "" -#: part/admin.py:179 part/templates/part/category.html:81 -#: part/templates/part/category.html:94 +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 msgid "Category Path" msgstr "类别路径" -#: part/admin.py:182 part/models.py:383 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:134 -#: part/templates/part/category.html:154 +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:43 -#: templates/js/translated/part.js:2321 templates/js/translated/search.js:146 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 #: templates/navbar.html:24 users/models.py:38 msgid "Parts" msgstr "商品" -#: part/admin.py:244 +#: part/admin.py:265 msgid "BOM Level" msgstr "" -#: part/admin.py:246 +#: part/admin.py:267 msgid "BOM Item ID" msgstr "" -#: part/admin.py:250 +#: part/admin.py:271 msgid "Parent IPN" msgstr "" -#: part/admin.py:253 part/models.py:3336 +#: part/admin.py:274 part/models.py:3479 msgid "Part IPN" msgstr "" -#: part/admin.py:259 templates/js/translated/pricing.js:332 -#: templates/js/translated/pricing.js:973 +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 msgid "Minimum Price" msgstr "" -#: part/admin.py:260 templates/js/translated/pricing.js:327 -#: templates/js/translated/pricing.js:981 +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 msgid "Maximum Price" msgstr "" -#: part/api.py:536 +#: part/api.py:495 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:556 +#: part/api.py:515 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:574 +#: part/api.py:533 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:660 +#: part/api.py:619 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:818 +#: part/api.py:767 msgid "Valid" msgstr "" -#: part/api.py:819 +#: part/api.py:768 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:825 +#: part/api.py:774 msgid "This option must be selected" -msgstr "" +msgstr "必须选择此项" -#: part/bom.py:175 part/models.py:116 part/models.py:888 -#: part/templates/part/category.html:109 part/templates/part/part_base.html:374 +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 msgid "Default Location" msgstr "默认仓储地点" #: part/bom.py:176 templates/email/low_stock_notification.html:17 msgid "Total Stock" -msgstr "" +msgstr "总库存" -#: part/bom.py:177 part/templates/part/part_base.html:195 -#: templates/js/translated/order.js:3946 +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 msgid "Available Stock" msgstr "可用库存" -#: part/forms.py:41 +#: part/forms.py:48 msgid "Input quantity for price calculation" -msgstr "" +msgstr "输入数量以计算价格" -#: part/models.py:117 -msgid "Default location for parts in this category" -msgstr "此类别商品的默认仓储地点" - -#: part/models.py:122 stock/models.py:113 -#: templates/js/translated/table_filters.js:135 -#: templates/js/translated/table_filters.js:150 -msgid "Structural" -msgstr "" - -#: part/models.py:124 -msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" - -#: part/models.py:128 -msgid "Default keywords" -msgstr "" - -#: part/models.py:128 -msgid "Default keywords for parts in this category" -msgstr "此类别商品的默认关键字" - -#: part/models.py:133 stock/models.py:102 -msgid "Icon" -msgstr "" - -#: part/models.py:134 stock/models.py:103 -msgid "Icon (optional)" -msgstr "" - -#: part/models.py:153 -msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" - -#: part/models.py:159 part/models.py:3277 part/templates/part/category.html:16 +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "商品类别" -#: part/models.py:160 part/templates/part/category.html:129 -#: templates/InvenTree/search.html:97 templates/js/translated/search.js:200 +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 #: users/models.py:37 msgid "Part Categories" msgstr "商品类别" -#: part/models.py:469 +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "此类别商品的默认仓储地点" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "此类别商品的默认关键字" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "图标" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "图标(可选)" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:539 part/models.py:551 +#: part/models.py:508 part/models.py:520 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:641 +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN 必须匹配正则表达式 {pat}" + +#: part/models.py:663 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:772 +#: part/models.py:794 msgid "Duplicate IPN not allowed in part settings" msgstr "在商品设置中不允许重复的IPN" -#: part/models.py:777 +#: part/models.py:799 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:791 +#: part/models.py:813 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:809 part/models.py:3333 +#: part/models.py:837 part/models.py:3476 msgid "Part name" msgstr "商品名称" -#: part/models.py:816 +#: part/models.py:843 msgid "Is Template" msgstr "" -#: part/models.py:817 +#: part/models.py:844 msgid "Is this part a template part?" msgstr "" -#: part/models.py:827 +#: part/models.py:854 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:828 +#: part/models.py:855 part/templates/part/part_base.html:179 msgid "Variant Of" msgstr "" -#: part/models.py:834 -msgid "Part description" -msgstr "商品描述" +#: part/models.py:861 +msgid "Part description (optional)" +msgstr "" -#: part/models.py:840 +#: part/models.py:867 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的关键字" -#: part/models.py:847 part/models.py:3032 part/models.py:3276 -#: part/templates/part/part_base.html:263 -#: templates/InvenTree/settings/settings.html:276 +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 #: templates/js/translated/notification.js:50 -#: templates/js/translated/part.js:1759 templates/js/translated/part.js:2026 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 msgid "Category" msgstr "类别" -#: part/models.py:848 +#: part/models.py:875 msgid "Part category" msgstr "商品类别" -#: part/models.py:854 +#: part/models.py:881 msgid "Internal Part Number" msgstr "内部商品编号" -#: part/models.py:860 +#: part/models.py:886 msgid "Part revision or version number" msgstr "商品版本号" -#: part/models.py:886 +#: part/models.py:912 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:931 part/templates/part/part_base.html:383 +#: part/models.py:957 part/templates/part/part_base.html:378 msgid "Default Supplier" msgstr "" -#: part/models.py:932 +#: part/models.py:958 msgid "Default supplier part" msgstr "默认供应商商品" -#: part/models.py:939 +#: part/models.py:965 msgid "Default Expiry" msgstr "" -#: part/models.py:940 +#: part/models.py:966 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:946 +#: part/models.py:972 msgid "Minimum allowed stock level" -msgstr "" +msgstr "允许的最小库存量" -#: part/models.py:953 +#: part/models.py:979 msgid "Units of measure for this part" -msgstr "" +msgstr "该部件的计量单位" -#: part/models.py:959 +#: part/models.py:985 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:965 +#: part/models.py:991 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:971 +#: part/models.py:997 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:976 +#: part/models.py:1002 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:981 +#: part/models.py:1007 msgid "Can this part be sold to customers?" msgstr "此商品可以销售给客户吗?" -#: part/models.py:986 +#: part/models.py:1012 msgid "Is this part active?" msgstr "" -#: part/models.py:991 +#: part/models.py:1017 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟商品,如软件产品或许可证吗?" -#: part/models.py:993 +#: part/models.py:1019 msgid "Part notes" -msgstr "" +msgstr "部件注释" -#: part/models.py:995 +#: part/models.py:1021 msgid "BOM checksum" msgstr "" -#: part/models.py:995 +#: part/models.py:1021 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:998 +#: part/models.py:1024 msgid "BOM checked by" msgstr "" -#: part/models.py:1000 +#: part/models.py:1026 msgid "BOM checked date" msgstr "" -#: part/models.py:1004 +#: part/models.py:1030 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1010 part/templates/part/part_base.html:345 -#: stock/templates/stock/item_base.html:445 -#: templates/js/translated/part.js:1876 +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 msgid "Last Stocktake" msgstr "" -#: part/models.py:1869 +#: part/models.py:1912 msgid "Sell multiple" msgstr "" -#: part/models.py:2775 +#: part/models.py:2837 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:2792 +#: part/models.py:2854 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:2793 +#: part/models.py:2855 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:2798 +#: part/models.py:2860 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:2799 +#: part/models.py:2861 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:2804 +#: part/models.py:2866 msgid "Minimum Purchase Cost" -msgstr "" +msgstr "最低购买成本" -#: part/models.py:2805 +#: part/models.py:2867 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:2810 +#: part/models.py:2872 msgid "Maximum Purchase Cost" -msgstr "" +msgstr "最大购买成本" -#: part/models.py:2811 +#: part/models.py:2873 msgid "Maximum historical purchase cost" -msgstr "" +msgstr "最高历史购买成本" -#: part/models.py:2816 +#: part/models.py:2878 msgid "Minimum Internal Price" -msgstr "" +msgstr "最低内部价格" -#: part/models.py:2817 +#: part/models.py:2879 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:2822 +#: part/models.py:2884 msgid "Maximum Internal Price" -msgstr "" +msgstr "最大内部价格" -#: part/models.py:2823 +#: part/models.py:2885 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:2828 +#: part/models.py:2890 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:2829 +#: part/models.py:2891 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:2834 +#: part/models.py:2896 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:2835 +#: part/models.py:2897 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:2840 +#: part/models.py:2902 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:2841 +#: part/models.py:2903 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:2846 +#: part/models.py:2908 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:2847 +#: part/models.py:2909 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:2853 +#: part/models.py:2915 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:2859 +#: part/models.py:2921 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:2864 +#: part/models.py:2926 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:2865 +#: part/models.py:2927 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:2870 +#: part/models.py:2932 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:2871 +#: part/models.py:2933 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:2876 +#: part/models.py:2938 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:2877 +#: part/models.py:2939 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:2882 +#: part/models.py:2944 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:2883 +#: part/models.py:2945 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:2901 +#: part/models.py:2964 msgid "Part for stocktake" msgstr "" -#: part/models.py:2908 +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:2912 part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:97 +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 #: templates/InvenTree/settings/plugin.html:63 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:2077 templates/js/translated/part.js:862 -#: templates/js/translated/pricing.js:778 -#: templates/js/translated/pricing.js:899 templates/js/translated/stock.js:2519 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 msgid "Date" -msgstr "" +msgstr "日期" -#: part/models.py:2913 +#: part/models.py:2982 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:2921 +#: part/models.py:2990 msgid "Additional notes" -msgstr "" +msgstr "附加注释" -#: part/models.py:2929 +#: part/models.py:2998 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3079 +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "报告" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3096 +#: part/models.py:3239 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3116 templates/js/translated/part.js:2372 +#: part/models.py:3259 templates/js/translated/part.js:2434 msgid "Test Name" msgstr "" -#: part/models.py:3117 +#: part/models.py:3260 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3122 +#: part/models.py:3265 msgid "Test Description" msgstr "" -#: part/models.py:3123 +#: part/models.py:3266 msgid "Enter description for this test" msgstr "" -#: part/models.py:3128 templates/js/translated/part.js:2381 -#: templates/js/translated/table_filters.js:330 +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 msgid "Required" msgstr "" -#: part/models.py:3129 +#: part/models.py:3272 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3134 templates/js/translated/part.js:2389 +#: part/models.py:3277 templates/js/translated/part.js:2451 msgid "Requires Value" msgstr "" -#: part/models.py:3135 +#: part/models.py:3278 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3140 templates/js/translated/part.js:2396 +#: part/models.py:3283 templates/js/translated/part.js:2458 msgid "Requires Attachment" msgstr "" -#: part/models.py:3141 +#: part/models.py:3284 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3182 +#: part/models.py:3325 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3190 +#: part/models.py:3333 msgid "Parameter Name" msgstr "" -#: part/models.py:3194 +#: part/models.py:3337 msgid "Parameter Units" msgstr "" -#: part/models.py:3199 +#: part/models.py:3342 msgid "Parameter description" msgstr "" -#: part/models.py:3232 +#: part/models.py:3375 msgid "Parent Part" msgstr "" -#: part/models.py:3234 part/models.py:3282 part/models.py:3283 -#: templates/InvenTree/settings/settings.html:271 +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 msgid "Parameter Template" msgstr "参数模板" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Data" msgstr "" -#: part/models.py:3236 +#: part/models.py:3379 msgid "Parameter Value" msgstr "" -#: part/models.py:3287 templates/InvenTree/settings/settings.html:280 +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 msgid "Default Value" msgstr "默认值" -#: part/models.py:3288 +#: part/models.py:3431 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3325 +#: part/models.py:3468 msgid "Part ID or part name" msgstr "" -#: part/models.py:3329 +#: part/models.py:3472 msgid "Unique part ID value" msgstr "" -#: part/models.py:3337 +#: part/models.py:3480 msgid "Part IPN value" msgstr "" -#: part/models.py:3340 +#: part/models.py:3483 msgid "Level" msgstr "" -#: part/models.py:3341 +#: part/models.py:3484 msgid "BOM level" msgstr "" -#: part/models.py:3410 +#: part/models.py:3568 msgid "Select parent part" msgstr "" -#: part/models.py:3418 +#: part/models.py:3576 msgid "Sub part" -msgstr "" +msgstr "子部件" -#: part/models.py:3419 +#: part/models.py:3577 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3425 +#: part/models.py:3583 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3429 part/templates/part/upload_bom.html:58 -#: templates/js/translated/bom.js:940 templates/js/translated/bom.js:993 -#: templates/js/translated/build.js:1869 -#: templates/js/translated/table_filters.js:84 +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 #: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 msgid "Optional" msgstr "可选项" -#: part/models.py:3430 +#: part/models.py:3588 msgid "This BOM item is optional" msgstr "" -#: part/models.py:3435 templates/js/translated/bom.js:936 -#: templates/js/translated/bom.js:1002 templates/js/translated/build.js:1860 -#: templates/js/translated/table_filters.js:88 +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 msgid "Consumable" msgstr "" -#: part/models.py:3436 +#: part/models.py:3594 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:3440 part/templates/part/upload_bom.html:55 +#: part/models.py:3598 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:3441 +#: part/models.py:3599 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:3444 +#: part/models.py:3602 msgid "BOM item reference" msgstr "" -#: part/models.py:3447 +#: part/models.py:3605 msgid "BOM item notes" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "Checksum" msgstr "" -#: part/models.py:3449 +#: part/models.py:3609 msgid "BOM line checksum" msgstr "" -#: part/models.py:3453 part/templates/part/upload_bom.html:57 -#: templates/js/translated/bom.js:1019 -#: templates/js/translated/table_filters.js:76 -#: templates/js/translated/table_filters.js:108 -msgid "Inherited" -msgstr "继承项" +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "" -#: part/models.py:3454 +#: part/models.py:3615 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:3459 part/templates/part/upload_bom.html:56 -#: templates/js/translated/bom.js:1011 +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 msgid "Allow Variants" msgstr "" -#: part/models.py:3460 +#: part/models.py:3627 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:3546 stock/models.py:558 +#: part/models.py:3713 stock/models.py:570 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:3555 part/models.py:3557 +#: part/models.py:3722 part/models.py:3724 msgid "Sub part must be specified" msgstr "" -#: part/models.py:3684 +#: part/models.py:3840 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:3705 +#: part/models.py:3861 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3874 msgid "Parent BOM item" msgstr "" -#: part/models.py:3726 +#: part/models.py:3882 msgid "Substitute part" msgstr "" -#: part/models.py:3741 +#: part/models.py:3897 msgid "Part 1" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Part 2" msgstr "" -#: part/models.py:3745 +#: part/models.py:3901 msgid "Select Related Part" -msgstr "" +msgstr "选择相关的部件" -#: part/models.py:3763 +#: part/models.py:3919 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:3767 +#: part/models.py:3923 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:160 part/serializers.py:188 stock/serializers.py:183 +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Original Part" msgstr "" -#: part/serializers.py:318 +#: part/serializers.py:307 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy Image" -msgstr "" +msgstr "复制图像" -#: part/serializers.py:323 +#: part/serializers.py:312 msgid "Copy image from original part" -msgstr "" +msgstr "从原部件复制图像" -#: part/serializers.py:328 part/templates/part/detail.html:295 +#: part/serializers.py:317 part/templates/part/detail.html:296 msgid "Copy BOM" msgstr "" -#: part/serializers.py:328 +#: part/serializers.py:317 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:333 +#: part/serializers.py:322 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:343 +#: part/serializers.py:332 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:349 +#: part/serializers.py:338 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:359 +#: part/serializers.py:348 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:370 +#: part/serializers.py:359 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:376 +#: part/serializers.py:365 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:372 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:391 +#: part/serializers.py:380 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:392 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:400 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:562 part/templates/part/copy_part.html:9 -#: templates/js/translated/part.js:382 +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 msgid "Duplicate Part" msgstr "复制部件" -#: part/serializers.py:562 +#: part/serializers.py:621 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:567 templates/js/translated/part.js:68 +#: part/serializers.py:626 templates/js/translated/part.js:68 msgid "Initial Stock" msgstr "" -#: part/serializers.py:567 +#: part/serializers.py:626 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Supplier Information" -msgstr "" +msgstr "供应商信息" -#: part/serializers.py:572 +#: part/serializers.py:631 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:801 -msgid "Update" +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "复制类别参数" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:802 +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 +msgid "Update" +msgstr "更新" + +#: part/serializers.py:965 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1112 +#: part/serializers.py:1247 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1120 +#: part/serializers.py:1255 msgid "Remove Existing Data" -msgstr "" +msgstr "移除现有数据" -#: part/serializers.py:1121 +#: part/serializers.py:1256 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1126 +#: part/serializers.py:1261 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1127 +#: part/serializers.py:1262 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1132 +#: part/serializers.py:1267 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1133 +#: part/serializers.py:1268 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1138 +#: part/serializers.py:1273 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1139 +#: part/serializers.py:1274 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1179 +#: part/serializers.py:1314 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1180 +#: part/serializers.py:1315 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1210 +#: part/serializers.py:1345 msgid "No part column specified" msgstr "" -#: part/serializers.py:1253 +#: part/serializers.py:1388 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1256 +#: part/serializers.py:1391 msgid "No matching part found" msgstr "" -#: part/serializers.py:1259 +#: part/serializers.py:1394 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1268 +#: part/serializers.py:1403 msgid "Quantity not provided" -msgstr "" +msgstr "未提供数量" -#: part/serializers.py:1276 +#: part/serializers.py:1411 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1297 +#: part/serializers.py:1432 msgid "At least one BOM item is required" msgstr "" -#: part/tasks.py:25 +#: part/tasks.py:36 msgid "Low stock notification" msgstr "" -#: part/tasks.py:26 +#: part/tasks.py:37 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "总数量" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + #: part/templates/part/bom.html:6 msgid "You do not have permission to edit the BOM." msgstr "" #: part/templates/part/bom.html:15 -#, python-format -msgid "The BOM for %(part)s has changed, and must be validated.
" +msgid "The BOM this part has been changed, and must be validated" msgstr "" #: part/templates/part/bom.html:17 @@ -5675,7 +6205,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:290 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 msgid "BOM actions" msgstr "" @@ -5683,91 +6213,91 @@ msgstr "" msgid "Delete Items" msgstr "" -#: part/templates/part/category.html:34 part/templates/part/category.html:38 +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 msgid "You are subscribed to notifications for this category" msgstr "" -#: part/templates/part/category.html:42 +#: part/templates/part/category.html:48 msgid "Subscribe to notifications for this category" msgstr "" -#: part/templates/part/category.html:48 -msgid "Category Actions" -msgstr "" - -#: part/templates/part/category.html:53 -msgid "Edit category" -msgstr "" - #: part/templates/part/category.html:54 -msgid "Edit Category" -msgstr "" - -#: part/templates/part/category.html:58 -msgid "Delete category" -msgstr "" +msgid "Category Actions" +msgstr "类别操作" #: part/templates/part/category.html:59 -msgid "Delete Category" -msgstr "" +msgid "Edit category" +msgstr "编辑类别" -#: part/templates/part/category.html:95 +#: part/templates/part/category.html:60 +msgid "Edit Category" +msgstr "编辑类别" + +#: part/templates/part/category.html:64 +msgid "Delete category" +msgstr "删除类别" + +#: part/templates/part/category.html:65 +msgid "Delete Category" +msgstr "删除类别" + +#: part/templates/part/category.html:101 msgid "Top level part category" msgstr "" -#: part/templates/part/category.html:115 part/templates/part/category.html:224 +#: part/templates/part/category.html:121 part/templates/part/category.html:225 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "子类别" -#: part/templates/part/category.html:120 +#: part/templates/part/category.html:126 msgid "Parts (Including subcategories)" msgstr "商品 (包括子类别)" -#: part/templates/part/category.html:158 +#: part/templates/part/category.html:164 msgid "Create new part" msgstr "新建商品" -#: part/templates/part/category.html:159 templates/js/translated/bom.js:412 +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 msgid "New Part" msgstr "新商品" -#: part/templates/part/category.html:169 part/templates/part/detail.html:389 -#: part/templates/part/detail.html:420 +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 msgid "Options" msgstr "选项" -#: part/templates/part/category.html:173 +#: part/templates/part/category.html:179 msgid "Set category" msgstr "设置类别" -#: part/templates/part/category.html:174 +#: part/templates/part/category.html:180 msgid "Set Category" msgstr "设置类别" -#: part/templates/part/category.html:181 part/templates/part/category.html:182 -msgid "Print Labels" -msgstr "打印标签" - -#: part/templates/part/category.html:207 +#: part/templates/part/category.html:208 msgid "Part Parameters" msgstr "商品参数" -#: part/templates/part/category.html:228 +#: part/templates/part/category.html:229 msgid "Create new part category" msgstr "新建商品类别" -#: part/templates/part/category.html:229 +#: part/templates/part/category.html:230 msgid "New Category" -msgstr "" +msgstr "新建分类" -#: part/templates/part/category.html:332 +#: part/templates/part/category.html:347 msgid "Create Part Category" msgstr "创建商品类别" #: part/templates/part/category_sidebar.html:13 msgid "Import Parts" -msgstr "" +msgstr "导入部件" #: part/templates/part/copy_part.html:10 #, python-format @@ -5798,122 +6328,124 @@ msgid "Refresh scheduling data" msgstr "" #: part/templates/part/detail.html:45 part/templates/part/prices.html:15 -#: templates/js/translated/tables.js:524 +#: templates/js/translated/tables.js:572 msgid "Refresh" msgstr "" -#: part/templates/part/detail.html:65 +#: part/templates/part/detail.html:66 msgid "Add stocktake information" msgstr "" -#: part/templates/part/detail.html:66 part/templates/part/part_sidebar.html:49 -#: stock/admin.py:107 templates/js/translated/stock.js:1913 +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 msgid "Stocktake" msgstr "" -#: part/templates/part/detail.html:82 +#: part/templates/part/detail.html:83 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:87 +#: part/templates/part/detail.html:88 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:144 stock/templates/stock/item.html:53 +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:164 +#: part/templates/part/detail.html:165 msgid "Part Notes" msgstr "" -#: part/templates/part/detail.html:179 +#: part/templates/part/detail.html:180 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:183 +#: part/templates/part/detail.html:184 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:184 +#: part/templates/part/detail.html:185 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:211 +#: part/templates/part/detail.html:212 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:248 part/templates/part/part_sidebar.html:57 +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 msgid "Related Parts" -msgstr "" +msgstr "相关部件" -#: part/templates/part/detail.html:252 part/templates/part/detail.html:253 +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:273 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:278 +#: part/templates/part/detail.html:279 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:282 templates/js/translated/bom.js:309 +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:284 +#: part/templates/part/detail.html:285 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:294 +#: part/templates/part/detail.html:295 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:296 +#: part/templates/part/detail.html:297 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:301 part/templates/part/detail.html:302 +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 #: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:315 +#: part/templates/part/detail.html:316 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:333 +#: part/templates/part/detail.html:334 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:360 stock/templates/stock/item.html:38 +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:377 msgid "Part Suppliers" msgstr "商品供应商" -#: part/templates/part/detail.html:406 +#: part/templates/part/detail.html:407 msgid "Part Manufacturers" msgstr "商品制造商" -#: part/templates/part/detail.html:422 +#: part/templates/part/detail.html:423 msgid "Delete manufacturer parts" msgstr "删除制造商商品" -#: part/templates/part/detail.html:696 +#: part/templates/part/detail.html:707 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:704 +#: part/templates/part/detail.html:715 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:800 +#: part/templates/part/detail.html:801 msgid "Add Test Result Template" msgstr "" @@ -5948,13 +6480,13 @@ msgstr "" #: part/templates/part/import_wizard/part_upload.html:92 #: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 -#: templates/js/translated/order.js:1028 templates/js/translated/tables.js:145 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 msgid "Format" -msgstr "" +msgstr "格式" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 -#: templates/js/translated/order.js:1029 +#: templates/js/translated/order.js:113 msgid "Select file format" msgstr "" @@ -5976,7 +6508,7 @@ msgstr "" #: part/templates/part/part_base.html:54 #: stock/templates/stock/item_base.html:63 -#: stock/templates/stock/location.html:67 +#: stock/templates/stock/location.html:73 msgid "Print Label" msgstr "打印标签" @@ -5986,7 +6518,7 @@ msgstr "" #: part/templates/part/part_base.html:65 #: stock/templates/stock/item_base.html:111 -#: stock/templates/stock/location.html:75 +#: stock/templates/stock/location.html:81 msgid "Stock actions" msgstr "" @@ -6039,39 +6571,37 @@ msgid "Part can be sold to customers" msgstr "商品可以销售给客户" #: part/templates/part/part_base.html:147 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + #: part/templates/part/part_base.html:155 msgid "Part is virtual (not a physical part)" msgstr "商品是虚拟的(不是实体零件)" -#: part/templates/part/part_base.html:148 -#: templates/js/translated/company.js:660 -#: templates/js/translated/company.js:921 -#: templates/js/translated/model_renderers.js:204 -#: templates/js/translated/part.js:655 templates/js/translated/part.js:1001 -msgid "Inactive" -msgstr "" - #: part/templates/part/part_base.html:165 -#: part/templates/part/part_base.html:680 +#: part/templates/part/part_base.html:684 msgid "Show Part Details" msgstr "" -#: part/templates/part/part_base.html:183 -#, python-format -msgid "This part is a variant of %(link)s" -msgstr "" - -#: part/templates/part/part_base.html:221 -#: stock/templates/stock/item_base.html:382 +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 msgid "Allocated to Build Orders" msgstr "" -#: part/templates/part/part_base.html:230 -#: stock/templates/stock/item_base.html:375 +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1173 +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 msgid "Can Build" msgstr "" @@ -6079,44 +6609,48 @@ msgstr "" msgid "Minimum stock level" msgstr "" -#: part/templates/part/part_base.html:330 templates/js/translated/bom.js:1039 -#: templates/js/translated/part.js:1044 templates/js/translated/part.js:1850 -#: templates/js/translated/pricing.js:365 -#: templates/js/translated/pricing.js:1003 +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 msgid "Price Range" msgstr "" -#: part/templates/part/part_base.html:359 +#: part/templates/part/part_base.html:354 msgid "Latest Serial Number" msgstr "" -#: part/templates/part/part_base.html:363 -#: stock/templates/stock/item_base.html:331 +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 msgid "Search for serial number" msgstr "" +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "商品二维码" + #: part/templates/part/part_base.html:463 msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:509 +#: part/templates/part/part_base.html:513 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:526 +#: part/templates/part/part_base.html:530 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:578 +#: part/templates/part/part_base.html:582 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:674 +#: part/templates/part/part_base.html:678 msgid "Hide Part Details" msgstr "" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 -#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:459 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 msgid "Supplier Pricing" msgstr "" @@ -6125,14 +6659,7 @@ msgstr "" #: part/templates/part/part_pricing.html:95 #: part/templates/part/part_pricing.html:110 msgid "Unit Cost" -msgstr "" - -#: part/templates/part/part_pricing.html:32 -#: part/templates/part/part_pricing.html:58 -#: part/templates/part/part_pricing.html:99 -#: part/templates/part/part_pricing.html:114 -msgid "Total Cost" -msgstr "" +msgstr "单位成本" #: part/templates/part/part_pricing.html:40 msgid "No supplier pricing available" @@ -6171,11 +6698,27 @@ msgstr "" msgid "Variants" msgstr "" +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "库存" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "定价" + #: part/templates/part/part_sidebar.html:44 msgid "Scheduling" msgstr "" -#: part/templates/part/part_sidebar.html:53 +#: part/templates/part/part_sidebar.html:54 msgid "Test Templates" msgstr "" @@ -6191,13 +6734,13 @@ msgstr "" msgid "Refresh Part Pricing" msgstr "" -#: part/templates/part/prices.html:25 stock/admin.py:106 -#: stock/templates/stock/item_base.html:440 -#: templates/js/translated/company.js:1039 -#: templates/js/translated/company.js:1048 -#: templates/js/translated/stock.js:1943 +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 msgid "Last Updated" -msgstr "" +msgstr "最后更新" #: part/templates/part/prices.html:34 part/templates/part/prices.html:116 msgid "Price Category" @@ -6205,11 +6748,11 @@ msgstr "" #: part/templates/part/prices.html:35 part/templates/part/prices.html:117 msgid "Minimum" -msgstr "" +msgstr "最小" #: part/templates/part/prices.html:36 part/templates/part/prices.html:118 msgid "Maximum" -msgstr "" +msgstr "最大" #: part/templates/part/prices.html:48 part/templates/part/prices.html:163 msgid "Internal Pricing" @@ -6244,7 +6787,7 @@ msgstr "" #: part/templates/part/prices.html:265 part/templates/part/prices.html:288 #: part/templates/part/prices.html:317 msgid "Jump to overview" -msgstr "" +msgstr "跳转到总览" #: part/templates/part/prices.html:169 msgid "Add Internal Price Break" @@ -6258,14 +6801,14 @@ msgstr "" msgid "Add Sell Price Break" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:617 -#: templates/js/translated/part.js:1619 templates/js/translated/part.js:1621 +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 msgid "No Stock" -msgstr "" +msgstr "无库存" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:158 msgid "Low Stock" -msgstr "" +msgstr "低库存" #: part/templates/part/upload_bom.html:8 msgid "Return to BOM" @@ -6309,45 +6852,40 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -#, python-format -msgid "Create a new variant of template '%(full_name)s'." +msgid "Create a new variant part from this template" msgstr "" -#: part/templatetags/inventree_extras.py:213 +#: part/templatetags/inventree_extras.py:187 msgid "Unknown database" msgstr "" -#: part/templatetags/inventree_extras.py:265 +#: part/templatetags/inventree_extras.py:239 #, python-brace-format msgid "{title} v{version}" msgstr "" -#: part/views.py:111 +#: part/views.py:110 msgid "Match References" msgstr "" -#: part/views.py:239 +#: part/views.py:238 #, python-brace-format msgid "Can't import part {name} because there is no category assigned" msgstr "" -#: part/views.py:378 -msgid "Part QR Code" -msgstr "商品二维码" - -#: part/views.py:396 +#: part/views.py:379 msgid "Select Part Image" msgstr "选择商品图像" -#: part/views.py:422 +#: part/views.py:405 msgid "Updated part image" msgstr "更新商品图像" -#: part/views.py:425 +#: part/views.py:408 msgid "Part image not found" msgstr "未找到商品图像" -#: part/views.py:520 +#: part/views.py:503 msgid "Part Pricing" msgstr "商品价格" @@ -6365,7 +6903,7 @@ msgstr "未找到指定操作" #: plugin/base/barcodes/api.py:54 plugin/base/barcodes/api.py:110 msgid "Missing barcode data" -msgstr "" +msgstr "缺少条形码数据" #: plugin/base/barcodes/api.py:80 msgid "No match found for barcode data" @@ -6376,6 +6914,7 @@ msgid "Match found for barcode data" msgstr "找到匹配条形码数据" #: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 msgid "Barcode matches existing item" msgstr "" @@ -6387,15 +6926,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:26 +#: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "InvenTree Barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:27 +#: plugin/builtin/barcodes/inventree_barcode.py:29 msgid "Provides native support for barcodes" msgstr "" -#: plugin/builtin/barcodes/inventree_barcode.py:29 +#: plugin/builtin/barcodes/inventree_barcode.py:31 #: plugin/builtin/integration/core_notifications.py:33 msgid "InvenTree contributors" msgstr "" @@ -6498,18 +7037,19 @@ msgstr "" msgid "No date found" msgstr "" -#: plugin/registry.py:444 -msgid "Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!" +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:446 +#: plugin/registry.py:454 #, python-brace-format -msgid "Plugin requires at least version {plg_i.MIN_VERSION}" +msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:448 +#: plugin/registry.py:456 #, python-brace-format -msgid "Plugin requires at most version {plg_i.MAX_VERSION}" +msgid "Plugin requires at most version {v}" msgstr "" #: plugin/samples/integration/sample.py:39 @@ -6544,132 +7084,136 @@ msgstr "" msgid "A setting with multiple choices" msgstr "" -#: plugin/serializers.py:72 +#: plugin/serializers.py:81 msgid "Source URL" msgstr "" -#: plugin/serializers.py:73 +#: plugin/serializers.py:82 msgid "Source for the package - this can be a custom registry or a VCS path" msgstr "" -#: plugin/serializers.py:78 +#: plugin/serializers.py:87 msgid "Package Name" msgstr "" -#: plugin/serializers.py:79 +#: plugin/serializers.py:88 msgid "Name for the Plugin Package - can also contain a version indicator" msgstr "" -#: plugin/serializers.py:82 +#: plugin/serializers.py:91 msgid "Confirm plugin installation" msgstr "" -#: plugin/serializers.py:83 +#: plugin/serializers.py:92 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." msgstr "" -#: plugin/serializers.py:103 +#: plugin/serializers.py:104 msgid "Installation not confirmed" msgstr "" -#: plugin/serializers.py:105 +#: plugin/serializers.py:106 msgid "Either packagename of URL must be provided" msgstr "" -#: report/api.py:180 +#: report/api.py:171 msgid "No valid objects provided to template" msgstr "没有为模板提供有效对象" -#: report/api.py:216 report/api.py:252 +#: report/api.py:207 report/api.py:243 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:355 +#: report/api.py:310 msgid "Test report" msgstr "" -#: report/models.py:153 +#: report/models.py:159 msgid "Template name" msgstr "" -#: report/models.py:159 +#: report/models.py:165 msgid "Report template file" msgstr "" -#: report/models.py:166 +#: report/models.py:172 msgid "Report template description" msgstr "" -#: report/models.py:172 +#: report/models.py:178 msgid "Report revision number (auto-increments)" msgstr "" -#: report/models.py:248 +#: report/models.py:258 msgid "Pattern for generating report filenames" msgstr "" -#: report/models.py:255 +#: report/models.py:265 msgid "Report template is enabled" msgstr "" -#: report/models.py:281 +#: report/models.py:286 msgid "StockItem query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:289 +#: report/models.py:294 msgid "Include Installed Tests" msgstr "" -#: report/models.py:290 +#: report/models.py:295 msgid "Include test results for stock items installed inside assembled item" msgstr "" -#: report/models.py:337 +#: report/models.py:369 msgid "Build Filters" msgstr "" -#: report/models.py:338 +#: report/models.py:370 msgid "Build query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:377 +#: report/models.py:409 msgid "Part Filters" msgstr "商品过滤器" -#: report/models.py:378 +#: report/models.py:410 msgid "Part query filters (comma-separated list of key=value pairs" msgstr "" -#: report/models.py:412 +#: report/models.py:444 msgid "Purchase order query filters" msgstr "" -#: report/models.py:450 +#: report/models.py:482 msgid "Sales order query filters" msgstr "" -#: report/models.py:502 +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 msgid "Snippet" msgstr "" -#: report/models.py:503 +#: report/models.py:574 msgid "Report snippet file" msgstr "" -#: report/models.py:507 +#: report/models.py:578 msgid "Snippet file description" msgstr "" -#: report/models.py:544 +#: report/models.py:615 msgid "Asset" msgstr "" -#: report/models.py:545 +#: report/models.py:616 msgid "Report asset file" msgstr "" -#: report/models.py:552 +#: report/models.py:623 msgid "Asset file description" msgstr "" @@ -6681,361 +7225,426 @@ msgstr "" msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report.html:77 +#: report/templates/report/inventree_po_report_base.html:15 msgid "Supplier was deleted" msgstr "" +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "单价" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "序列号" + #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:706 stock/templates/stock/item_base.html:320 -#: templates/js/translated/build.js:479 templates/js/translated/build.js:635 -#: templates/js/translated/build.js:1245 templates/js/translated/build.js:1746 -#: templates/js/translated/model_renderers.js:118 -#: templates/js/translated/order.js:122 templates/js/translated/order.js:3641 -#: templates/js/translated/order.js:3728 templates/js/translated/stock.js:521 -msgid "Serial Number" -msgstr "序列号" - -#: report/templates/report/inventree_test_report_base.html:88 +#: report/templates/report/inventree_test_report_base.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:2165 templates/js/translated/stock.js:1378 +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:2171 +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:108 +#: report/templates/report/inventree_test_report_base.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:110 +#: report/templates/report/inventree_test_report_base.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:123 +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:137 -#: stock/admin.py:87 templates/js/translated/part.js:724 -#: templates/js/translated/stock.js:641 templates/js/translated/stock.js:811 -#: templates/js/translated/stock.js:2768 +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 msgid "Serial" msgstr "" -#: stock/admin.py:23 stock/admin.py:90 -#: templates/js/translated/model_renderers.js:159 +#: stock/admin.py:39 stock/admin.py:108 msgid "Location ID" msgstr "" -#: stock/admin.py:24 stock/admin.py:91 +#: stock/admin.py:40 stock/admin.py:109 msgid "Location Name" msgstr "" -#: stock/admin.py:28 stock/templates/stock/location.html:123 -#: stock/templates/stock/location.html:129 +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 msgid "Location Path" msgstr "" -#: stock/admin.py:83 +#: stock/admin.py:100 msgid "Stock Item ID" msgstr "" -#: stock/admin.py:92 templates/js/translated/model_renderers.js:418 +#: stock/admin.py:107 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:110 msgid "Supplier Part ID" msgstr "供应商商品ID" -#: stock/admin.py:93 +#: stock/admin.py:111 msgid "Supplier ID" msgstr "" -#: stock/admin.py:94 +#: stock/admin.py:112 msgid "Supplier Name" msgstr "" -#: stock/admin.py:95 +#: stock/admin.py:113 msgid "Customer ID" msgstr "" -#: stock/admin.py:96 stock/models.py:689 -#: stock/templates/stock/item_base.html:359 +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 msgid "Installed In" msgstr "" -#: stock/admin.py:97 templates/js/translated/model_renderers.js:177 +#: stock/admin.py:115 msgid "Build ID" msgstr "" -#: stock/admin.py:99 +#: stock/admin.py:117 msgid "Sales Order ID" msgstr "" -#: stock/admin.py:100 +#: stock/admin.py:118 msgid "Purchase Order ID" msgstr "" -#: stock/admin.py:108 stock/models.py:762 -#: stock/templates/stock/item_base.html:427 -#: templates/js/translated/stock.js:1927 +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 msgid "Expiry Date" msgstr "" -#: stock/api.py:541 +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 msgid "Quantity is required" msgstr "" -#: stock/api.py:548 +#: stock/api.py:577 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:573 +#: stock/api.py:602 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:107 stock/models.py:803 -#: stock/templates/stock/item_base.html:250 -msgid "Owner" -msgstr "" - -#: stock/models.py:108 stock/models.py:804 -msgid "Select Owner" -msgstr "" - -#: stock/models.py:115 -msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" - -#: stock/models.py:158 -msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" - -#: stock/models.py:539 -msgid "Stock items cannot be located into structural stock locations!" -msgstr "" - -#: stock/models.py:564 stock/serializers.py:97 -msgid "Stock item cannot be created for virtual parts" -msgstr "" - -#: stock/models.py:581 -#, python-brace-format -msgid "Part type ('{pf}') must be {pe}" -msgstr "商品类型 ('{pf}') 必须是 {pe}" - -#: stock/models.py:591 stock/models.py:600 -msgid "Quantity must be 1 for item with a serial number" -msgstr "" - -#: stock/models.py:592 -msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" - -#: stock/models.py:614 -msgid "Item cannot belong to itself" -msgstr "" - -#: stock/models.py:620 -msgid "Item must have a build reference if is_building=True" -msgstr "" - -#: stock/models.py:634 -msgid "Build reference does not point to the same part object" -msgstr "" - -#: stock/models.py:648 -msgid "Parent Stock Item" -msgstr "" - -#: stock/models.py:658 -msgid "Base part" -msgstr "" - -#: stock/models.py:666 -msgid "Select a matching supplier part for this stock item" -msgstr "" - -#: stock/models.py:673 stock/templates/stock/location.html:17 +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "仓储地点" -#: stock/models.py:676 +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "仓储地点" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "商品类型 ('{pf}') 必须是 {pe}" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:683 +#: stock/models.py:695 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:692 +#: stock/models.py:704 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:708 +#: stock/models.py:720 msgid "Serial number for this item" msgstr "" -#: stock/models.py:722 +#: stock/models.py:734 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:727 +#: stock/models.py:739 msgid "Stock Quantity" msgstr "" -#: stock/models.py:734 +#: stock/models.py:746 msgid "Source Build" msgstr "" -#: stock/models.py:736 +#: stock/models.py:748 msgid "Build for this stock item" msgstr "" -#: stock/models.py:747 +#: stock/models.py:759 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:750 +#: stock/models.py:762 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:756 +#: stock/models.py:768 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:763 +#: stock/models.py:775 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete on deplete" msgstr "" -#: stock/models.py:778 +#: stock/models.py:790 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:791 stock/templates/stock/item.html:132 +#: stock/models.py:803 stock/templates/stock/item.html:132 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:799 +#: stock/models.py:811 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:827 +#: stock/models.py:839 msgid "Converted to part" msgstr "" -#: stock/models.py:1317 +#: stock/models.py:1361 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1323 +#: stock/models.py:1367 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1329 +#: stock/models.py:1373 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1332 +#: stock/models.py:1376 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1335 +#: stock/models.py:1379 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1342 -#, python-brace-format -msgid "Serial numbers already exist: {exists}" -msgstr "" +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "序列号已存在" -#: stock/models.py:1412 +#: stock/models.py:1457 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1415 +#: stock/models.py:1460 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1418 +#: stock/models.py:1463 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1421 +#: stock/models.py:1466 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1424 +#: stock/models.py:1469 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1427 +#: stock/models.py:1472 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1434 stock/serializers.py:963 +#: stock/models.py:1479 stock/serializers.py:946 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1438 +#: stock/models.py:1483 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1487 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1446 +#: stock/models.py:1491 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1660 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2083 +#: stock/models.py:2128 msgid "Entry notes" msgstr "" -#: stock/models.py:2141 +#: stock/models.py:2186 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2147 +#: stock/models.py:2192 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2166 +#: stock/models.py:2211 msgid "Test name" msgstr "" -#: stock/models.py:2172 +#: stock/models.py:2217 msgid "Test result" msgstr "" -#: stock/models.py:2178 +#: stock/models.py:2223 msgid "Test output value" msgstr "" -#: stock/models.py:2185 +#: stock/models.py:2230 msgid "Test result attachment" msgstr "" -#: stock/models.py:2191 +#: stock/models.py:2236 msgid "Test notes" msgstr "" @@ -7043,128 +7652,124 @@ msgstr "" msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:176 +#: stock/serializers.py:231 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:286 +#: stock/serializers.py:282 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:298 +#: stock/serializers.py:294 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:304 +#: stock/serializers.py:300 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:315 stock/serializers.py:920 stock/serializers.py:1153 +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:322 +#: stock/serializers.py:318 msgid "Optional note field" msgstr "" -#: stock/serializers.py:332 +#: stock/serializers.py:328 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:353 -msgid "Serial numbers already exist" -msgstr "序列号已存在" - -#: stock/serializers.py:393 +#: stock/serializers.py:389 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:406 +#: stock/serializers.py:402 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:413 +#: stock/serializers.py:409 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:450 +#: stock/serializers.py:446 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:455 stock/serializers.py:536 +#: stock/serializers.py:451 stock/serializers.py:532 msgid "Add transaction note (optional)" msgstr "添加交易备注 (可选)" -#: stock/serializers.py:489 +#: stock/serializers.py:485 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:500 +#: stock/serializers.py:496 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:531 +#: stock/serializers.py:527 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:775 +#: stock/serializers.py:758 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:779 +#: stock/serializers.py:762 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:783 +#: stock/serializers.py:766 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:814 +#: stock/serializers.py:797 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:820 +#: stock/serializers.py:803 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:828 +#: stock/serializers.py:811 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:838 stock/serializers.py:1069 +#: stock/serializers.py:821 stock/serializers.py:1052 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:910 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:932 +#: stock/serializers.py:915 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:933 +#: stock/serializers.py:916 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:938 +#: stock/serializers.py:921 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:939 +#: stock/serializers.py:922 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:949 +#: stock/serializers.py:932 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1031 +#: stock/serializers.py:1014 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1059 +#: stock/serializers.py:1042 msgid "Stock transaction notes" msgstr "" @@ -7189,7 +7794,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:302 +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 msgid "Delete Test Data" msgstr "" @@ -7201,15 +7806,15 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2915 +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:290 +#: stock/templates/stock/item.html:276 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:327 templates/js/translated/stock.js:1568 +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 msgid "Add Test Result" msgstr "" @@ -7222,7 +7827,7 @@ msgid "Scan to Location" msgstr "" #: stock/templates/stock/item_base.html:60 -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Printing actions" msgstr "" @@ -7231,15 +7836,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:80 -#: stock/templates/stock/location.html:82 templates/stock_table.html:47 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:82 templates/stock_table.html:45 +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:83 templates/stock_table.html:46 +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -7248,11 +7853,11 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/location.html:88 templates/stock_table.html:48 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:92 templates/stock_table.html:51 +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 msgid "Assign to customer" msgstr "" @@ -7292,125 +7897,133 @@ msgstr "" msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/item_base.html:194 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:212 msgid "No manufacturer set" msgstr "" -#: stock/templates/stock/item_base.html:254 +#: stock/templates/stock/item_base.html:252 msgid "You are not in the list of owners of this item. This stock item cannot be edited." msgstr "" -#: stock/templates/stock/item_base.html:255 -#: stock/templates/stock/location.html:141 +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 msgid "Read only" msgstr "" -#: stock/templates/stock/item_base.html:268 +#: stock/templates/stock/item_base.html:266 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:272 msgid "This stock item is in production and cannot be edited." msgstr "此库存项目正在生产中,无法编辑。" -#: stock/templates/stock/item_base.html:269 +#: stock/templates/stock/item_base.html:273 msgid "Edit the stock item from the build view." msgstr "" -#: stock/templates/stock/item_base.html:282 -msgid "This stock item has not passed all required tests" -msgstr "" - -#: stock/templates/stock/item_base.html:290 +#: stock/templates/stock/item_base.html:288 msgid "This stock item is allocated to Sales Order" msgstr "" -#: stock/templates/stock/item_base.html:298 +#: stock/templates/stock/item_base.html:296 msgid "This stock item is allocated to Build Order" msgstr "" -#: stock/templates/stock/item_base.html:304 -msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "previous page" msgstr "" -#: stock/templates/stock/item_base.html:326 +#: stock/templates/stock/item_base.html:318 msgid "Navigate to previous serial number" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "next page" msgstr "" -#: stock/templates/stock/item_base.html:335 +#: stock/templates/stock/item_base.html:327 msgid "Navigate to next serial number" msgstr "" -#: stock/templates/stock/item_base.html:348 +#: stock/templates/stock/item_base.html:341 msgid "Available Quantity" msgstr "" -#: stock/templates/stock/item_base.html:392 -#: templates/js/translated/build.js:1769 +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 msgid "No location set" msgstr "未设置仓储地点" -#: stock/templates/stock/item_base.html:407 +#: stock/templates/stock/item_base.html:403 msgid "Tests" msgstr "" -#: stock/templates/stock/item_base.html:431 +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 #, python-format msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:431 -#: templates/js/translated/table_filters.js:297 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:433 +#: stock/templates/stock/item_base.html:429 #, python-format msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" -#: stock/templates/stock/item_base.html:433 -#: templates/js/translated/table_filters.js:303 +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:449 +#: stock/templates/stock/item_base.html:445 msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:519 +#: stock/templates/stock/item_base.html:523 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:539 +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:603 +#: stock/templates/stock/item_base.html:607 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:606 +#: stock/templates/stock/item_base.html:610 msgid "Warning" msgstr "警告" -#: stock/templates/stock/item_base.html:607 +#: stock/templates/stock/item_base.html:611 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:615 +#: stock/templates/stock/item_base.html:619 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:643 +#: stock/templates/stock/item_base.html:649 msgid "Return to Stock" msgstr "" @@ -7422,47 +8035,51 @@ msgstr "" msgid "Select quantity to serialize, and unique serial numbers." msgstr "" -#: stock/templates/stock/location.html:38 +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 msgid "Locate stock location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan stock items into this location" msgstr "" -#: stock/templates/stock/location.html:56 +#: stock/templates/stock/location.html:62 msgid "Scan In Stock Items" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan stock container into this location" msgstr "" -#: stock/templates/stock/location.html:57 +#: stock/templates/stock/location.html:63 msgid "Scan In Container" msgstr "" -#: stock/templates/stock/location.html:96 +#: stock/templates/stock/location.html:102 msgid "Location actions" msgstr "仓储地操作" -#: stock/templates/stock/location.html:98 +#: stock/templates/stock/location.html:104 msgid "Edit location" msgstr "编辑仓储地" -#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:106 msgid "Delete location" msgstr "删除仓储地" -#: stock/templates/stock/location.html:130 +#: stock/templates/stock/location.html:136 msgid "Top level stock location" msgstr "" -#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location.html:142 msgid "Location Owner" msgstr "" -#: stock/templates/stock/location.html:140 +#: stock/templates/stock/location.html:146 msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "您不在此仓储地的所有者列表中,无法编辑此仓储地。" @@ -7472,11 +8089,6 @@ msgstr "您不在此仓储地的所有者列表中,无法编辑此仓储地。 msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:177 templates/InvenTree/search.html:167 -#: templates/js/translated/search.js:240 users/models.py:39 -msgid "Stock Locations" -msgstr "仓储地点" - #: stock/templates/stock/location.html:215 msgid "Create new stock location" msgstr "新建仓储地点" @@ -7485,11 +8097,15 @@ msgstr "新建仓储地点" msgid "New Location" msgstr "新建仓储地点" -#: stock/templates/stock/location.html:310 +#: stock/templates/stock/location.html:303 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:394 +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 msgid "Link Barcode to Stock Location" msgstr "" @@ -7509,10 +8125,6 @@ msgstr "" msgid "Child Items" msgstr "" -#: stock/views.py:109 -msgid "Stock Location QR code" -msgstr "仓储地点二维码" - #: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 msgid "Permission Denied" msgstr "" @@ -7529,7 +8141,8 @@ msgstr "" msgid "You have been logged out from InvenTree." msgstr "" -#: templates/403_csrf.html:19 templates/navbar.html:142 +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 msgid "Login" msgstr "" @@ -7638,6 +8251,12 @@ msgstr "" msgid "Notification History" msgstr "" +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "移除通知" + #: templates/InvenTree/notifications/inbox.html:9 msgid "Pending Notifications" msgstr "" @@ -7650,7 +8269,7 @@ msgstr "" #: templates/InvenTree/notifications/notifications.html:10 #: templates/InvenTree/notifications/sidebar.html:5 #: templates/InvenTree/settings/sidebar.html:17 -#: templates/InvenTree/settings/sidebar.html:35 templates/notifications.html:5 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 msgid "Notifications" msgstr "" @@ -7666,8 +8285,8 @@ msgstr "" msgid "Delete all read notifications" msgstr "" -#: templates/InvenTree/notifications/notifications.html:93 -#: templates/js/translated/notification.js:82 +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 msgid "Delete Notification" msgstr "" @@ -7705,7 +8324,6 @@ msgid "Label Settings" msgstr "标签设置" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:31 msgid "Login Settings" msgstr "" @@ -7723,7 +8341,7 @@ msgid "Single Sign On" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:139 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 msgid "Settings" msgstr "设置" @@ -7741,8 +8359,9 @@ msgid "Open in new tab" msgstr "" #: templates/InvenTree/settings/notifications.html:9 -msgid "Global Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "通知设置" #: templates/InvenTree/settings/notifications.html:18 msgid "Slug" @@ -7752,20 +8371,28 @@ msgstr "" msgid "Part Settings" msgstr "商品设置" -#: templates/InvenTree/settings/part.html:41 +#: templates/InvenTree/settings/part.html:42 msgid "Part Import" msgstr "商品导入" -#: templates/InvenTree/settings/part.html:45 +#: templates/InvenTree/settings/part.html:46 msgid "Import Part" msgstr "导入商品" -#: templates/InvenTree/settings/part.html:59 +#: templates/InvenTree/settings/part.html:60 msgid "Part Parameter Templates" msgstr "商品参数模板" +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + #: templates/InvenTree/settings/plugin.html:10 -#: templates/InvenTree/settings/sidebar.html:57 +#: templates/InvenTree/settings/sidebar.html:58 msgid "Plugin Settings" msgstr "" @@ -7774,7 +8401,7 @@ msgid "Changing the settings below require you to immediately restart the server msgstr "" #: templates/InvenTree/settings/plugin.html:38 -#: templates/InvenTree/settings/sidebar.html:59 +#: templates/InvenTree/settings/sidebar.html:60 msgid "Plugins" msgstr "" @@ -7809,7 +8436,7 @@ msgid "Stage" msgstr "" #: templates/InvenTree/settings/plugin.html:105 -#: templates/js/translated/notification.js:75 +#: templates/js/translated/notification.js:66 msgid "Message" msgstr "" @@ -7820,11 +8447,11 @@ msgstr "" #: templates/InvenTree/settings/plugin_details.html:38 msgid "Sample" -msgstr "" +msgstr "样本" #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" -msgstr "" +msgstr "插件信息" #: templates/InvenTree/settings/plugin_settings.html:48 msgid "no version information supplied" @@ -7856,7 +8483,7 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:94 msgid "Installation path" -msgstr "" +msgstr "安装路径" #: templates/InvenTree/settings/plugin_settings.html:102 msgid "This is a builtin plugin which cannot be disabled" @@ -7896,28 +8523,32 @@ msgstr "采购订单设置" msgid "Pricing Settings" msgstr "" -#: templates/InvenTree/settings/pricing.html:33 +#: templates/InvenTree/settings/pricing.html:34 msgid "Exchange Rates" msgstr "汇率" -#: templates/InvenTree/settings/pricing.html:37 +#: templates/InvenTree/settings/pricing.html:38 msgid "Update Now" msgstr "立即更新" -#: templates/InvenTree/settings/pricing.html:45 -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 msgid "Last Update" msgstr "上次更新" -#: templates/InvenTree/settings/pricing.html:49 +#: templates/InvenTree/settings/pricing.html:50 msgid "Never" msgstr "从不" #: templates/InvenTree/settings/report.html:8 -#: templates/InvenTree/settings/user_reports.html:9 +#: templates/InvenTree/settings/user_reporting.html:9 msgid "Report Settings" msgstr "报表设置" +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + #: templates/InvenTree/settings/setting.html:31 msgid "No value set" msgstr "未设置值" @@ -7926,71 +8557,71 @@ msgstr "未设置值" msgid "Edit setting" msgstr "编辑设置" -#: templates/InvenTree/settings/settings.html:118 +#: templates/InvenTree/settings/settings_js.html:58 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:120 +#: templates/InvenTree/settings/settings_js.html:60 msgid "Edit Notification Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:123 +#: templates/InvenTree/settings/settings_js.html:63 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:125 +#: templates/InvenTree/settings/settings_js.html:65 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:196 +#: templates/InvenTree/settings/settings_staff_js.html:49 msgid "Rate" msgstr "" -#: templates/InvenTree/settings/settings.html:261 +#: templates/InvenTree/settings/settings_staff_js.html:117 msgid "No category parameter templates found" msgstr "未找到类别参数模板" -#: templates/InvenTree/settings/settings.html:283 -#: templates/InvenTree/settings/settings.html:408 +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 msgid "Edit Template" msgstr "编辑模板" -#: templates/InvenTree/settings/settings.html:284 -#: templates/InvenTree/settings/settings.html:409 +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 msgid "Delete Template" msgstr "删除模板" -#: templates/InvenTree/settings/settings.html:324 -msgid "Create Category Parameter Template" -msgstr "创建类别参数模板" - -#: templates/InvenTree/settings/settings.html:369 +#: templates/InvenTree/settings/settings_staff_js.html:179 msgid "Delete Category Parameter Template" msgstr "删除类别参数模板" -#: templates/InvenTree/settings/settings.html:381 +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "创建类别参数模板" + +#: templates/InvenTree/settings/settings_staff_js.html:240 msgid "No part parameter templates found" msgstr "未找到商品参数模板" -#: templates/InvenTree/settings/settings.html:385 +#: templates/InvenTree/settings/settings_staff_js.html:244 #: templates/js/translated/news.js:29 #: templates/js/translated/notification.js:36 msgid "ID" -msgstr "" +msgstr "ID" -#: templates/InvenTree/settings/settings.html:427 +#: templates/InvenTree/settings/settings_staff_js.html:286 msgid "Create Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:446 +#: templates/InvenTree/settings/settings_staff_js.html:303 msgid "Edit Part Parameter Template" msgstr "" -#: templates/InvenTree/settings/settings.html:460 +#: templates/InvenTree/settings/settings_staff_js.html:315 msgid "Any parameters which reference this template will also be deleted" msgstr "" -#: templates/InvenTree/settings/settings.html:468 +#: templates/InvenTree/settings/settings_staff_js.html:323 msgid "Delete Part Parameter Template" msgstr "" @@ -8000,43 +8631,42 @@ msgid "User Settings" msgstr "用户设置" #: templates/InvenTree/settings/sidebar.html:9 -#: templates/InvenTree/settings/user.html:12 -msgid "Account Settings" -msgstr "帐户设置" +msgid "Account" +msgstr "" #: templates/InvenTree/settings/sidebar.html:11 -#: templates/InvenTree/settings/user_display.html:9 -msgid "Display Settings" +msgid "Display" msgstr "" #: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" -msgstr "" +msgstr "主页" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/InvenTree/settings/user_search.html:9 -msgid "Search Settings" -msgstr "搜索设置" +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "搜索" #: templates/InvenTree/settings/sidebar.html:19 #: templates/InvenTree/settings/sidebar.html:39 -msgid "Label Printing" -msgstr "" - -#: templates/InvenTree/settings/sidebar.html:21 -#: templates/InvenTree/settings/sidebar.html:41 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:29 -msgid "Server Configuration" +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" msgstr "" -#: templates/InvenTree/settings/sidebar.html:45 +#: templates/InvenTree/settings/sidebar.html:37 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 msgid "Categories" msgstr "" @@ -8048,6 +8678,10 @@ msgstr "销售订单设置" msgid "Stock Settings" msgstr "库存设置" +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "帐户设置" + #: templates/InvenTree/settings/user.html:18 #: templates/account/password_reset_from_key.html:4 #: templates/account/password_reset_from_key.html:7 @@ -8055,8 +8689,8 @@ msgid "Change Password" msgstr "更改密码" #: templates/InvenTree/settings/user.html:23 -#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3 -#: templates/notes_buttons.html:4 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 msgid "Edit" msgstr "编辑" @@ -8098,7 +8732,7 @@ msgstr "" #: templates/InvenTree/settings/user.html:95 msgid "Warning:" -msgstr "" +msgstr "警告:" #: templates/InvenTree/settings/user.html:96 msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." @@ -8138,7 +8772,7 @@ msgstr "" #: templates/InvenTree/settings/user.html:189 msgid "TOTP" -msgstr "" +msgstr "TOTP" #: templates/InvenTree/settings/user.html:195 msgid "Static" @@ -8182,11 +8816,11 @@ msgstr "" #: templates/InvenTree/settings/user.html:243 msgid "IP Address" -msgstr "" +msgstr "IP 地址" #: templates/InvenTree/settings/user.html:244 msgid "Device" -msgstr "" +msgstr "设备" #: templates/InvenTree/settings/user.html:245 msgid "Last Activity" @@ -8206,13 +8840,17 @@ msgstr "" msgid "Do you really want to remove the selected email address?" msgstr "" +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "显示设置" + #: templates/InvenTree/settings/user_display.html:29 msgid "Theme Settings" msgstr "主题设置" #: templates/InvenTree/settings/user_display.html:39 msgid "Select theme" -msgstr "" +msgstr "选择主题" #: templates/InvenTree/settings/user_display.html:50 msgid "Set Theme" @@ -8224,7 +8862,7 @@ msgstr "语言设置" #: templates/InvenTree/settings/user_display.html:67 msgid "Select language" -msgstr "" +msgstr "选择语言" #: templates/InvenTree/settings/user_display.html:83 #, python-format @@ -8241,7 +8879,7 @@ msgstr "设置语言" #: templates/InvenTree/settings/user_display.html:95 msgid "Some languages are not complete" -msgstr "" +msgstr "部分语言尚未翻译完成" #: templates/InvenTree/settings/user_display.html:97 msgid "Show only sufficent" @@ -8261,87 +8899,87 @@ msgstr "帮助翻译工作!" #: templates/InvenTree/settings/user_display.html:107 msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." -msgstr "" +msgstr "InventTree 网页的本地化翻译是社区通过 crowdin 贡献的。我们欢迎并鼓励参与贡献。" #: templates/InvenTree/settings/user_display.html:108 msgid "InvenTree Translation Project" -msgstr "" +msgstr "InvenTree 翻译项目" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" msgstr "主页设置" -#: templates/InvenTree/settings/user_notifications.html:9 -msgid "Notification Settings" -msgstr "" +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "搜索设置" #: templates/about.html:9 msgid "InvenTree Version" -msgstr "" +msgstr "InvenTree 版本" #: templates/about.html:14 msgid "Development Version" -msgstr "" +msgstr "开发版" #: templates/about.html:17 msgid "Up to Date" -msgstr "" +msgstr "已是最新版本" #: templates/about.html:19 msgid "Update Available" -msgstr "" +msgstr "有可用更新" #: templates/about.html:42 msgid "InvenTree Documentation" -msgstr "" +msgstr "InvenTree 文档" #: templates/about.html:47 msgid "API Version" -msgstr "" +msgstr "API 版本" #: templates/about.html:52 msgid "Python Version" -msgstr "" +msgstr "Python 版本" #: templates/about.html:57 msgid "Django Version" -msgstr "" +msgstr "Django 版本" #: templates/about.html:62 msgid "View Code on GitHub" -msgstr "" +msgstr "在 GitHub 上查看代码" #: templates/about.html:67 msgid "Credits" -msgstr "" +msgstr "致谢" #: templates/about.html:72 msgid "Mobile App" -msgstr "" +msgstr "手机 APP" #: templates/about.html:77 msgid "Submit Bug Report" -msgstr "" +msgstr "提交 Bug" #: templates/about.html:84 templates/clip.html:4 msgid "copy to clipboard" -msgstr "" +msgstr "复制到剪贴板" #: templates/about.html:84 msgid "copy version information" -msgstr "" +msgstr "显示版本信息" #: templates/account/email_confirm.html:6 #: templates/account/email_confirm.html:10 msgid "Confirm Email Address" -msgstr "" +msgstr "确认邮件地址" #: templates/account/email_confirm.html:16 #, python-format msgid "Please confirm that %(email)s is an email address for user %(user_display)s." msgstr "" -#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:707 +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 msgid "Confirm" msgstr "确认" @@ -8353,21 +8991,21 @@ msgstr "" #: templates/account/login.html:6 templates/account/login.html:17 #: templates/account/login.html:38 templates/socialaccount/login.html:4 msgid "Sign In" -msgstr "" +msgstr "登录-test" #: templates/account/login.html:21 msgid "Not a member?" -msgstr "" +msgstr "还不是用户?" #: templates/account/login.html:23 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:20 msgid "Sign Up" -msgstr "" +msgstr "注册" #: templates/account/login.html:45 msgid "Forgot Password?" -msgstr "" +msgstr "忘记密码?" #: templates/account/login.html:53 msgid "or log in with" @@ -8509,11 +9147,11 @@ msgstr "" msgid "Verify" msgstr "" -#: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 msgid "Add Link" msgstr "" -#: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 msgid "Add Attachment" msgstr "添加附件" @@ -8521,32 +9159,33 @@ msgstr "添加附件" msgid "Delete selected attachments" msgstr "" -#: templates/attachment_table.html:12 templates/js/translated/attachment.js:113 +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 msgid "Delete Attachments" msgstr "" -#: templates/base.html:101 +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 msgid "Server Restart Required" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "A configuration option has been changed which requires a server restart" msgstr "" -#: templates/base.html:104 +#: templates/base.html:105 msgid "Contact your system administrator for further information" msgstr "" -#: templates/collapse_rows.html:3 -msgid "Collapse all rows" -msgstr "" - #: templates/email/build_order_completed.html:9 #: templates/email/new_order_assigned.html:9 #: templates/email/overdue_build_order.html:9 #: templates/email/overdue_purchase_order.html:9 #: templates/email/overdue_sales_order.html:9 #: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 msgid "Click on the following link to view this order" msgstr "" @@ -8568,7 +9207,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1637 +#: templates/js/translated/bom.js:1629 msgid "Required Quantity" msgstr "" @@ -8582,214 +9221,206 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:19 -#: templates/js/translated/part.js:2701 +#: templates/js/translated/part.js:2753 msgid "Minimum Quantity" msgstr "" -#: templates/expand_rows.html:3 -msgid "Expand all rows" -msgstr "" - -#: templates/js/translated/api.js:195 templates/js/translated/modals.js:1080 +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:196 templates/js/translated/modals.js:1081 +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 msgid "No response from the InvenTree server" msgstr "" -#: templates/js/translated/api.js:202 +#: templates/js/translated/api.js:231 msgid "Error 400: Bad request" msgstr "" -#: templates/js/translated/api.js:203 +#: templates/js/translated/api.js:232 msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1090 +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1091 +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1095 +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1096 +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1100 +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1101 +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:222 +#: templates/js/translated/api.js:251 msgid "Error 405: Method Not Allowed" msgstr "" -#: templates/js/translated/api.js:223 +#: templates/js/translated/api.js:252 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:227 templates/js/translated/modals.js:1105 +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:228 templates/js/translated/modals.js:1106 +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 msgid "Connection timeout while requesting data from server" msgstr "" -#: templates/js/translated/api.js:231 +#: templates/js/translated/api.js:260 msgid "Unhandled Error Code" msgstr "" -#: templates/js/translated/api.js:232 +#: templates/js/translated/api.js:261 msgid "Error code" msgstr "" -#: templates/js/translated/attachment.js:98 +#: templates/js/translated/attachment.js:104 msgid "All selected attachments will be deleted" msgstr "" -#: templates/js/translated/attachment.js:194 +#: templates/js/translated/attachment.js:245 msgid "No attachments found" msgstr "" -#: templates/js/translated/attachment.js:220 +#: templates/js/translated/attachment.js:275 msgid "Edit Attachment" msgstr "编辑附件" -#: templates/js/translated/attachment.js:290 +#: templates/js/translated/attachment.js:316 msgid "Upload Date" msgstr "" -#: templates/js/translated/attachment.js:313 +#: templates/js/translated/attachment.js:336 msgid "Edit attachment" msgstr "" -#: templates/js/translated/attachment.js:322 +#: templates/js/translated/attachment.js:344 msgid "Delete attachment" msgstr "" -#: templates/js/translated/barcode.js:33 +#: templates/js/translated/barcode.js:32 msgid "Scan barcode data here using barcode scanner" msgstr "" -#: templates/js/translated/barcode.js:35 +#: templates/js/translated/barcode.js:34 msgid "Enter barcode data" msgstr "输入条形码数据" -#: templates/js/translated/barcode.js:42 -msgid "Barcode" -msgstr "条形码" - -#: templates/js/translated/barcode.js:49 +#: templates/js/translated/barcode.js:48 msgid "Scan barcode using connected webcam" msgstr "" -#: templates/js/translated/barcode.js:126 +#: templates/js/translated/barcode.js:125 msgid "Enter optional notes for stock transfer" msgstr "" -#: templates/js/translated/barcode.js:127 +#: templates/js/translated/barcode.js:126 msgid "Enter notes" msgstr "" -#: templates/js/translated/barcode.js:173 +#: templates/js/translated/barcode.js:175 msgid "Server error" msgstr "" -#: templates/js/translated/barcode.js:202 +#: templates/js/translated/barcode.js:204 msgid "Unknown response from server" msgstr "" -#: templates/js/translated/barcode.js:237 -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 msgid "Invalid server response" msgstr "" -#: templates/js/translated/barcode.js:355 +#: templates/js/translated/barcode.js:359 msgid "Scan barcode data" msgstr "" -#: templates/js/translated/barcode.js:405 templates/navbar.html:109 +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 msgid "Scan Barcode" msgstr "扫描条形码" -#: templates/js/translated/barcode.js:417 +#: templates/js/translated/barcode.js:427 msgid "No URL in response" msgstr "" -#: templates/js/translated/barcode.js:456 +#: templates/js/translated/barcode.js:468 msgid "This will remove the link to the associated barcode" msgstr "" -#: templates/js/translated/barcode.js:462 +#: templates/js/translated/barcode.js:474 msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:524 templates/js/translated/stock.js:1088 +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 msgid "Remove stock item" msgstr "" -#: templates/js/translated/barcode.js:567 +#: templates/js/translated/barcode.js:580 msgid "Scan Stock Items Into Location" msgstr "" -#: templates/js/translated/barcode.js:569 +#: templates/js/translated/barcode.js:582 msgid "Scan stock item barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:572 -#: templates/js/translated/barcode.js:764 +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 msgid "Check In" msgstr "" -#: templates/js/translated/barcode.js:603 +#: templates/js/translated/barcode.js:616 msgid "No barcode provided" msgstr "" -#: templates/js/translated/barcode.js:643 +#: templates/js/translated/barcode.js:656 msgid "Stock Item already scanned" msgstr "" -#: templates/js/translated/barcode.js:647 +#: templates/js/translated/barcode.js:660 msgid "Stock Item already in this location" msgstr "" -#: templates/js/translated/barcode.js:654 +#: templates/js/translated/barcode.js:667 msgid "Added stock item" msgstr "" -#: templates/js/translated/barcode.js:663 +#: templates/js/translated/barcode.js:676 msgid "Barcode does not match valid stock item" msgstr "" -#: templates/js/translated/barcode.js:680 +#: templates/js/translated/barcode.js:695 msgid "Scan Stock Container Into Location" msgstr "" -#: templates/js/translated/barcode.js:682 +#: templates/js/translated/barcode.js:697 msgid "Scan stock container barcode to check in to this location" msgstr "" -#: templates/js/translated/barcode.js:716 +#: templates/js/translated/barcode.js:731 msgid "Barcode does not match valid stock location" msgstr "" -#: templates/js/translated/barcode.js:759 +#: templates/js/translated/barcode.js:775 msgid "Check Into Location" msgstr "" -#: templates/js/translated/barcode.js:827 -#: templates/js/translated/barcode.js:836 +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 msgid "Barcode does not match a valid location" msgstr "" @@ -8805,10 +9436,10 @@ msgstr "" msgid "Row Data" msgstr "" -#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:666 -#: templates/js/translated/modals.js:68 templates/js/translated/modals.js:608 -#: templates/js/translated/modals.js:702 templates/js/translated/modals.js:1010 -#: templates/js/translated/order.js:1251 templates/modals.html:15 +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -8881,122 +9512,122 @@ msgstr "" msgid "Include part pricing data in exported BOM" msgstr "" -#: templates/js/translated/bom.js:557 +#: templates/js/translated/bom.js:560 msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:611 +#: templates/js/translated/bom.js:614 msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:622 +#: templates/js/translated/bom.js:625 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:628 +#: templates/js/translated/bom.js:631 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:667 +#: templates/js/translated/bom.js:670 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:668 +#: templates/js/translated/bom.js:671 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:733 msgid "All selected BOM items will be deleted" msgstr "" -#: templates/js/translated/bom.js:746 +#: templates/js/translated/bom.js:749 msgid "Delete selected BOM items?" msgstr "" -#: templates/js/translated/bom.js:875 +#: templates/js/translated/bom.js:876 msgid "Load BOM for subassembly" msgstr "" -#: templates/js/translated/bom.js:885 +#: templates/js/translated/bom.js:886 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:889 templates/js/translated/build.js:1846 +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:979 +#: templates/js/translated/bom.js:980 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:1030 templates/js/translated/bom.js:1268 -msgid "View BOM" -msgstr "" - -#: templates/js/translated/bom.js:1102 +#: templates/js/translated/bom.js:1100 msgid "BOM pricing is complete" msgstr "" -#: templates/js/translated/bom.js:1107 +#: templates/js/translated/bom.js:1105 msgid "BOM pricing is incomplete" msgstr "" -#: templates/js/translated/bom.js:1114 +#: templates/js/translated/bom.js:1112 msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1145 templates/js/translated/build.js:1918 -#: templates/js/translated/order.js:3960 +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1922 +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1924 -#: templates/js/translated/part.js:1036 templates/js/translated/part.js:1818 +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1154 templates/js/translated/build.js:1926 +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1179 templates/js/translated/build.js:1909 -#: templates/js/translated/build.js:1996 +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1239 +#: templates/js/translated/bom.js:1240 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1241 +#: templates/js/translated/bom.js:1242 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1243 +#: templates/js/translated/bom.js:1244 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1245 templates/js/translated/bom.js:1441 +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1247 +#: templates/js/translated/bom.js:1248 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1690 +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1620 templates/js/translated/build.js:1829 +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1646 +#: templates/js/translated/bom.js:1638 msgid "Inherited from parent BOM" msgstr "" @@ -9040,13 +9671,13 @@ msgstr "生产订单未完成" msgid "Complete Build Order" msgstr "生产订单完成" -#: templates/js/translated/build.js:318 templates/js/translated/stock.js:94 -#: templates/js/translated/stock.js:236 +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 msgid "Next available serial number" msgstr "" -#: templates/js/translated/build.js:320 templates/js/translated/stock.js:96 -#: templates/js/translated/stock.js:238 +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 msgid "Latest serial number" msgstr "" @@ -9082,35 +9713,35 @@ msgstr "" msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:405 +#: templates/js/translated/build.js:404 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:428 +#: templates/js/translated/build.js:424 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:446 +#: templates/js/translated/build.js:442 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:466 templates/js/translated/build.js:622 +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:467 templates/js/translated/build.js:623 +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:521 templates/js/translated/build.js:677 +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 msgid "Output" msgstr "" -#: templates/js/translated/build.js:543 +#: templates/js/translated/build.js:544 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:690 +#: templates/js/translated/build.js:694 msgid "Delete Build Outputs" msgstr "" @@ -9122,541 +9753,558 @@ msgstr "" msgid "Location not specified" msgstr "未指定仓储地点" -#: templates/js/translated/build.js:1205 +#: templates/js/translated/build.js:1210 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1276 +#: templates/js/translated/build.js:1284 msgid "Allocated Stock" msgstr "" -#: templates/js/translated/build.js:1283 +#: templates/js/translated/build.js:1291 msgid "No tracked BOM items for this build" msgstr "" -#: templates/js/translated/build.js:1305 +#: templates/js/translated/build.js:1313 msgid "Completed Tests" msgstr "" -#: templates/js/translated/build.js:1310 +#: templates/js/translated/build.js:1318 msgid "No required tests for this build" msgstr "" -#: templates/js/translated/build.js:1786 templates/js/translated/build.js:2788 -#: templates/js/translated/order.js:3676 +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1788 templates/js/translated/build.js:2789 -#: templates/js/translated/order.js:3677 +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1806 +#: templates/js/translated/build.js:1799 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1816 +#: templates/js/translated/build.js:1809 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1842 +#: templates/js/translated/build.js:1835 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1878 +#: templates/js/translated/build.js:1871 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1912 templates/js/translated/order.js:3967 +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 msgid "Insufficient stock available" msgstr "" -#: templates/js/translated/build.js:1914 templates/js/translated/order.js:3965 +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2004 templates/js/translated/order.js:4059 +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2008 templates/stock_table.html:50 +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2011 templates/js/translated/order.js:4052 +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2050 templates/js/translated/label.js:172 -#: templates/js/translated/order.js:1075 templates/js/translated/order.js:3203 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 msgid "Select Parts" msgstr "选择商品" -#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3204 +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:2100 templates/js/translated/order.js:3152 +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:2179 +#: templates/js/translated/build.js:2187 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:2180 +#: templates/js/translated/build.js:2188 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:2194 templates/js/translated/order.js:3218 +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:2222 +#: templates/js/translated/build.js:2230 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:2233 templates/js/translated/order.js:3315 +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:2305 templates/js/translated/order.js:3392 +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:2402 +#: templates/js/translated/build.js:2411 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2412 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:2405 +#: templates/js/translated/build.js:2414 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:2406 +#: templates/js/translated/build.js:2415 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:2407 +#: templates/js/translated/build.js:2416 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:2434 +#: templates/js/translated/build.js:2443 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2547 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2575 templates/js/translated/part.js:1712 -#: templates/js/translated/part.js:2259 templates/js/translated/stock.js:1732 -#: templates/js/translated/stock.js:2431 +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2589 +#: templates/js/translated/build.js:2596 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2623 +#: templates/js/translated/build.js:2630 msgid "Progress" msgstr "" -#: templates/js/translated/build.js:2659 templates/js/translated/stock.js:2698 +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 msgid "No user information" msgstr "没有用户信息" -#: templates/js/translated/build.js:2765 +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 msgid "No parts allocated for" msgstr "" -#: templates/js/translated/company.js:67 +#: templates/js/translated/company.js:72 msgid "Add Manufacturer" msgstr "添加制造商" -#: templates/js/translated/company.js:80 templates/js/translated/company.js:182 +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 msgid "Add Manufacturer Part" msgstr "添加制造商商品" -#: templates/js/translated/company.js:101 +#: templates/js/translated/company.js:106 msgid "Edit Manufacturer Part" msgstr "编辑制造商商品" -#: templates/js/translated/company.js:170 templates/js/translated/order.js:597 +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 msgid "Add Supplier" msgstr "添加供应商" -#: templates/js/translated/company.js:198 templates/js/translated/order.js:888 +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 msgid "Add Supplier Part" msgstr "添加供应商商品" -#: templates/js/translated/company.js:298 +#: templates/js/translated/company.js:318 msgid "All selected supplier parts will be deleted" msgstr "删除所有选定的供应商商品" -#: templates/js/translated/company.js:314 +#: templates/js/translated/company.js:334 msgid "Delete Supplier Parts" msgstr "" -#: templates/js/translated/company.js:386 +#: templates/js/translated/company.js:443 msgid "Add new Company" msgstr "增加新的公司信息" -#: templates/js/translated/company.js:463 +#: templates/js/translated/company.js:514 msgid "Parts Supplied" msgstr "" -#: templates/js/translated/company.js:472 +#: templates/js/translated/company.js:523 msgid "Parts Manufactured" msgstr "" -#: templates/js/translated/company.js:487 +#: templates/js/translated/company.js:538 msgid "No company information found" msgstr "未找到该公司信息" -#: templates/js/translated/company.js:528 +#: templates/js/translated/company.js:587 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:639 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:684 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:697 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:703 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:729 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:803 msgid "All selected manufacturer parts will be deleted" msgstr "" -#: templates/js/translated/company.js:543 +#: templates/js/translated/company.js:818 msgid "Delete Manufacturer Parts" msgstr "删除制造商商品" -#: templates/js/translated/company.js:577 +#: templates/js/translated/company.js:852 msgid "All selected parameters will be deleted" msgstr "" -#: templates/js/translated/company.js:591 +#: templates/js/translated/company.js:866 msgid "Delete Parameters" msgstr "删除参数" -#: templates/js/translated/company.js:632 +#: templates/js/translated/company.js:902 msgid "No manufacturer parts found" msgstr "" -#: templates/js/translated/company.js:652 -#: templates/js/translated/company.js:913 templates/js/translated/part.js:639 -#: templates/js/translated/part.js:993 +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 msgid "Template part" msgstr "" -#: templates/js/translated/company.js:656 -#: templates/js/translated/company.js:917 templates/js/translated/part.js:643 -#: templates/js/translated/part.js:997 +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:784 templates/js/translated/part.js:1116 +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 msgid "No parameters found" msgstr "无指定参数" -#: templates/js/translated/company.js:821 templates/js/translated/part.js:1158 +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 msgid "Edit parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:822 templates/js/translated/part.js:1159 +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 msgid "Delete parameter" msgstr "删除参数" -#: templates/js/translated/company.js:841 templates/js/translated/part.js:1176 +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 msgid "Edit Parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:852 templates/js/translated/part.js:1188 +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 msgid "Delete Parameter" msgstr "删除参数" -#: templates/js/translated/company.js:892 +#: templates/js/translated/company.js:1141 msgid "No supplier parts found" msgstr "未找到供应商商品" -#: templates/js/translated/company.js:1033 +#: templates/js/translated/company.js:1282 msgid "Availability" msgstr "" -#: templates/js/translated/company.js:1061 +#: templates/js/translated/company.js:1313 msgid "Edit supplier part" msgstr "编辑供应商商品" -#: templates/js/translated/company.js:1062 +#: templates/js/translated/company.js:1314 msgid "Delete supplier part" msgstr "删除供应商商品" -#: templates/js/translated/company.js:1117 -#: templates/js/translated/pricing.js:664 +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 msgid "Delete Price Break" msgstr "" -#: templates/js/translated/company.js:1133 -#: templates/js/translated/pricing.js:678 +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 msgid "Edit Price Break" msgstr "" -#: templates/js/translated/company.js:1150 +#: templates/js/translated/company.js:1392 msgid "No price break information found" msgstr "" -#: templates/js/translated/company.js:1179 +#: templates/js/translated/company.js:1421 msgid "Last updated" msgstr "" -#: templates/js/translated/company.js:1185 +#: templates/js/translated/company.js:1428 msgid "Edit price break" msgstr "" -#: templates/js/translated/company.js:1186 +#: templates/js/translated/company.js:1429 msgid "Delete price break" msgstr "" -#: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:445 +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 msgid "true" msgstr "" -#: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:446 +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 msgid "false" msgstr "" -#: templates/js/translated/filters.js:206 +#: templates/js/translated/filters.js:209 msgid "Select filter" msgstr "选择筛选项" -#: templates/js/translated/filters.js:292 -msgid "Download data" +#: templates/js/translated/filters.js:315 +msgid "Print reports for selected items" msgstr "" -#: templates/js/translated/filters.js:295 -msgid "Reload data" +#: templates/js/translated/filters.js:324 +msgid "Print labels for selected items" msgstr "" -#: templates/js/translated/filters.js:299 +#: templates/js/translated/filters.js:333 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 msgid "Add new filter" msgstr "" -#: templates/js/translated/filters.js:302 +#: templates/js/translated/filters.js:357 msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:354 +#: templates/js/translated/filters.js:447 msgid "Create filter" msgstr "" -#: templates/js/translated/forms.js:372 templates/js/translated/forms.js:387 -#: templates/js/translated/forms.js:401 templates/js/translated/forms.js:415 +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 msgid "Action Prohibited" msgstr "" -#: templates/js/translated/forms.js:374 +#: templates/js/translated/forms.js:364 msgid "Create operation not allowed" msgstr "" -#: templates/js/translated/forms.js:389 +#: templates/js/translated/forms.js:379 msgid "Update operation not allowed" msgstr "" -#: templates/js/translated/forms.js:403 +#: templates/js/translated/forms.js:393 msgid "Delete operation not allowed" msgstr "" -#: templates/js/translated/forms.js:417 +#: templates/js/translated/forms.js:407 msgid "View operation not allowed" msgstr "" -#: templates/js/translated/forms.js:733 +#: templates/js/translated/forms.js:728 msgid "Keep this form open" msgstr "" -#: templates/js/translated/forms.js:834 +#: templates/js/translated/forms.js:829 msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1336 templates/modals.html:19 +#: templates/js/translated/forms.js:1340 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1790 +#: templates/js/translated/forms.js:1794 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2006 templates/search.html:29 +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2261 +#: templates/js/translated/forms.js:2215 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:2717 +#: templates/js/translated/forms.js:2671 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:2729 +#: templates/js/translated/forms.js:2683 msgid "Select Columns" msgstr "" -#: templates/js/translated/helpers.js:24 +#: templates/js/translated/helpers.js:38 msgid "YES" msgstr "" -#: templates/js/translated/helpers.js:26 +#: templates/js/translated/helpers.js:41 msgid "NO" msgstr "" -#: templates/js/translated/helpers.js:364 +#: templates/js/translated/helpers.js:466 msgid "Notes updated" msgstr "" -#: templates/js/translated/label.js:39 -msgid "Labels sent to printer" -msgstr "" - -#: templates/js/translated/label.js:60 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1112 -msgid "Select Stock Items" -msgstr "选择库存项" - -#: templates/js/translated/label.js:61 -msgid "Stock item(s) must be selected before printing labels" -msgstr "打印标签前必须选择库存项目" - -#: templates/js/translated/label.js:79 templates/js/translated/label.js:133 -#: templates/js/translated/label.js:191 -msgid "No Labels Found" -msgstr "未找到标签" - -#: templates/js/translated/label.js:80 -msgid "No labels found which match selected stock item(s)" -msgstr "没有找到与选定的库存项匹配的标签" - -#: templates/js/translated/label.js:115 -msgid "Select Stock Locations" -msgstr "选择仓储地点" - -#: templates/js/translated/label.js:116 -msgid "Stock location(s) must be selected before printing labels" -msgstr "打印标签前必须选择仓储地点" - -#: templates/js/translated/label.js:134 -msgid "No labels found which match selected stock location(s)" -msgstr "没有找到匹配选定库存地点的标签" - -#: templates/js/translated/label.js:173 -msgid "Part(s) must be selected before printing labels" -msgstr "打印标签前必须选择商品" - -#: templates/js/translated/label.js:192 -msgid "No labels found which match the selected part(s)" -msgstr "没有找到与所选商品相匹配的标签" - -#: templates/js/translated/label.js:257 +#: templates/js/translated/label.js:55 msgid "Select Printer" msgstr "" -#: templates/js/translated/label.js:261 +#: templates/js/translated/label.js:59 msgid "Export to PDF" msgstr "" -#: templates/js/translated/label.js:300 +#: templates/js/translated/label.js:102 msgid "stock items selected" msgstr "已选择库存项" -#: templates/js/translated/label.js:308 templates/js/translated/label.js:325 +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 msgid "Select Label Template" msgstr "选择标签模板" -#: templates/js/translated/modals.js:52 templates/js/translated/modals.js:149 -#: templates/js/translated/modals.js:633 +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:167 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "未找到标签" + +#: templates/js/translated/label.js:184 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 msgid "Cancel" msgstr "取消" -#: templates/js/translated/modals.js:57 templates/js/translated/modals.js:148 -#: templates/js/translated/modals.js:701 templates/js/translated/modals.js:1009 +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:147 +#: templates/js/translated/modals.js:148 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:428 +#: templates/js/translated/modals.js:429 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:575 +#: templates/js/translated/modals.js:576 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:632 +#: templates/js/translated/modals.js:662 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:690 +#: templates/js/translated/modals.js:720 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:961 +#: templates/js/translated/modals.js:991 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:973 +#: templates/js/translated/modals.js:1003 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1070 +#: templates/js/translated/modals.js:1100 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1085 +#: templates/js/translated/modals.js:1115 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1086 +#: templates/js/translated/modals.js:1116 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1109 +#: templates/js/translated/modals.js:1139 msgid "Error requesting form data" msgstr "" -#: templates/js/translated/model_renderers.js:72 -msgid "Company ID" -msgstr "公司ID" - -#: templates/js/translated/model_renderers.js:133 -msgid "Stock ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:278 -#: templates/js/translated/model_renderers.js:303 -msgid "Order ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:316 -#: templates/js/translated/model_renderers.js:320 -msgid "Shipment ID" -msgstr "" - -#: templates/js/translated/model_renderers.js:381 -msgid "Manufacturer Part ID" -msgstr "制造商商品ID" - #: templates/js/translated/news.js:24 msgid "No news found" msgstr "" @@ -9665,441 +10313,61 @@ msgstr "" msgid "Age" msgstr "" -#: templates/js/translated/notification.js:216 +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 msgid "Mark as unread" msgstr "" -#: templates/js/translated/notification.js:220 +#: templates/js/translated/notification.js:211 msgid "Mark as read" msgstr "" -#: templates/js/translated/notification.js:245 +#: templates/js/translated/notification.js:236 msgid "No unread notifications" msgstr "" -#: templates/js/translated/notification.js:287 templates/notifications.html:10 +#: templates/js/translated/notification.js:278 templates/notifications.html:10 msgid "Notifications will load here" msgstr "" -#: templates/js/translated/order.js:98 -msgid "No stock items have been allocated to this shipment" +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" msgstr "" -#: templates/js/translated/order.js:103 -msgid "The following stock items will be shipped" -msgstr "" - -#: templates/js/translated/order.js:143 -msgid "Complete Shipment" -msgstr "" - -#: templates/js/translated/order.js:163 -msgid "Confirm Shipment" -msgstr "" - -#: templates/js/translated/order.js:219 -msgid "No pending shipments found" -msgstr "" - -#: templates/js/translated/order.js:223 -msgid "No stock items have been allocated to pending shipments" -msgstr "" - -#: templates/js/translated/order.js:255 -msgid "Skip" -msgstr "" - -#: templates/js/translated/order.js:285 -msgid "Complete Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:302 templates/js/translated/order.js:414 -msgid "Mark this order as complete?" -msgstr "" - -#: templates/js/translated/order.js:308 -msgid "All line items have been received" -msgstr "" - -#: templates/js/translated/order.js:313 -msgid "This order has line items which have not been marked as received." -msgstr "" - -#: templates/js/translated/order.js:314 templates/js/translated/order.js:428 -msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:337 -msgid "Cancel Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:342 -msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" - -#: templates/js/translated/order.js:348 -msgid "This purchase order can not be cancelled" -msgstr "" - -#: templates/js/translated/order.js:371 -msgid "Issue Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:376 -msgid "After placing this purchase order, line items will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:427 -msgid "This order has line items which have not been completed." -msgstr "" - -#: templates/js/translated/order.js:451 -msgid "Cancel Sales Order" -msgstr "" - -#: templates/js/translated/order.js:456 -msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" - -#: templates/js/translated/order.js:510 -msgid "Create New Shipment" -msgstr "" - -#: templates/js/translated/order.js:537 -msgid "Add Customer" -msgstr "" - -#: templates/js/translated/order.js:562 -msgid "Create Sales Order" -msgstr "" - -#: templates/js/translated/order.js:641 -msgid "Select purchase order to duplicate" -msgstr "" - -#: templates/js/translated/order.js:648 -msgid "Duplicate Line Items" -msgstr "" - -#: templates/js/translated/order.js:649 -msgid "Duplicate all line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:656 -msgid "Duplicate Extra Lines" -msgstr "" - -#: templates/js/translated/order.js:657 -msgid "Duplicate extra line items from the selected order" -msgstr "" - -#: templates/js/translated/order.js:674 -msgid "Edit Purchase Order" -msgstr "" - -#: templates/js/translated/order.js:691 -msgid "Duplication Options" -msgstr "" - -#: templates/js/translated/order.js:1025 +#: templates/js/translated/order.js:109 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:1076 -msgid "At least one purchaseable part must be selected" -msgstr "" - -#: templates/js/translated/order.js:1101 -msgid "Quantity to order" -msgstr "" - -#: templates/js/translated/order.js:1110 -msgid "New supplier part" -msgstr "" - -#: templates/js/translated/order.js:1128 -msgid "New purchase order" -msgstr "" - -#: templates/js/translated/order.js:1161 -msgid "Add to purchase order" -msgstr "" - -#: templates/js/translated/order.js:1305 -msgid "No matching supplier parts" -msgstr "" - -#: templates/js/translated/order.js:1324 -msgid "No matching purchase orders" -msgstr "" - -#: templates/js/translated/order.js:1501 -msgid "Select Line Items" -msgstr "" - -#: templates/js/translated/order.js:1502 -msgid "At least one line item must be selected" -msgstr "" - -#: templates/js/translated/order.js:1522 templates/js/translated/order.js:1635 -msgid "Add batch code" -msgstr "" - -#: templates/js/translated/order.js:1528 templates/js/translated/order.js:1646 -msgid "Add serial numbers" -msgstr "" - -#: templates/js/translated/order.js:1543 -msgid "Received Quantity" -msgstr "" - -#: templates/js/translated/order.js:1554 -msgid "Quantity to receive" -msgstr "" - -#: templates/js/translated/order.js:1618 templates/js/translated/stock.js:2187 -msgid "Stock Status" -msgstr "" - -#: templates/js/translated/order.js:1711 -msgid "Order Code" -msgstr "订单编码" - -#: templates/js/translated/order.js:1712 -msgid "Ordered" -msgstr "" - -#: templates/js/translated/order.js:1714 -msgid "Quantity to Receive" -msgstr "" - -#: templates/js/translated/order.js:1737 -msgid "Confirm receipt of items" -msgstr "" - -#: templates/js/translated/order.js:1738 -msgid "Receive Purchase Order Items" -msgstr "" - -#: templates/js/translated/order.js:2016 templates/js/translated/part.js:1229 -msgid "No purchase orders found" -msgstr "" - -#: templates/js/translated/order.js:2043 templates/js/translated/order.js:2847 -msgid "Order is overdue" -msgstr "" - -#: templates/js/translated/order.js:2093 templates/js/translated/order.js:2912 -#: templates/js/translated/order.js:3053 -msgid "Items" -msgstr "" - -#: templates/js/translated/order.js:2196 templates/js/translated/order.js:4111 -msgid "Duplicate Line Item" -msgstr "" - -#: templates/js/translated/order.js:2213 templates/js/translated/order.js:4133 -msgid "Edit Line Item" -msgstr "" - -#: templates/js/translated/order.js:2226 templates/js/translated/order.js:4144 -msgid "Delete Line Item" -msgstr "" - -#: templates/js/translated/order.js:2269 -msgid "No line items found" -msgstr "" - -#: templates/js/translated/order.js:2296 templates/js/translated/order.js:3865 -msgid "Total" -msgstr "" - -#: templates/js/translated/order.js:2351 templates/js/translated/part.js:1331 -#: templates/js/translated/part.js:1383 -msgid "Total Quantity" -msgstr "" - -#: templates/js/translated/order.js:2382 templates/js/translated/order.js:2567 -#: templates/js/translated/order.js:3890 templates/js/translated/order.js:4379 -#: templates/js/translated/pricing.js:501 -#: templates/js/translated/pricing.js:570 -#: templates/js/translated/pricing.js:786 -msgid "Unit Price" -msgstr "单价" - -#: templates/js/translated/order.js:2392 templates/js/translated/order.js:2577 -#: templates/js/translated/order.js:3900 templates/js/translated/order.js:4389 -msgid "Total Price" -msgstr "" - -#: templates/js/translated/order.js:2420 templates/js/translated/order.js:3928 -#: templates/js/translated/part.js:1367 -msgid "This line item is overdue" -msgstr "" - -#: templates/js/translated/order.js:2479 templates/js/translated/part.js:1412 -msgid "Receive line item" -msgstr "" - -#: templates/js/translated/order.js:2483 templates/js/translated/order.js:4065 -msgid "Duplicate line item" -msgstr "" - -#: templates/js/translated/order.js:2484 templates/js/translated/order.js:4066 -msgid "Edit line item" -msgstr "" - -#: templates/js/translated/order.js:2485 templates/js/translated/order.js:4070 -msgid "Delete line item" -msgstr "" - -#: templates/js/translated/order.js:2612 templates/js/translated/order.js:4423 -msgid "Duplicate line" -msgstr "" - -#: templates/js/translated/order.js:2613 templates/js/translated/order.js:4424 -msgid "Edit line" -msgstr "" - -#: templates/js/translated/order.js:2614 templates/js/translated/order.js:4425 -msgid "Delete line" -msgstr "" - -#: templates/js/translated/order.js:2644 templates/js/translated/order.js:4454 +#: templates/js/translated/order.js:222 msgid "Duplicate Line" msgstr "" -#: templates/js/translated/order.js:2665 templates/js/translated/order.js:4475 +#: templates/js/translated/order.js:236 msgid "Edit Line" msgstr "" -#: templates/js/translated/order.js:2676 templates/js/translated/order.js:4486 +#: templates/js/translated/order.js:249 msgid "Delete Line" msgstr "" -#: templates/js/translated/order.js:2687 -msgid "No matching line" +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:2798 -msgid "No sales orders found" +#: templates/js/translated/order.js:344 +msgid "Duplicate line" msgstr "" -#: templates/js/translated/order.js:2861 -msgid "Invalid Customer" +#: templates/js/translated/order.js:345 +msgid "Edit line" msgstr "" -#: templates/js/translated/order.js:2959 -msgid "Edit shipment" -msgstr "" - -#: templates/js/translated/order.js:2962 -msgid "Complete shipment" -msgstr "" - -#: templates/js/translated/order.js:2967 -msgid "Delete shipment" -msgstr "" - -#: templates/js/translated/order.js:2987 -msgid "Edit Shipment" -msgstr "" - -#: templates/js/translated/order.js:3004 -msgid "Delete Shipment" -msgstr "" - -#: templates/js/translated/order.js:3038 -msgid "No matching shipments found" -msgstr "" - -#: templates/js/translated/order.js:3048 -msgid "Shipment Reference" -msgstr "" - -#: templates/js/translated/order.js:3072 -msgid "Not shipped" -msgstr "" - -#: templates/js/translated/order.js:3078 -msgid "Tracking" -msgstr "" - -#: templates/js/translated/order.js:3082 -msgid "Invoice" -msgstr "" - -#: templates/js/translated/order.js:3251 -msgid "Add Shipment" -msgstr "" - -#: templates/js/translated/order.js:3302 -msgid "Confirm stock allocation" -msgstr "确认库存分配" - -#: templates/js/translated/order.js:3303 -msgid "Allocate Stock Items to Sales Order" -msgstr "" - -#: templates/js/translated/order.js:3511 -msgid "No sales order allocations found" -msgstr "" - -#: templates/js/translated/order.js:3590 -msgid "Edit Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3607 -msgid "Confirm Delete Operation" -msgstr "确认删除操作" - -#: templates/js/translated/order.js:3608 -msgid "Delete Stock Allocation" -msgstr "" - -#: templates/js/translated/order.js:3653 templates/js/translated/order.js:3742 -#: templates/js/translated/stock.js:1648 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/order.js:3661 templates/js/translated/order.js:3751 -msgid "Stock location not specified" -msgstr "" - -#: templates/js/translated/order.js:4049 -msgid "Allocate serial numbers" -msgstr "" - -#: templates/js/translated/order.js:4055 -msgid "Purchase stock" -msgstr "" - -#: templates/js/translated/order.js:4062 templates/js/translated/order.js:4260 -msgid "Calculate price" -msgstr "" - -#: templates/js/translated/order.js:4074 -msgid "Cannot be deleted as items have been shipped" -msgstr "" - -#: templates/js/translated/order.js:4077 -msgid "Cannot be deleted as items have been allocated" -msgstr "" - -#: templates/js/translated/order.js:4159 -msgid "Allocate Serial Numbers" -msgstr "" - -#: templates/js/translated/order.js:4268 -msgid "Update Unit Price" -msgstr "" - -#: templates/js/translated/order.js:4282 -msgid "No matching line items" -msgstr "" - -#: templates/js/translated/order.js:4497 -msgid "No matching lines" +#: templates/js/translated/order.js:349 +msgid "Delete line" msgstr "" #: templates/js/translated/part.js:56 @@ -10118,302 +10386,311 @@ msgstr "商品重复选项" msgid "Add Part Category" msgstr "增加商品类别" -#: templates/js/translated/part.js:210 -msgid "Copy Category Parameters" -msgstr "复制类别参数" - -#: templates/js/translated/part.js:211 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: templates/js/translated/part.js:250 +#: templates/js/translated/part.js:259 msgid "Parent part category" msgstr "" -#: templates/js/translated/part.js:265 templates/js/translated/stock.js:121 +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 msgid "Icon (optional) - Explore all available icons on" msgstr "" -#: templates/js/translated/part.js:281 +#: templates/js/translated/part.js:291 msgid "Edit Part Category" msgstr "编辑商品类别" -#: templates/js/translated/part.js:294 +#: templates/js/translated/part.js:304 msgid "Are you sure you want to delete this part category?" msgstr "" -#: templates/js/translated/part.js:299 +#: templates/js/translated/part.js:309 msgid "Move to parent category" msgstr "" -#: templates/js/translated/part.js:308 +#: templates/js/translated/part.js:318 msgid "Delete Part Category" msgstr "删除商品类别" -#: templates/js/translated/part.js:312 +#: templates/js/translated/part.js:322 msgid "Action for parts in this category" msgstr "" -#: templates/js/translated/part.js:317 +#: templates/js/translated/part.js:327 msgid "Action for child categories" msgstr "" -#: templates/js/translated/part.js:341 +#: templates/js/translated/part.js:351 msgid "Create Part" msgstr "创建商品" -#: templates/js/translated/part.js:343 +#: templates/js/translated/part.js:353 msgid "Create another part after this one" msgstr "" -#: templates/js/translated/part.js:344 +#: templates/js/translated/part.js:354 msgid "Part created successfully" msgstr "" -#: templates/js/translated/part.js:372 +#: templates/js/translated/part.js:382 msgid "Edit Part" msgstr "编辑商品" -#: templates/js/translated/part.js:374 +#: templates/js/translated/part.js:384 msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:385 +#: templates/js/translated/part.js:395 msgid "Create Part Variant" msgstr "" -#: templates/js/translated/part.js:437 +#: templates/js/translated/part.js:452 msgid "Active Part" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:453 msgid "Part cannot be deleted as it is currently active" msgstr "" -#: templates/js/translated/part.js:452 +#: templates/js/translated/part.js:467 msgid "Deleting this part cannot be reversed" msgstr "" -#: templates/js/translated/part.js:454 +#: templates/js/translated/part.js:469 msgid "Any stock items for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:455 +#: templates/js/translated/part.js:470 msgid "This part will be removed from any Bills of Material" msgstr "" -#: templates/js/translated/part.js:456 +#: templates/js/translated/part.js:471 msgid "All manufacturer and supplier information for this part will be deleted" msgstr "" -#: templates/js/translated/part.js:463 +#: templates/js/translated/part.js:478 msgid "Delete Part" msgstr "" -#: templates/js/translated/part.js:499 +#: templates/js/translated/part.js:514 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:501 +#: templates/js/translated/part.js:516 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:506 +#: templates/js/translated/part.js:521 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:508 +#: templates/js/translated/part.js:523 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:525 +#: templates/js/translated/part.js:540 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:535 +#: templates/js/translated/part.js:550 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:538 +#: templates/js/translated/part.js:553 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:563 +#: templates/js/translated/part.js:578 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:587 templates/js/translated/part.js:1800 -#: templates/js/translated/table_filters.js:496 +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:597 +#: templates/js/translated/part.js:609 msgid "No stock available" msgstr "" -#: templates/js/translated/part.js:631 templates/js/translated/part.js:985 +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 msgid "Trackable part" msgstr "可追溯商品" -#: templates/js/translated/part.js:635 templates/js/translated/part.js:989 +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 msgid "Virtual part" msgstr "虚拟商品" -#: templates/js/translated/part.js:647 +#: templates/js/translated/part.js:727 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:651 +#: templates/js/translated/part.js:731 msgid "Salable part" msgstr "可销售商品" -#: templates/js/translated/part.js:736 -msgid "Stock item has not been checked recently" +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." msgstr "" -#: templates/js/translated/part.js:744 -msgid "Update item" +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." msgstr "" -#: templates/js/translated/part.js:745 -msgid "Delete item" +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" msgstr "" -#: templates/js/translated/part.js:846 +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 msgid "No stocktake information available" msgstr "" -#: templates/js/translated/part.js:885 templates/js/translated/part.js:908 +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 msgid "Edit Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:889 templates/js/translated/part.js:920 +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 msgid "Delete Stocktake Entry" msgstr "" -#: templates/js/translated/part.js:1061 +#: templates/js/translated/part.js:1198 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1482 +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1506 +#: templates/js/translated/part.js:1630 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1573 templates/js/translated/part.js:1911 +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 msgid "No parts found" -msgstr "" +msgstr "找不到部件" -#: templates/js/translated/part.js:1767 +#: templates/js/translated/part.js:1892 msgid "No category" msgstr "没有分类" -#: templates/js/translated/part.js:1798 -msgid "No stock" -msgstr "" - -#: templates/js/translated/part.js:1822 -msgid "Allocated to build orders" -msgstr "" - -#: templates/js/translated/part.js:1826 -msgid "Allocated to sales orders" -msgstr "" - -#: templates/js/translated/part.js:1935 templates/js/translated/part.js:2178 -#: templates/js/translated/stock.js:2390 +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 msgid "Display as list" -msgstr "" +msgstr "以列表显示" -#: templates/js/translated/part.js:1951 +#: templates/js/translated/part.js:2022 msgid "Display as grid" -msgstr "" +msgstr "以网格显示" -#: templates/js/translated/part.js:2017 +#: templates/js/translated/part.js:2088 msgid "Set the part category for the selected parts" msgstr "" -#: templates/js/translated/part.js:2022 +#: templates/js/translated/part.js:2093 msgid "Set Part Category" msgstr "设置商品类别" -#: templates/js/translated/part.js:2027 +#: templates/js/translated/part.js:2098 msgid "Select Part Category" msgstr "" -#: templates/js/translated/part.js:2040 +#: templates/js/translated/part.js:2111 msgid "Category is required" msgstr "" -#: templates/js/translated/part.js:2198 templates/js/translated/stock.js:2410 +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 msgid "Display as tree" -msgstr "" +msgstr "以树形图显示" -#: templates/js/translated/part.js:2278 +#: templates/js/translated/part.js:2324 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2294 +#: templates/js/translated/part.js:2340 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2358 +#: templates/js/translated/part.js:2420 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2409 templates/js/translated/stock.js:1337 +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 msgid "Edit test result" -msgstr "" +msgstr "编辑测试结果" -#: templates/js/translated/part.js:2410 templates/js/translated/stock.js:1338 -#: templates/js/translated/stock.js:1606 +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 msgid "Delete test result" -msgstr "" +msgstr "删除测试结果" -#: templates/js/translated/part.js:2416 +#: templates/js/translated/part.js:2476 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2438 +#: templates/js/translated/part.js:2492 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2452 +#: templates/js/translated/part.js:2506 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:2533 templates/js/translated/part.js:2534 +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 msgid "No date specified" -msgstr "" +msgstr "无指定日期" -#: templates/js/translated/part.js:2536 +#: templates/js/translated/part.js:2588 msgid "Specified date is in the past" -msgstr "" +msgstr "指定的日期已过" -#: templates/js/translated/part.js:2542 +#: templates/js/translated/part.js:2594 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:2592 +#: templates/js/translated/part.js:2644 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:2598 +#: templates/js/translated/part.js:2650 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:2694 +#: templates/js/translated/part.js:2746 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:2710 +#: templates/js/translated/part.js:2762 msgid "Maximum Quantity" -msgstr "" +msgstr "最大数量" -#: templates/js/translated/part.js:2755 +#: templates/js/translated/part.js:2807 msgid "Minimum Stock Level" msgstr "" @@ -10421,835 +10698,1272 @@ msgstr "" msgid "The Plugin was installed" msgstr "" -#: templates/js/translated/pricing.js:143 +#: templates/js/translated/pricing.js:141 msgid "Error fetching currency data" msgstr "" -#: templates/js/translated/pricing.js:295 +#: templates/js/translated/pricing.js:303 msgid "No BOM data available" msgstr "" -#: templates/js/translated/pricing.js:437 +#: templates/js/translated/pricing.js:445 msgid "No supplier pricing data available" msgstr "" -#: templates/js/translated/pricing.js:546 +#: templates/js/translated/pricing.js:554 msgid "No price break data available" msgstr "" -#: templates/js/translated/pricing.js:602 -#, python-brace-format -msgid "Edit ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:603 -#, python-brace-format -msgid "Delete ${human_name}" -msgstr "" - -#: templates/js/translated/pricing.js:721 +#: templates/js/translated/pricing.js:737 msgid "No purchase history data available" msgstr "" -#: templates/js/translated/pricing.js:743 +#: templates/js/translated/pricing.js:759 msgid "Purchase Price History" msgstr "" -#: templates/js/translated/pricing.js:843 +#: templates/js/translated/pricing.js:859 msgid "No sales history data available" msgstr "" -#: templates/js/translated/pricing.js:865 +#: templates/js/translated/pricing.js:881 msgid "Sale Price History" msgstr "" -#: templates/js/translated/pricing.js:954 +#: templates/js/translated/pricing.js:970 msgid "No variant data available" msgstr "" -#: templates/js/translated/pricing.js:994 +#: templates/js/translated/pricing.js:1010 msgid "Variant Part" msgstr "" -#: templates/js/translated/report.js:67 +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1125 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1128 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "订单编码" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1761 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 msgid "items selected" msgstr "" -#: templates/js/translated/report.js:75 +#: templates/js/translated/report.js:71 msgid "Select Report Template" msgstr "" -#: templates/js/translated/report.js:90 +#: templates/js/translated/report.js:86 msgid "Select Test Report Template" msgstr "" -#: templates/js/translated/report.js:119 -msgid "Stock item(s) must be selected before printing reports" -msgstr "在打印报表之前必须选择库存项目" - -#: templates/js/translated/report.js:136 templates/js/translated/report.js:189 -#: templates/js/translated/report.js:243 templates/js/translated/report.js:297 -#: templates/js/translated/report.js:351 +#: templates/js/translated/report.js:140 msgid "No Reports Found" msgstr "没有找到报表" -#: templates/js/translated/report.js:137 -msgid "No report templates found which match selected stock item(s)" +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" msgstr "" -#: templates/js/translated/report.js:172 -msgid "Select Builds" +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" msgstr "" -#: templates/js/translated/report.js:173 -msgid "Build(s) must be selected before printing reports" -msgstr "打印报表前必须选择Build(s)" - -#: templates/js/translated/report.js:190 -msgid "No report templates found which match selected build(s)" +#: templates/js/translated/return_order.js:89 +msgid "Create Return Order" msgstr "" -#: templates/js/translated/report.js:226 -msgid "Part(s) must be selected before printing reports" -msgstr "打印报表前必须选择商品" - -#: templates/js/translated/report.js:244 -msgid "No report templates found which match selected part(s)" +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" msgstr "" -#: templates/js/translated/report.js:279 -msgid "Select Purchase Orders" +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" msgstr "" -#: templates/js/translated/report.js:280 -msgid "Purchase Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:141 +msgid "Are you sure you wish to cancel this Return Order?" msgstr "" -#: templates/js/translated/report.js:298 templates/js/translated/report.js:352 -msgid "No report templates found which match selected orders" +#: templates/js/translated/return_order.js:148 +msgid "Cancel Return Order" msgstr "" -#: templates/js/translated/report.js:333 -msgid "Select Sales Orders" +#: templates/js/translated/return_order.js:173 +msgid "Complete Return Order" msgstr "" -#: templates/js/translated/report.js:334 -msgid "Sales Order(s) must be selected before printing report" +#: templates/js/translated/return_order.js:221 +msgid "No return orders found" msgstr "" -#: templates/js/translated/search.js:410 +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "" + +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:475 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "确认库存分配" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "确认删除操作" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 msgid "Minimize results" msgstr "" -#: templates/js/translated/search.js:413 +#: templates/js/translated/search.js:385 msgid "Remove results" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:71 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:104 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:113 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:147 +#: templates/js/translated/stock.js:146 msgid "Edit Stock Location" msgstr "编辑仓储地点" -#: templates/js/translated/stock.js:162 +#: templates/js/translated/stock.js:161 msgid "New Stock Location" -msgstr "" +msgstr "新仓储地点" -#: templates/js/translated/stock.js:176 +#: templates/js/translated/stock.js:175 msgid "Are you sure you want to delete this stock location?" msgstr "确实要删除此仓储地点吗?" -#: templates/js/translated/stock.js:183 +#: templates/js/translated/stock.js:182 msgid "Move to parent stock location" msgstr "" -#: templates/js/translated/stock.js:192 +#: templates/js/translated/stock.js:191 msgid "Delete Stock Location" msgstr "删除仓储地点" -#: templates/js/translated/stock.js:196 +#: templates/js/translated/stock.js:195 msgid "Action for stock items in this stock location" msgstr "" -#: templates/js/translated/stock.js:201 +#: templates/js/translated/stock.js:200 msgid "Action for sub-locations" msgstr "" -#: templates/js/translated/stock.js:255 +#: templates/js/translated/stock.js:254 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:297 +#: templates/js/translated/stock.js:296 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:303 +#: templates/js/translated/stock.js:302 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:368 +#: templates/js/translated/stock.js:373 msgid "Stock item duplicated" -msgstr "" +msgstr "库存项重复" -#: templates/js/translated/stock.js:388 +#: templates/js/translated/stock.js:393 msgid "Duplicate Stock Item" -msgstr "" - -#: templates/js/translated/stock.js:404 -msgid "Are you sure you want to delete this stock item?" -msgstr "" +msgstr "复制库存项" #: templates/js/translated/stock.js:409 +msgid "Are you sure you want to delete this stock item?" +msgstr "确定要删除此库存项吗?" + +#: templates/js/translated/stock.js:414 msgid "Delete Stock Item" -msgstr "" +msgstr "删除库存项" -#: templates/js/translated/stock.js:430 +#: templates/js/translated/stock.js:435 msgid "Edit Stock Item" -msgstr "" +msgstr "编辑库存项" -#: templates/js/translated/stock.js:480 +#: templates/js/translated/stock.js:485 msgid "Created new stock item" -msgstr "" +msgstr "新建库存项" -#: templates/js/translated/stock.js:493 +#: templates/js/translated/stock.js:498 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:523 msgid "Find Serial Number" -msgstr "" +msgstr "查找序列号" -#: templates/js/translated/stock.js:522 templates/js/translated/stock.js:523 +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 msgid "Enter serial number" -msgstr "" +msgstr "输入序列号" -#: templates/js/translated/stock.js:539 +#: templates/js/translated/stock.js:544 msgid "Enter a serial number" -msgstr "" +msgstr "输入序列号" -#: templates/js/translated/stock.js:559 +#: templates/js/translated/stock.js:564 msgid "No matching serial number" -msgstr "" +msgstr "没有匹配的序列号" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:573 msgid "More than one matching result found" -msgstr "" +msgstr "找到多个匹配结果" -#: templates/js/translated/stock.js:691 +#: templates/js/translated/stock.js:697 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:692 +#: templates/js/translated/stock.js:698 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:769 +#: templates/js/translated/stock.js:775 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:770 +#: templates/js/translated/stock.js:776 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:772 +#: templates/js/translated/stock.js:778 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:773 +#: templates/js/translated/stock.js:779 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:862 +#: templates/js/translated/stock.js:870 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:863 +#: templates/js/translated/stock.js:871 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:958 +#: templates/js/translated/stock.js:966 msgid "Transfer Stock" -msgstr "" +msgstr "转移库存" -#: templates/js/translated/stock.js:959 +#: templates/js/translated/stock.js:967 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:965 +#: templates/js/translated/stock.js:973 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:966 +#: templates/js/translated/stock.js:974 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:970 +#: templates/js/translated/stock.js:978 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:971 +#: templates/js/translated/stock.js:979 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:975 +#: templates/js/translated/stock.js:983 msgid "Add Stock" -msgstr "" +msgstr "添加库存" -#: templates/js/translated/stock.js:976 users/models.py:221 +#: templates/js/translated/stock.js:984 users/models.py:239 msgid "Add" msgstr "添加" -#: templates/js/translated/stock.js:980 +#: templates/js/translated/stock.js:988 msgid "Delete Stock" -msgstr "" +msgstr "删除库存" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1073 +#: templates/js/translated/stock.js:1085 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1113 +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "选择库存项" + +#: templates/js/translated/stock.js:1120 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1140 +#: templates/js/translated/stock.js:1147 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1276 +#: templates/js/translated/stock.js:1283 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1278 +#: templates/js/translated/stock.js:1285 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1283 +#: templates/js/translated/stock.js:1290 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1330 +#: templates/js/translated/stock.js:1352 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:1355 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1359 +#: templates/js/translated/stock.js:1379 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1423 +#: templates/js/translated/stock.js:1443 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1589 +#: templates/js/translated/stock.js:1605 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1611 +#: templates/js/translated/stock.js:1627 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1656 msgid "In production" msgstr "正在生产" -#: templates/js/translated/stock.js:1644 +#: templates/js/translated/stock.js:1660 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1652 +#: templates/js/translated/stock.js:1668 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1658 +#: templates/js/translated/stock.js:1674 msgid "No stock location set" msgstr "未设置仓储地点" -#: templates/js/translated/stock.js:1823 +#: templates/js/translated/stock.js:1824 msgid "Stock item is in production" msgstr "库存品正在生产" -#: templates/js/translated/stock.js:1828 +#: templates/js/translated/stock.js:1829 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1831 +#: templates/js/translated/stock.js:1832 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1834 +#: templates/js/translated/stock.js:1835 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1836 +#: templates/js/translated/stock.js:1837 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1838 +#: templates/js/translated/stock.js:1839 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1841 +#: templates/js/translated/stock.js:1842 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1845 +#: templates/js/translated/stock.js:1846 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1847 +#: templates/js/translated/stock.js:1848 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1854 +#: templates/js/translated/stock.js:1855 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1856 +#: templates/js/translated/stock.js:1857 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1858 +#: templates/js/translated/stock.js:1859 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1862 -#: templates/js/translated/table_filters.js:216 +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1992 +#: templates/js/translated/stock.js:2005 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2029 +#: templates/js/translated/stock.js:2052 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2140 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:2202 +#: templates/js/translated/stock.js:2288 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2216 +#: templates/js/translated/stock.js:2302 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2217 +#: templates/js/translated/stock.js:2303 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2449 +#: templates/js/translated/stock.js:2531 msgid "Load Subloactions" msgstr "" -#: templates/js/translated/stock.js:2544 +#: templates/js/translated/stock.js:2638 msgid "Details" msgstr "详情" -#: templates/js/translated/stock.js:2560 +#: templates/js/translated/stock.js:2654 msgid "Part information unavailable" msgstr "" -#: templates/js/translated/stock.js:2582 +#: templates/js/translated/stock.js:2676 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2601 +#: templates/js/translated/stock.js:2695 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2620 +#: templates/js/translated/stock.js:2712 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2638 +#: templates/js/translated/stock.js:2766 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2661 +#: templates/js/translated/stock.js:2784 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2669 +#: templates/js/translated/stock.js:2792 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2745 +#: templates/js/translated/stock.js:2868 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2796 templates/js/translated/stock.js:2832 +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 msgid "Uninstall Stock Item" msgstr "" -#: templates/js/translated/stock.js:2848 +#: templates/js/translated/stock.js:2971 msgid "Select stock item to uninstall" msgstr "" -#: templates/js/translated/stock.js:2869 +#: templates/js/translated/stock.js:2992 msgid "Install another stock item into this item" msgstr "" -#: templates/js/translated/stock.js:2870 +#: templates/js/translated/stock.js:2993 msgid "Stock items can only be installed if they meet the following criteria" msgstr "" -#: templates/js/translated/stock.js:2872 +#: templates/js/translated/stock.js:2995 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" msgstr "" -#: templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:2996 msgid "The Stock Item is currently available in stock" msgstr "" -#: templates/js/translated/stock.js:2874 +#: templates/js/translated/stock.js:2997 msgid "The Stock Item is not already installed in another item" msgstr "" -#: templates/js/translated/stock.js:2875 +#: templates/js/translated/stock.js:2998 msgid "The Stock Item is tracked by either a batch code or serial number" msgstr "" -#: templates/js/translated/stock.js:2888 +#: templates/js/translated/stock.js:3011 msgid "Select part to install" msgstr "" -#: templates/js/translated/table_filters.js:56 -msgid "Trackable Part" -msgstr "可追溯商品" - -#: templates/js/translated/table_filters.js:60 -msgid "Assembled Part" -msgstr "" - -#: templates/js/translated/table_filters.js:64 -msgid "Has Available Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:72 -msgid "Validated" -msgstr "" - -#: templates/js/translated/table_filters.js:80 -msgid "Allow Variant Stock" -msgstr "" - -#: templates/js/translated/table_filters.js:92 -#: templates/js/translated/table_filters.js:528 -msgid "Has Pricing" -msgstr "" - -#: templates/js/translated/table_filters.js:130 -#: templates/js/translated/table_filters.js:211 -msgid "Include sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:131 -msgid "Include locations" -msgstr "" - -#: templates/js/translated/table_filters.js:145 -#: templates/js/translated/table_filters.js:146 +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 #: templates/js/translated/table_filters.js:465 -msgid "Include subcategories" -msgstr "" - -#: templates/js/translated/table_filters.js:154 -#: templates/js/translated/table_filters.js:508 -msgid "Subscribed" -msgstr "" - -#: templates/js/translated/table_filters.js:164 -#: templates/js/translated/table_filters.js:246 -msgid "Is Serialized" -msgstr "" - -#: templates/js/translated/table_filters.js:167 -#: templates/js/translated/table_filters.js:253 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:254 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:171 -#: templates/js/translated/table_filters.js:257 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/translated/table_filters.js:172 -#: templates/js/translated/table_filters.js:258 -msgid "Serial number less than or equal to" -msgstr "" - -#: templates/js/translated/table_filters.js:175 -#: templates/js/translated/table_filters.js:176 -#: templates/js/translated/table_filters.js:249 -#: templates/js/translated/table_filters.js:250 -msgid "Serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:180 -#: templates/js/translated/table_filters.js:271 -msgid "Batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:191 -#: templates/js/translated/table_filters.js:437 -msgid "Active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:192 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/translated/table_filters.js:197 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/translated/table_filters.js:201 -msgid "Is allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:202 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/translated/table_filters.js:207 -msgid "Stock is available for use" -msgstr "" - -#: templates/js/translated/table_filters.js:212 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/translated/table_filters.js:217 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/translated/table_filters.js:222 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:226 -msgid "In Production" -msgstr "正在生产" - -#: templates/js/translated/table_filters.js:227 -msgid "Show items which are in production" -msgstr "显示正在生产的项目" - -#: templates/js/translated/table_filters.js:231 -msgid "Include Variants" -msgstr "" - -#: templates/js/translated/table_filters.js:232 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/translated/table_filters.js:236 -msgid "Installed" -msgstr "" - -#: templates/js/translated/table_filters.js:237 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/translated/table_filters.js:242 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/translated/table_filters.js:262 -#: templates/js/translated/table_filters.js:263 -msgid "Stock status" -msgstr "" - -#: templates/js/translated/table_filters.js:266 -msgid "Has batch code" -msgstr "" - -#: templates/js/translated/table_filters.js:274 -msgid "Tracked" -msgstr "" - -#: templates/js/translated/table_filters.js:275 -msgid "Stock item is tracked by either batch code or serial number" -msgstr "" - -#: templates/js/translated/table_filters.js:280 -msgid "Has purchase price" -msgstr "" - -#: templates/js/translated/table_filters.js:281 -msgid "Show stock items which have a purchase price set" -msgstr "" - -#: templates/js/translated/table_filters.js:285 -msgid "Expiry Date before" -msgstr "" - -#: templates/js/translated/table_filters.js:289 -msgid "Expiry Date after" -msgstr "" - -#: templates/js/translated/table_filters.js:298 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/translated/table_filters.js:304 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/translated/table_filters.js:316 -msgid "Test Passed" -msgstr "" - -#: templates/js/translated/table_filters.js:320 -msgid "Include Installed Items" -msgstr "" - -#: templates/js/translated/table_filters.js:339 -msgid "Build status" -msgstr "生产状态" - -#: templates/js/translated/table_filters.js:352 -#: templates/js/translated/table_filters.js:393 -msgid "Assigned to me" -msgstr "" - -#: templates/js/translated/table_filters.js:369 -#: templates/js/translated/table_filters.js:380 -#: templates/js/translated/table_filters.js:410 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:385 -#: templates/js/translated/table_filters.js:402 -#: templates/js/translated/table_filters.js:415 +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:466 +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "可追溯商品" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "正在生产" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "显示正在生产的项目" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "生产状态" + +#: templates/js/translated/table_filters.js:525 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:471 +#: templates/js/translated/table_filters.js:530 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:479 +#: templates/js/translated/table_filters.js:538 msgid "Available stock" msgstr "" -#: templates/js/translated/table_filters.js:487 +#: templates/js/translated/table_filters.js:546 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:488 +#: templates/js/translated/table_filters.js:547 msgid "Part has internal part number" msgstr "商品有内部编号" -#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:551 msgid "In stock" msgstr "" -#: templates/js/translated/table_filters.js:500 +#: templates/js/translated/table_filters.js:559 msgid "Purchasable" msgstr "" -#: templates/js/translated/table_filters.js:512 +#: templates/js/translated/table_filters.js:571 msgid "Has stocktake entries" msgstr "" -#: templates/js/translated/tables.js:70 +#: templates/js/translated/tables.js:86 msgid "Display calendar view" msgstr "显示日历" -#: templates/js/translated/tables.js:80 +#: templates/js/translated/tables.js:96 msgid "Display list view" msgstr "列表视图" -#: templates/js/translated/tables.js:90 +#: templates/js/translated/tables.js:106 msgid "Display tree view" msgstr "" -#: templates/js/translated/tables.js:142 +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 msgid "Export Table Data" msgstr "" -#: templates/js/translated/tables.js:146 +#: templates/js/translated/tables.js:184 msgid "Select File Format" msgstr "" -#: templates/js/translated/tables.js:501 +#: templates/js/translated/tables.js:549 msgid "Loading data" msgstr "" -#: templates/js/translated/tables.js:504 +#: templates/js/translated/tables.js:552 msgid "rows per page" msgstr "" -#: templates/js/translated/tables.js:509 +#: templates/js/translated/tables.js:557 msgid "Showing all rows" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "Showing" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "to" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "of" msgstr "" -#: templates/js/translated/tables.js:511 +#: templates/js/translated/tables.js:559 msgid "rows" msgstr "" -#: templates/js/translated/tables.js:515 templates/navbar.html:102 -#: templates/search.html:8 templates/search_form.html:6 -#: templates/search_form.html:7 -msgid "Search" -msgstr "搜索" - -#: templates/js/translated/tables.js:518 +#: templates/js/translated/tables.js:566 msgid "No matching results" msgstr "" -#: templates/js/translated/tables.js:521 +#: templates/js/translated/tables.js:569 msgid "Hide/Show pagination" msgstr "" -#: templates/js/translated/tables.js:527 +#: templates/js/translated/tables.js:575 msgid "Toggle" msgstr "" -#: templates/js/translated/tables.js:530 +#: templates/js/translated/tables.js:578 msgid "Columns" msgstr "" -#: templates/js/translated/tables.js:533 +#: templates/js/translated/tables.js:581 msgid "All" msgstr "" @@ -11261,19 +11975,19 @@ msgstr "采购" msgid "Sell" msgstr "销售" -#: templates/navbar.html:116 +#: templates/navbar.html:121 msgid "Show Notifications" msgstr "" -#: templates/navbar.html:119 +#: templates/navbar.html:124 msgid "New Notifications" msgstr "" -#: templates/navbar.html:137 users/models.py:36 +#: templates/navbar.html:142 users/models.py:36 msgid "Admin" msgstr "管理员" -#: templates/navbar.html:140 +#: templates/navbar.html:145 msgid "Logout" msgstr "" @@ -11285,10 +11999,6 @@ msgstr "" msgid "Show all notifications and history" msgstr "" -#: templates/price_data.html:7 -msgid "No data" -msgstr "" - #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -11309,18 +12019,10 @@ msgstr "" msgid "Clear search" msgstr "" -#: templates/search.html:16 -msgid "Filter results" -msgstr "" - -#: templates/search.html:20 +#: templates/search.html:15 msgid "Close search menu" msgstr "" -#: templates/search.html:35 -msgid "No search results" -msgstr "" - #: templates/socialaccount/authentication_error.html:5 msgid "Social Network Login Failure" msgstr "" @@ -11367,10 +12069,6 @@ msgid "You are about to use your %(provider_name)s account to login to\n" "%(site_name)s.
As a final step, please complete the following form:" msgstr "" -#: templates/stats.html:9 -msgid "Server" -msgstr "" - #: templates/stats.html:13 msgid "Instance Name" msgstr "" @@ -11435,55 +12133,51 @@ msgstr "电子邮件设置未配置" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:33 -msgid "Print test reports" -msgstr "打印测试报表" - -#: templates/stock_table.html:40 +#: templates/stock_table.html:28 msgid "Stock Options" msgstr "" -#: templates/stock_table.html:45 +#: templates/stock_table.html:33 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:46 +#: templates/stock_table.html:34 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:47 +#: templates/stock_table.html:35 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:48 +#: templates/stock_table.html:36 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge selected stock items" msgstr "" -#: templates/stock_table.html:49 +#: templates/stock_table.html:37 msgid "Merge stock" msgstr "" -#: templates/stock_table.html:50 +#: templates/stock_table.html:38 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change status" msgstr "" -#: templates/stock_table.html:52 +#: templates/stock_table.html:40 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:43 msgid "Delete stock" msgstr "" @@ -11503,51 +12197,51 @@ msgstr "用户" msgid "Select which users are assigned to this group" msgstr "选择分配给该组的用户" -#: users/admin.py:191 +#: users/admin.py:199 msgid "The following users are members of multiple groups:" msgstr "以下用户是多个群组的成员:" -#: users/admin.py:214 +#: users/admin.py:222 msgid "Personal info" msgstr "个人资料" -#: users/admin.py:215 +#: users/admin.py:223 msgid "Permissions" msgstr "权限" -#: users/admin.py:218 +#: users/admin.py:226 msgid "Important dates" msgstr "重要日期" -#: users/models.py:208 +#: users/models.py:226 msgid "Permission set" msgstr "权限设置" -#: users/models.py:216 +#: users/models.py:234 msgid "Group" msgstr "群组" -#: users/models.py:219 +#: users/models.py:237 msgid "View" msgstr "视图" -#: users/models.py:219 +#: users/models.py:237 msgid "Permission to view items" msgstr "查看项目权限" -#: users/models.py:221 +#: users/models.py:239 msgid "Permission to add items" msgstr "添加项目权限" -#: users/models.py:223 +#: users/models.py:241 msgid "Change" msgstr "更改" -#: users/models.py:223 +#: users/models.py:241 msgid "Permissions to edit items" msgstr "编辑项目权限" -#: users/models.py:225 +#: users/models.py:243 msgid "Permission to delete items" msgstr "删除项目权限" diff --git a/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 0000000000..78c362e282 --- /dev/null +++ b/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,12482 @@ +msgid "" +msgstr "" +"Project-Id-Version: inventree\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-17 14:52+0000\n" +"PO-Revision-Date: 2023-02-28 22:38\n" +"Last-Translator: \n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: inventree\n" +"X-Crowdin-Project-ID: 452300\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 154\n" + +#: InvenTree/api.py:65 +msgid "API endpoint not found" +msgstr "未找到 API 端点" + +#: InvenTree/api.py:299 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/exceptions.py:94 +msgid "Error details can be found in the admin panel" +msgstr "在管理面板中可以找到错误详细信息" + +#: InvenTree/fields.py:129 +msgid "Enter date" +msgstr "输入日期" + +#: InvenTree/fields.py:204 build/serializers.py:392 +#: build/templates/build/sidebar.html:21 company/models.py:554 +#: company/templates/company/sidebar.html:35 order/models.py:1058 +#: order/templates/order/po_sidebar.html:11 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:41 +#: part/models.py:2989 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:121 stock/models.py:2127 stock/models.py:2235 +#: stock/serializers.py:317 stock/serializers.py:450 stock/serializers.py:531 +#: stock/serializers.py:810 stock/serializers.py:909 stock/serializers.py:1041 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:130 templates/js/translated/bom.js:1220 +#: templates/js/translated/company.js:1272 templates/js/translated/order.js:322 +#: templates/js/translated/part.js:997 +#: templates/js/translated/purchase_order.js:2105 +#: templates/js/translated/return_order.js:718 +#: templates/js/translated/sales_order.js:963 +#: templates/js/translated/sales_order.js:1871 +#: templates/js/translated/stock.js:1439 templates/js/translated/stock.js:2134 +msgid "Notes" +msgstr "备注" + +#: InvenTree/format.py:152 +#, python-brace-format +msgid "Value '{name}' does not appear in pattern format" +msgstr "值 '{name}' 没有以模式格式显示" + +#: InvenTree/format.py:162 +msgid "Provided value does not match required pattern: " +msgstr "提供的值与所需模式不匹配: " + +#: InvenTree/forms.py:145 +msgid "Enter password" +msgstr "输入密码" + +#: InvenTree/forms.py:146 +msgid "Enter new password" +msgstr "输入新密码" + +#: InvenTree/forms.py:155 +msgid "Confirm password" +msgstr "确认密码" + +#: InvenTree/forms.py:156 +msgid "Confirm new password" +msgstr "确认新密码" + +#: InvenTree/forms.py:160 +msgid "Old password" +msgstr "旧密码" + +#: InvenTree/forms.py:179 +msgid "Email (again)" +msgstr "Email (再次)" + +#: InvenTree/forms.py:183 +msgid "Email address confirmation" +msgstr "Email 地址确认" + +#: InvenTree/forms.py:204 +msgid "You must type the same email each time." +msgstr "您必须输入相同的 Email 。" + +#: InvenTree/forms.py:230 InvenTree/forms.py:236 +msgid "The provided primary email address is not valid." +msgstr "所提供的主要电子邮件地址无效。" + +#: InvenTree/forms.py:242 +msgid "The provided email domain is not approved." +msgstr "提供的电子邮件域未被核准。" + +#: InvenTree/helpers.py:168 +msgid "Connection error" +msgstr "连接错误" + +#: InvenTree/helpers.py:172 InvenTree/helpers.py:177 +msgid "Server responded with invalid status code" +msgstr "服务器响应状态码无效" + +#: InvenTree/helpers.py:174 +msgid "Exception occurred" +msgstr "发生异常" + +#: InvenTree/helpers.py:182 +msgid "Server responded with invalid Content-Length value" +msgstr "服务器响应的内容长度值无效" + +#: InvenTree/helpers.py:185 +msgid "Image size is too large" +msgstr "图片尺寸过大" + +#: InvenTree/helpers.py:197 +msgid "Image download exceeded maximum size" +msgstr "图像下载超过最大尺寸" + +#: InvenTree/helpers.py:202 +msgid "Remote server returned empty response" +msgstr "远程服务器返回了空响应" + +#: InvenTree/helpers.py:210 +msgid "Supplied URL is not a valid image file" +msgstr "提供的 URL 不是一个有效的图片文件" + +#: InvenTree/helpers.py:602 order/models.py:410 order/models.py:571 +msgid "Invalid quantity provided" +msgstr "提供的数量无效" + +#: InvenTree/helpers.py:610 +msgid "Empty serial number string" +msgstr "空序列号字符串" + +#: InvenTree/helpers.py:640 +msgid "Duplicate serial" +msgstr "重复的序列号" + +#: InvenTree/helpers.py:673 InvenTree/helpers.py:708 +#, python-brace-format +msgid "Invalid group range: {g}" +msgstr "无效的组范围: {g}" + +#: InvenTree/helpers.py:702 +#, python-brace-format +msgid "Group range {g} exceeds allowed quantity ({q})" +msgstr "组 {g} 超出了允许的数量 ({q})" + +#: InvenTree/helpers.py:726 InvenTree/helpers.py:733 InvenTree/helpers.py:748 +#, python-brace-format +msgid "Invalid group sequence: {g}" +msgstr "无效的组序列: {g}" + +#: InvenTree/helpers.py:758 +msgid "No serial numbers found" +msgstr "未找到序列号" + +#: InvenTree/helpers.py:761 +#, python-brace-format +msgid "Number of unique serial numbers ({s}) must match quantity ({q})" +msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})" + +#: InvenTree/helpers.py:960 +msgid "Remove HTML tags from this value" +msgstr "从这个值中删除 HTML 标签" + +#: InvenTree/models.py:243 +msgid "Improperly formatted pattern" +msgstr "格式不正确" + +#: InvenTree/models.py:250 +msgid "Unknown format key specified" +msgstr "指定了未知格式密钥" + +#: InvenTree/models.py:256 +msgid "Missing required format key" +msgstr "缺少必需的格式密钥" + +#: InvenTree/models.py:268 +msgid "Reference field cannot be empty" +msgstr "引用字段不能为空" + +#: InvenTree/models.py:275 +msgid "Reference must match required pattern" +msgstr "引用必须匹配所需的图案" + +#: InvenTree/models.py:306 +msgid "Reference number is too large" +msgstr "参考编号过大" + +#: InvenTree/models.py:388 +msgid "Missing file" +msgstr "缺少文件" + +#: InvenTree/models.py:389 +msgid "Missing external link" +msgstr "缺少外部链接" + +#: InvenTree/models.py:409 stock/models.py:2229 +#: templates/js/translated/attachment.js:109 +#: templates/js/translated/attachment.js:296 +msgid "Attachment" +msgstr "附件" + +#: InvenTree/models.py:410 +msgid "Select file to attach" +msgstr "选择附件" + +#: InvenTree/models.py:416 common/models.py:2621 company/models.py:129 +#: company/models.py:305 company/models.py:541 order/models.py:202 +#: order/models.py:1062 order/models.py:1412 part/admin.py:39 +#: part/models.py:892 part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:120 templates/js/translated/company.js:962 +#: templates/js/translated/company.js:1261 templates/js/translated/order.js:326 +#: templates/js/translated/part.js:1932 +#: templates/js/translated/purchase_order.js:1945 +#: templates/js/translated/purchase_order.js:2109 +#: templates/js/translated/return_order.js:722 +#: templates/js/translated/sales_order.js:952 +#: templates/js/translated/sales_order.js:1876 +msgid "Link" +msgstr "链接" + +#: InvenTree/models.py:417 build/models.py:293 part/models.py:893 +#: stock/models.py:728 +msgid "Link to external URL" +msgstr "链接到外部 URL" + +#: InvenTree/models.py:420 templates/js/translated/attachment.js:110 +#: templates/js/translated/attachment.js:311 +msgid "Comment" +msgstr "注释" + +#: InvenTree/models.py:420 +msgid "File comment" +msgstr "文件注释" + +#: InvenTree/models.py:426 InvenTree/models.py:427 common/models.py:2070 +#: common/models.py:2071 common/models.py:2294 common/models.py:2295 +#: common/models.py:2551 common/models.py:2552 part/models.py:2997 +#: part/models.py:3085 part/models.py:3164 part/models.py:3184 +#: plugin/models.py:270 plugin/models.py:271 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:2815 +msgid "User" +msgstr "用户" + +#: InvenTree/models.py:430 +msgid "upload date" +msgstr "上传日期" + +#: InvenTree/models.py:452 +msgid "Filename must not be empty" +msgstr "文件名不能为空!" + +#: InvenTree/models.py:461 +msgid "Invalid attachment directory" +msgstr "非法的附件目录" + +#: InvenTree/models.py:471 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "文件名包含非法字符 '{c}'" + +#: InvenTree/models.py:474 +msgid "Filename missing extension" +msgstr "缺少文件名扩展" + +#: InvenTree/models.py:481 +msgid "Attachment with this filename already exists" +msgstr "使用此文件名的附件已存在" + +#: InvenTree/models.py:488 +msgid "Error renaming file" +msgstr "重命名文件出错" + +#: InvenTree/models.py:527 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:546 +msgid "Invalid choice" +msgstr "选择无效" + +#: InvenTree/models.py:571 InvenTree/models.py:572 common/models.py:2280 +#: company/models.py:387 label/models.py:102 part/models.py:838 +#: part/models.py:3332 plugin/models.py:94 report/models.py:158 +#: templates/InvenTree/settings/mixins/urls.html:13 +#: templates/InvenTree/settings/notifications.html:17 +#: templates/InvenTree/settings/plugin.html:60 +#: templates/InvenTree/settings/plugin.html:104 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings_staff_js.html:250 +#: templates/js/translated/company.js:643 +#: templates/js/translated/company.js:691 +#: templates/js/translated/company.js:856 +#: templates/js/translated/company.js:1056 templates/js/translated/part.js:1103 +#: templates/js/translated/part.js:1259 templates/js/translated/part.js:2312 +#: templates/js/translated/stock.js:2519 +msgid "Name" +msgstr "名称" + +#: InvenTree/models.py:578 build/models.py:166 +#: build/templates/build/detail.html:24 company/models.py:311 +#: company/models.py:547 company/templates/company/company_base.html:72 +#: company/templates/company/manufacturer_part.html:75 +#: company/templates/company/supplier_part.html:108 label/models.py:109 +#: order/models.py:200 part/admin.py:194 part/admin.py:276 part/models.py:860 +#: part/models.py:3341 part/templates/part/category.html:81 +#: part/templates/part/part_base.html:172 +#: part/templates/part/part_scheduling.html:12 report/models.py:171 +#: report/models.py:578 report/models.py:622 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:41 stock/templates/stock/location.html:123 +#: templates/InvenTree/settings/notifications.html:19 +#: templates/InvenTree/settings/plugin_settings.html:28 +#: templates/InvenTree/settings/settings_staff_js.html:261 +#: templates/js/translated/bom.js:602 templates/js/translated/bom.js:903 +#: templates/js/translated/build.js:2604 templates/js/translated/company.js:496 +#: templates/js/translated/company.js:973 +#: templates/js/translated/company.js:1236 templates/js/translated/part.js:1155 +#: templates/js/translated/part.js:1597 templates/js/translated/part.js:1869 +#: templates/js/translated/part.js:2348 templates/js/translated/part.js:2439 +#: templates/js/translated/purchase_order.js:1615 +#: templates/js/translated/purchase_order.js:1749 +#: templates/js/translated/purchase_order.js:1927 +#: templates/js/translated/return_order.js:272 +#: templates/js/translated/sales_order.js:740 +#: templates/js/translated/stock.js:1418 templates/js/translated/stock.js:1791 +#: templates/js/translated/stock.js:2551 templates/js/translated/stock.js:2623 +msgid "Description" +msgstr "描述信息" + +#: InvenTree/models.py:579 +msgid "Description (optional)" +msgstr "描述 (可选)" + +#: InvenTree/models.py:587 +msgid "parent" +msgstr "上级项" + +#: InvenTree/models.py:594 InvenTree/models.py:595 +#: templates/js/translated/part.js:2357 templates/js/translated/stock.js:2560 +msgid "Path" +msgstr "路径" + +#: InvenTree/models.py:696 +msgid "Barcode Data" +msgstr "条码数据" + +#: InvenTree/models.py:697 +msgid "Third party barcode data" +msgstr "第三方条形码数据" + +#: InvenTree/models.py:702 +msgid "Barcode Hash" +msgstr "条码哈希" + +#: InvenTree/models.py:703 +msgid "Unique hash of barcode data" +msgstr "条码数据的唯一哈希" + +#: InvenTree/models.py:748 +msgid "Existing barcode found" +msgstr "发现现有条码" + +#: InvenTree/models.py:802 +msgid "Server Error" +msgstr "服务器错误" + +#: InvenTree/models.py:803 +msgid "An error has been logged by the server." +msgstr "服务器记录了一个错误。" + +#: InvenTree/serializers.py:59 part/models.py:3701 +msgid "Must be a valid number" +msgstr "必须是有效数字" + +#: InvenTree/serializers.py:82 company/models.py:153 +#: company/templates/company/company_base.html:107 part/models.py:2836 +#: templates/InvenTree/settings/settings_staff_js.html:44 +msgid "Currency" +msgstr "货币" + +#: InvenTree/serializers.py:85 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:334 +msgid "Filename" +msgstr "文件名" + +#: InvenTree/serializers.py:371 +msgid "Invalid value" +msgstr "无效值" + +#: InvenTree/serializers.py:393 +msgid "Data File" +msgstr "数据文件" + +#: InvenTree/serializers.py:394 +msgid "Select data file for upload" +msgstr "选择要上传的文件" + +#: InvenTree/serializers.py:415 +msgid "Unsupported file type" +msgstr "不支持的文件类型" + +#: InvenTree/serializers.py:421 +msgid "File is too large" +msgstr "文件过大" + +#: InvenTree/serializers.py:442 +msgid "No columns found in file" +msgstr "在文件中没有找到列" + +#: InvenTree/serializers.py:445 +msgid "No data rows found in file" +msgstr "在文件中没有找到数据行" + +#: InvenTree/serializers.py:568 +msgid "No data rows provided" +msgstr "没有提供数据行" + +#: InvenTree/serializers.py:571 +msgid "No data columns supplied" +msgstr "没有提供数据列" + +#: InvenTree/serializers.py:648 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "缺少必需的列:'{name}'" + +#: InvenTree/serializers.py:657 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "复制列: '{col}'" + +#: InvenTree/serializers.py:683 +#: templates/InvenTree/settings/mixins/urls.html:14 +msgid "URL" +msgstr "URL" + +#: InvenTree/serializers.py:684 +msgid "URL of remote image file" +msgstr "远程图像文件的 URL" + +#: InvenTree/serializers.py:698 +msgid "Downloading images from remote URL is not enabled" +msgstr "未启用从远程 URL下载图像" + +#: InvenTree/settings.py:708 +msgid "Czech" +msgstr "捷克语" + +#: InvenTree/settings.py:709 +msgid "Danish" +msgstr "丹麦语" + +#: InvenTree/settings.py:710 +msgid "German" +msgstr "德语" + +#: InvenTree/settings.py:711 +msgid "Greek" +msgstr "希腊语" + +#: InvenTree/settings.py:712 +msgid "English" +msgstr "英语" + +#: InvenTree/settings.py:713 +msgid "Spanish" +msgstr "西班牙语" + +#: InvenTree/settings.py:714 +msgid "Spanish (Mexican)" +msgstr "西班牙语(墨西哥)" + +#: InvenTree/settings.py:715 +msgid "Farsi / Persian" +msgstr "波斯语" + +#: InvenTree/settings.py:716 +msgid "French" +msgstr "法语" + +#: InvenTree/settings.py:717 +msgid "Hebrew" +msgstr "希伯来语" + +#: InvenTree/settings.py:718 +msgid "Hungarian" +msgstr "匈牙利语" + +#: InvenTree/settings.py:719 +msgid "Italian" +msgstr "意大利语" + +#: InvenTree/settings.py:720 +msgid "Japanese" +msgstr "日语" + +#: InvenTree/settings.py:721 +msgid "Korean" +msgstr "韩语" + +#: InvenTree/settings.py:722 +msgid "Dutch" +msgstr "荷兰语" + +#: InvenTree/settings.py:723 +msgid "Norwegian" +msgstr "挪威语" + +#: InvenTree/settings.py:724 +msgid "Polish" +msgstr "波兰语" + +#: InvenTree/settings.py:725 +msgid "Portuguese" +msgstr "葡萄牙语" + +#: InvenTree/settings.py:726 +msgid "Portuguese (Brazilian)" +msgstr "葡萄牙语 (巴西)" + +#: InvenTree/settings.py:727 +msgid "Russian" +msgstr "俄语" + +#: InvenTree/settings.py:728 +msgid "Slovenian" +msgstr "斯洛文尼亚" + +#: InvenTree/settings.py:729 +msgid "Swedish" +msgstr "瑞典语" + +#: InvenTree/settings.py:730 +msgid "Thai" +msgstr "泰语" + +#: InvenTree/settings.py:731 +msgid "Turkish" +msgstr "土耳其语" + +#: InvenTree/settings.py:732 +msgid "Vietnamese" +msgstr "越南语" + +#: InvenTree/settings.py:733 +msgid "Chinese" +msgstr "中文(简体)" + +#: InvenTree/status.py:92 part/serializers.py:879 +msgid "Background worker check failed" +msgstr "后台工作人员检查失败" + +#: InvenTree/status.py:96 +msgid "Email backend not configured" +msgstr "未配置电子邮件后端" + +#: InvenTree/status.py:99 +msgid "InvenTree system health checks failed" +msgstr "InventTree系统健康检查失败" + +#: InvenTree/status_codes.py:139 InvenTree/status_codes.py:181 +#: InvenTree/status_codes.py:357 InvenTree/status_codes.py:394 +#: InvenTree/status_codes.py:429 templates/js/translated/table_filters.js:417 +msgid "Pending" +msgstr "待定" + +#: InvenTree/status_codes.py:140 +msgid "Placed" +msgstr "已添加" + +#: InvenTree/status_codes.py:141 InvenTree/status_codes.py:360 +#: InvenTree/status_codes.py:396 order/templates/order/order_base.html:161 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "完成" + +#: InvenTree/status_codes.py:142 InvenTree/status_codes.py:184 +#: InvenTree/status_codes.py:359 InvenTree/status_codes.py:397 +msgid "Cancelled" +msgstr "已取消" + +#: InvenTree/status_codes.py:143 InvenTree/status_codes.py:185 +#: InvenTree/status_codes.py:227 +msgid "Lost" +msgstr "丢失" + +#: InvenTree/status_codes.py:144 InvenTree/status_codes.py:186 +#: InvenTree/status_codes.py:230 +msgid "Returned" +msgstr "已退回" + +#: InvenTree/status_codes.py:182 InvenTree/status_codes.py:395 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:183 order/models.py:1295 +#: templates/js/translated/sales_order.js:1418 +#: templates/js/translated/sales_order.js:1542 +#: templates/js/translated/sales_order.js:1846 +msgid "Shipped" +msgstr "已发货" + +#: InvenTree/status_codes.py:223 +msgid "OK" +msgstr "OK" + +#: InvenTree/status_codes.py:224 +msgid "Attention needed" +msgstr "需要关注" + +#: InvenTree/status_codes.py:225 +msgid "Damaged" +msgstr "破损" + +#: InvenTree/status_codes.py:226 +msgid "Destroyed" +msgstr "已销毁" + +#: InvenTree/status_codes.py:228 +msgid "Rejected" +msgstr "已拒绝" + +#: InvenTree/status_codes.py:229 +msgid "Quarantined" +msgstr "隔离" + +#: InvenTree/status_codes.py:307 +msgid "Legacy stock tracking entry" +msgstr "旧库存跟踪条目" + +#: InvenTree/status_codes.py:309 +msgid "Stock item created" +msgstr "库存项已创建" + +#: InvenTree/status_codes.py:311 +msgid "Edited stock item" +msgstr "已编辑库存项" + +#: InvenTree/status_codes.py:312 +msgid "Assigned serial number" +msgstr "已分配序列号" + +#: InvenTree/status_codes.py:314 +msgid "Stock counted" +msgstr "库存计数" + +#: InvenTree/status_codes.py:315 +msgid "Stock manually added" +msgstr "已手动添加库存" + +#: InvenTree/status_codes.py:316 +msgid "Stock manually removed" +msgstr "库存手动删除" + +#: InvenTree/status_codes.py:318 +msgid "Location changed" +msgstr "仓储地点已更改" + +#: InvenTree/status_codes.py:320 +msgid "Installed into assembly" +msgstr "安装到组装中" + +#: InvenTree/status_codes.py:321 +msgid "Removed from assembly" +msgstr "已从组装中删除" + +#: InvenTree/status_codes.py:323 +msgid "Installed component item" +msgstr "已安装组件项" + +#: InvenTree/status_codes.py:324 +msgid "Removed component item" +msgstr "已删除组件项" + +#: InvenTree/status_codes.py:326 +msgid "Split from parent item" +msgstr "从父项拆分" + +#: InvenTree/status_codes.py:327 +msgid "Split child item" +msgstr "拆分子项" + +#: InvenTree/status_codes.py:329 templates/js/translated/stock.js:2213 +msgid "Merged stock items" +msgstr "合并的库存项目" + +#: InvenTree/status_codes.py:331 +msgid "Converted to variant" +msgstr "转换为变量" + +#: InvenTree/status_codes.py:333 templates/js/translated/table_filters.js:273 +msgid "Sent to customer" +msgstr "发送给客户" + +#: InvenTree/status_codes.py:334 +msgid "Returned from customer" +msgstr "从客户退货" + +#: InvenTree/status_codes.py:336 +msgid "Build order output created" +msgstr "已创建生产订单输出" + +#: InvenTree/status_codes.py:337 +msgid "Build order output completed" +msgstr "生产订单输出已完成" + +#: InvenTree/status_codes.py:338 +msgid "Consumed by build order" +msgstr "被生产订单消耗" + +#: InvenTree/status_codes.py:340 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Shipped against Sales Order" +msgstr "收到定购单" + +#: InvenTree/status_codes.py:342 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Received against Purchase Order" +msgstr "收到定购单" + +#: InvenTree/status_codes.py:344 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Returned against Return Order" +msgstr "收到定购单" + +#: InvenTree/status_codes.py:358 +msgid "Production" +msgstr "生产中" + +#: InvenTree/status_codes.py:430 +#, fuzzy +#| msgid "Returned" +msgid "Return" +msgstr "已退回" + +#: InvenTree/status_codes.py:431 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:432 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:433 +#, fuzzy +#| msgid "Placed" +msgid "Replace" +msgstr "已添加" + +#: InvenTree/status_codes.py:434 +#, fuzzy +#| msgid "Rejected" +msgid "Reject" +msgstr "已拒绝" + +#: InvenTree/validators.py:18 +msgid "Not a valid currency code" +msgstr "不是有效的货币代码" + +#: InvenTree/validators.py:87 InvenTree/validators.py:103 +msgid "Overage value must not be negative" +msgstr "备损值不能为负数" + +#: InvenTree/validators.py:105 +msgid "Overage must not exceed 100%" +msgstr "备损不能超过 100%" + +#: InvenTree/validators.py:112 +msgid "Invalid value for overage" +msgstr "无效的备损值" + +#: InvenTree/views.py:409 templates/InvenTree/settings/user.html:22 +msgid "Edit User Information" +msgstr "编辑用户信息" + +#: InvenTree/views.py:421 templates/InvenTree/settings/user.html:19 +msgid "Set Password" +msgstr "设置密码" + +#: InvenTree/views.py:443 +msgid "Password fields must match" +msgstr "密码字段必须相匹配。" + +#: InvenTree/views.py:452 +msgid "Wrong password provided" +msgstr "密码错误" + +#: InvenTree/views.py:651 templates/navbar.html:157 +msgid "System Information" +msgstr "系统信息" + +#: InvenTree/views.py:658 templates/navbar.html:168 +msgid "About InvenTree" +msgstr "关于 InventTree" + +#: build/api.py:221 +msgid "Build must be cancelled before it can be deleted" +msgstr "在删除前必须取消生产" + +#: build/models.py:71 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:791 +msgid "Build Order" +msgstr "生产订单" + +#: build/models.py:72 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:119 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:221 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:49 +#: templates/js/translated/search.js:216 users/models.py:42 +msgid "Build Orders" +msgstr "生产订单" + +#: build/models.py:113 +msgid "Invalid choice for parent build" +msgstr "上级生产选项无效" + +#: build/models.py:157 +msgid "Build Order Reference" +msgstr "相关生产订单" + +#: build/models.py:158 order/models.py:327 order/models.py:734 +#: order/models.py:1056 order/models.py:1673 part/admin.py:278 +#: part/models.py:3602 part/templates/part/upload_bom.html:54 +#: report/templates/report/inventree_bill_of_materials_report.html:139 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:739 templates/js/translated/bom.js:913 +#: templates/js/translated/build.js:1847 templates/js/translated/order.js:272 +#: templates/js/translated/pricing.js:368 +#: templates/js/translated/purchase_order.js:1970 +#: templates/js/translated/return_order.js:671 +#: templates/js/translated/sales_order.js:1710 +msgid "Reference" +msgstr "引用" + +#: build/models.py:169 +#, fuzzy +#| msgid "Brief description of the build" +msgid "Brief description of the build (optional)" +msgstr "生产的简短描述." + +#: build/models.py:177 build/templates/build/build_base.html:189 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "上级生产" + +#: build/models.py:178 +msgid "BuildOrder to which this build is allocated" +msgstr "此次生产匹配的订单" + +#: build/models.py:183 build/templates/build/build_base.html:98 +#: build/templates/build/detail.html:29 company/models.py:720 +#: order/models.py:1158 order/models.py:1274 order/models.py:1275 +#: part/models.py:382 part/models.py:2849 part/models.py:2963 +#: part/models.py:3103 part/models.py:3122 part/models.py:3141 +#: part/models.py:3162 part/models.py:3254 part/models.py:3375 +#: part/models.py:3467 part/models.py:3567 part/models.py:3881 +#: part/serializers.py:843 part/serializers.py:1246 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:12 +#: part/templates/part/upload_bom.html:52 +#: report/templates/report/inventree_bill_of_materials_report.html:110 +#: report/templates/report/inventree_bill_of_materials_report.html:137 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:144 stock/serializers.py:484 +#: templates/InvenTree/search.html:82 +#: templates/email/build_order_completed.html:17 +#: templates/email/build_order_required_stock.html:17 +#: templates/email/low_stock_notification.html:16 +#: templates/email/overdue_build_order.html:16 +#: templates/js/translated/barcode.js:516 templates/js/translated/bom.js:601 +#: templates/js/translated/bom.js:738 templates/js/translated/bom.js:857 +#: templates/js/translated/build.js:1230 templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:2213 templates/js/translated/build.js:2615 +#: templates/js/translated/company.js:322 +#: templates/js/translated/company.js:807 +#: templates/js/translated/company.js:914 +#: templates/js/translated/company.js:1154 templates/js/translated/part.js:1582 +#: templates/js/translated/part.js:1648 templates/js/translated/part.js:1838 +#: templates/js/translated/pricing.js:351 +#: templates/js/translated/purchase_order.js:697 +#: templates/js/translated/purchase_order.js:1223 +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/purchase_order.js:1912 +#: templates/js/translated/return_order.js:485 +#: templates/js/translated/return_order.js:652 +#: templates/js/translated/sales_order.js:239 +#: templates/js/translated/sales_order.js:1094 +#: templates/js/translated/sales_order.js:1493 +#: templates/js/translated/sales_order.js:1694 +#: templates/js/translated/stock.js:622 templates/js/translated/stock.js:788 +#: templates/js/translated/stock.js:1000 templates/js/translated/stock.js:1747 +#: templates/js/translated/stock.js:2649 templates/js/translated/stock.js:2873 +#: templates/js/translated/stock.js:3010 +msgid "Part" +msgstr "商品" + +#: build/models.py:191 +msgid "Select part to build" +msgstr "选择要生产的商品" + +#: build/models.py:196 +msgid "Sales Order Reference" +msgstr "相关销售订单" + +#: build/models.py:200 +msgid "SalesOrder to which this build is allocated" +msgstr "此次生产匹配的销售订单" + +#: build/models.py:205 build/serializers.py:828 +#: templates/js/translated/build.js:2201 +#: templates/js/translated/sales_order.js:1082 +msgid "Source Location" +msgstr "来源地点" + +#: build/models.py:209 +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "此次生产从哪个仓储位置获取库存(留空即可从任何仓储位置取出)" + +#: build/models.py:214 +msgid "Destination Location" +msgstr "目标地点" + +#: build/models.py:218 +msgid "Select location where the completed items will be stored" +msgstr "选择已完成项目仓储地点" + +#: build/models.py:222 +msgid "Build Quantity" +msgstr "生产数量" + +#: build/models.py:225 +msgid "Number of stock items to build" +msgstr "要生产的项目数量" + +#: build/models.py:229 +msgid "Completed items" +msgstr "已完成项目" + +#: build/models.py:231 +msgid "Number of stock items which have been completed" +msgstr "已完成的库存项目数量" + +#: build/models.py:235 +msgid "Build Status" +msgstr "生产状态" + +#: build/models.py:239 +msgid "Build status code" +msgstr "生产状态代码" + +#: build/models.py:248 build/serializers.py:229 order/serializers.py:487 +#: stock/models.py:732 templates/js/translated/purchase_order.js:1048 +msgid "Batch Code" +msgstr "批量代码" + +#: build/models.py:252 build/serializers.py:230 +msgid "Batch code for this build output" +msgstr "此生产产出的批量代码" + +#: build/models.py:255 order/models.py:210 part/models.py:1028 +#: part/templates/part/part_base.html:312 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:753 +msgid "Creation Date" +msgstr "创建日期" + +#: build/models.py:259 +msgid "Target completion date" +msgstr "预计完成日期" + +#: build/models.py:260 +msgid "Target date for build completion. Build will be overdue after this date." +msgstr "生产完成的目标日期。生产将在此日期之后逾期。" + +#: build/models.py:263 order/models.py:377 order/models.py:1716 +#: templates/js/translated/build.js:2700 +msgid "Completion Date" +msgstr "完成日期:" + +#: build/models.py:269 +msgid "completed by" +msgstr "完成人" + +#: build/models.py:277 templates/js/translated/build.js:2660 +msgid "Issued by" +msgstr "发布者" + +#: build/models.py:278 +msgid "User who issued this build order" +msgstr "发布此生产订单的用户" + +#: build/models.py:286 build/templates/build/build_base.html:210 +#: build/templates/build/detail.html:122 order/models.py:224 +#: order/templates/order/order_base.html:213 +#: order/templates/order/return_order_base.html:183 +#: order/templates/order/sales_order_base.html:221 part/models.py:1032 +#: part/templates/part/part_base.html:392 +#: report/templates/report/inventree_build_order_base.html:158 +#: templates/js/translated/build.js:2672 +#: templates/js/translated/purchase_order.js:1660 +#: templates/js/translated/return_order.js:305 +#: templates/js/translated/table_filters.js:391 +msgid "Responsible" +msgstr "责任人" + +#: build/models.py:287 +msgid "User or group responsible for this build order" +msgstr "构建此订单的用户或组" + +#: build/models.py:292 build/templates/build/detail.html:108 +#: company/templates/company/manufacturer_part.html:107 +#: company/templates/company/supplier_part.html:182 +#: part/templates/part/part_base.html:385 stock/models.py:726 +#: stock/templates/stock/item_base.html:201 +msgid "External Link" +msgstr "外部链接" + +#: build/models.py:297 +msgid "Extra build notes" +msgstr "额外的生产备注" + +#: build/models.py:301 +msgid "Build Priority" +msgstr "创建优先级" + +#: build/models.py:304 +msgid "Priority of this build order" +msgstr "此构建订单的优先级" + +#: build/models.py:542 +#, python-brace-format +msgid "Build order {build} has been completed" +msgstr "生产订单 {build} 已完成" + +#: build/models.py:548 +msgid "A build order has been completed" +msgstr "生产订单已完成" + +#: build/models.py:727 +msgid "No build output specified" +msgstr "未指定生产产出" + +#: build/models.py:730 +msgid "Build output is already completed" +msgstr "生产产出已完成" + +#: build/models.py:733 +msgid "Build output does not match Build Order" +msgstr "生产产出与订单不匹配" + +#: build/models.py:1190 +msgid "Build item must specify a build output, as master part is marked as trackable" +msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的" + +#: build/models.py:1199 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" + +#: build/models.py:1209 order/models.py:1550 +msgid "Stock item is over-allocated" +msgstr "库存物品分配过度!" + +#: build/models.py:1215 order/models.py:1553 +msgid "Allocation quantity must be greater than zero" +msgstr "分配数量必须大于0" + +#: build/models.py:1221 +msgid "Quantity must be 1 for serialized stock" +msgstr "序列化库存的数量必须是 1" + +#: build/models.py:1278 +msgid "Selected stock item not found in BOM" +msgstr "在BOM中找不到选定的库存项" + +#: build/models.py:1347 stock/templates/stock/item_base.html:170 +#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2588 +#: templates/navbar.html:38 +msgid "Build" +msgstr "生产" + +#: build/models.py:1348 +msgid "Build to allocate parts" +msgstr "生产以分配部件" + +#: build/models.py:1364 build/serializers.py:677 order/serializers.py:1035 +#: order/serializers.py:1056 stock/serializers.py:388 stock/serializers.py:741 +#: stock/serializers.py:867 stock/templates/stock/item_base.html:10 +#: stock/templates/stock/item_base.html:23 +#: stock/templates/stock/item_base.html:195 +#: templates/js/translated/build.js:801 templates/js/translated/build.js:806 +#: templates/js/translated/build.js:2215 templates/js/translated/build.js:2785 +#: templates/js/translated/sales_order.js:240 +#: templates/js/translated/sales_order.js:1095 +#: templates/js/translated/sales_order.js:1394 +#: templates/js/translated/sales_order.js:1399 +#: templates/js/translated/sales_order.js:1500 +#: templates/js/translated/sales_order.js:1590 +#: templates/js/translated/stock.js:623 templates/js/translated/stock.js:789 +#: templates/js/translated/stock.js:2756 +msgid "Stock Item" +msgstr "库存项" + +#: build/models.py:1365 +msgid "Source stock item" +msgstr "源库存项" + +#: build/models.py:1377 build/serializers.py:197 +#: build/templates/build/build_base.html:103 +#: build/templates/build/detail.html:34 common/models.py:2102 +#: order/models.py:1042 order/models.py:1594 order/serializers.py:1209 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:277 +#: part/forms.py:47 part/models.py:2976 part/models.py:3583 +#: part/templates/part/part_pricing.html:16 +#: part/templates/part/upload_bom.html:53 +#: report/templates/report/inventree_bill_of_materials_report.html:138 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:103 stock/serializers.py:281 +#: stock/templates/stock/item_base.html:288 +#: stock/templates/stock/item_base.html:296 +#: stock/templates/stock/item_base.html:343 +#: templates/email/build_order_completed.html:18 +#: templates/js/translated/barcode.js:518 templates/js/translated/bom.js:740 +#: templates/js/translated/bom.js:921 templates/js/translated/build.js:477 +#: templates/js/translated/build.js:638 templates/js/translated/build.js:828 +#: templates/js/translated/build.js:1252 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2216 +#: templates/js/translated/company.js:1406 +#: templates/js/translated/model_renderers.js:201 +#: templates/js/translated/order.js:279 templates/js/translated/part.js:878 +#: templates/js/translated/part.js:1446 templates/js/translated/part.js:2876 +#: templates/js/translated/pricing.js:363 +#: templates/js/translated/pricing.js:456 +#: templates/js/translated/pricing.js:504 +#: templates/js/translated/pricing.js:598 +#: templates/js/translated/purchase_order.js:700 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/purchase_order.js:1976 +#: templates/js/translated/sales_order.js:256 +#: templates/js/translated/sales_order.js:1096 +#: templates/js/translated/sales_order.js:1413 +#: templates/js/translated/sales_order.js:1506 +#: templates/js/translated/sales_order.js:1596 +#: templates/js/translated/sales_order.js:1716 +#: templates/js/translated/stock.js:494 templates/js/translated/stock.js:648 +#: templates/js/translated/stock.js:819 templates/js/translated/stock.js:2800 +#: templates/js/translated/stock.js:2885 +msgid "Quantity" +msgstr "数量" + +#: build/models.py:1378 +msgid "Stock quantity to allocate to build" +msgstr "分配到生产的数量" + +#: build/models.py:1386 +msgid "Install into" +msgstr "安装到" + +#: build/models.py:1387 +msgid "Destination stock item" +msgstr "目标库存项" + +#: build/serializers.py:148 build/serializers.py:706 +#: templates/js/translated/build.js:1240 +msgid "Build Output" +msgstr "生产产出" + +#: build/serializers.py:160 +msgid "Build output does not match the parent build" +msgstr "生产产出与对应生产不匹配" + +#: build/serializers.py:164 +msgid "Output part does not match BuildOrder part" +msgstr "产出部件与生产订单部件不匹配" + +#: build/serializers.py:168 +msgid "This build output has already been completed" +msgstr "此生产产出已经完成" + +#: build/serializers.py:179 +msgid "This build output is not fully allocated" +msgstr "生产产出未被完成分配" + +#: build/serializers.py:198 +msgid "Enter quantity for build output" +msgstr "输入生产产出数量" + +#: build/serializers.py:212 build/serializers.py:697 order/models.py:408 +#: order/serializers.py:360 order/serializers.py:482 part/serializers.py:1088 +#: part/serializers.py:1409 stock/models.py:586 stock/models.py:1370 +#: stock/serializers.py:290 +msgid "Quantity must be greater than zero" +msgstr "数量必须大于0" + +#: build/serializers.py:219 +msgid "Integer quantity required for trackable parts" +msgstr "对于可追踪的部件,需要整数型数值" + +#: build/serializers.py:222 +msgid "Integer quantity required, as the bill of materials contains trackable parts" +msgstr "需要整数型数值,因为BOM包含可追踪的部件" + +#: build/serializers.py:236 order/serializers.py:495 order/serializers.py:1213 +#: stock/serializers.py:299 templates/js/translated/purchase_order.js:1072 +#: templates/js/translated/stock.js:301 templates/js/translated/stock.js:495 +msgid "Serial Numbers" +msgstr "序列号" + +#: build/serializers.py:237 +msgid "Enter serial numbers for build outputs" +msgstr "输入生产产出的序列号" + +#: build/serializers.py:250 +msgid "Auto Allocate Serial Numbers" +msgstr "自动分配序列号" + +#: build/serializers.py:251 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "自动为所需项分配对应的序列号" + +#: build/serializers.py:286 stock/api.py:630 +msgid "The following serial numbers already exist or are invalid" +msgstr "以下序列号已存在或无效" + +#: build/serializers.py:335 build/serializers.py:404 +msgid "A list of build outputs must be provided" +msgstr "必须提供生产产出列表" + +#: build/serializers.py:374 order/serializers.py:468 order/serializers.py:589 +#: order/serializers.py:1562 part/serializers.py:855 stock/serializers.py:310 +#: stock/serializers.py:445 stock/serializers.py:526 stock/serializers.py:902 +#: stock/serializers.py:1144 stock/templates/stock/item_base.html:384 +#: templates/js/translated/barcode.js:517 +#: templates/js/translated/barcode.js:764 templates/js/translated/build.js:813 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/purchase_order.js:1097 +#: templates/js/translated/purchase_order.js:1187 +#: templates/js/translated/sales_order.js:1406 +#: templates/js/translated/sales_order.js:1517 +#: templates/js/translated/sales_order.js:1525 +#: templates/js/translated/sales_order.js:1604 +#: templates/js/translated/stock.js:624 templates/js/translated/stock.js:790 +#: templates/js/translated/stock.js:1002 templates/js/translated/stock.js:1911 +#: templates/js/translated/stock.js:2663 +msgid "Location" +msgstr "地点" + +#: build/serializers.py:375 +msgid "Location for completed build outputs" +msgstr "已完成生产产出的仓储地点" + +#: build/serializers.py:381 build/templates/build/build_base.html:157 +#: build/templates/build/detail.html:62 order/models.py:760 +#: order/models.py:1699 order/serializers.py:505 stock/admin.py:106 +#: stock/templates/stock/item_base.html:417 +#: templates/js/translated/barcode.js:239 templates/js/translated/build.js:2644 +#: templates/js/translated/purchase_order.js:1227 +#: templates/js/translated/purchase_order.js:1619 +#: templates/js/translated/return_order.js:277 +#: templates/js/translated/sales_order.js:745 +#: templates/js/translated/stock.js:1886 templates/js/translated/stock.js:2774 +#: templates/js/translated/stock.js:2901 +msgid "Status" +msgstr "状态" + +#: build/serializers.py:387 +msgid "Accept Incomplete Allocation" +msgstr "接受不完整的分配" + +#: build/serializers.py:388 +msgid "Complete outputs if stock has not been fully allocated" +msgstr "如果库存尚未完成分配,完成产出" + +#: build/serializers.py:457 +msgid "Remove Allocated Stock" +msgstr "移除已分配的库存" + +#: build/serializers.py:458 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "减去已经分配至此生产的库存" + +#: build/serializers.py:464 +msgid "Remove Incomplete Outputs" +msgstr "移除未完成的产出" + +#: build/serializers.py:465 +msgid "Delete any build outputs which have not been completed" +msgstr "删除所有未完成的生产产出" + +#: build/serializers.py:493 +msgid "Accept as consumed by this build order" +msgstr "接受此构建订单所消耗的内容" + +#: build/serializers.py:494 +msgid "Deallocate before completing this build order" +msgstr "在完成此构建订单前取消分配" + +#: build/serializers.py:517 +msgid "Overallocated Stock" +msgstr "超出分配的库存" + +#: build/serializers.py:519 +msgid "How do you want to handle extra stock items assigned to the build order" +msgstr "你想如何处理分配给构建订单的额外库存物品" + +#: build/serializers.py:529 +msgid "Some stock items have been overallocated" +msgstr "一些库存项已被过度分配" + +#: build/serializers.py:534 +msgid "Accept Unallocated" +msgstr "接受未分配的" + +#: build/serializers.py:535 +msgid "Accept that stock items have not been fully allocated to this build order" +msgstr "接受库存项未被完成分配至此生产订单" + +#: build/serializers.py:545 templates/js/translated/build.js:265 +msgid "Required stock has not been fully allocated" +msgstr "所需库存尚未完全分配" + +#: build/serializers.py:550 order/serializers.py:242 order/serializers.py:1103 +msgid "Accept Incomplete" +msgstr "接受未完成" + +#: build/serializers.py:551 +msgid "Accept that the required number of build outputs have not been completed" +msgstr "接受所需的生产产出未完成" + +#: build/serializers.py:561 templates/js/translated/build.js:269 +msgid "Required build quantity has not been completed" +msgstr "所需生产数量尚未完成" + +#: build/serializers.py:570 templates/js/translated/build.js:253 +msgid "Build order has incomplete outputs" +msgstr "生产订单有未完成的产出" + +#: build/serializers.py:600 build/serializers.py:654 part/models.py:3490 +#: part/models.py:3873 +msgid "BOM Item" +msgstr "BOM项" + +#: build/serializers.py:610 +msgid "Build output" +msgstr "生产产出" + +#: build/serializers.py:618 +msgid "Build output must point to the same build" +msgstr "生产产出必须指向相同的生产" + +#: build/serializers.py:668 +msgid "bom_item.part must point to the same part as the build order" +msgstr "bom_item.part 必须与生产订单指向相同的部件" + +#: build/serializers.py:683 stock/serializers.py:754 +msgid "Item must be in stock" +msgstr "项目必须在库存中" + +#: build/serializers.py:732 order/serializers.py:1093 +#, python-brace-format +msgid "Available quantity ({q}) exceeded" +msgstr "可用量 ({q}) 超出了限制" + +#: build/serializers.py:738 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "对于被追踪的部件的分配,必须指定生产产出" + +#: build/serializers.py:745 +msgid "Build output cannot be specified for allocation of untracked parts" +msgstr "对于未被追踪的部件,无法指定生产产出" + +#: build/serializers.py:750 +msgid "This stock item has already been allocated to this build output" +msgstr "此库存项已被分配至此生产产出" + +#: build/serializers.py:773 order/serializers.py:1377 +msgid "Allocation items must be provided" +msgstr "必须提供分配的项" + +#: build/serializers.py:829 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)" + +#: build/serializers.py:837 +msgid "Exclude Location" +msgstr "排除地点" + +#: build/serializers.py:838 +msgid "Exclude stock items from this selected location" +msgstr "从该选定的仓储地点排除库存项" + +#: build/serializers.py:843 +msgid "Interchangeable Stock" +msgstr "可互换的库存" + +#: build/serializers.py:844 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "多处地点的库存项可以互换使用" + +#: build/serializers.py:849 +msgid "Substitute Stock" +msgstr "可替换的库存" + +#: build/serializers.py:850 +msgid "Allow allocation of substitute parts" +msgstr "允许分配可替换的部件" + +#: build/serializers.py:855 +msgid "Optional Items" +msgstr "可选项目" + +#: build/serializers.py:856 +msgid "Allocate optional BOM items to build order" +msgstr "分配可选的BOM项目来建立订单" + +#: build/tasks.py:100 +msgid "Stock required for build order" +msgstr "生产订单所需的库存" + +#: build/tasks.py:118 +msgid "Overdue Build Order" +msgstr "超时构建顺序" + +#: build/tasks.py:123 +#, python-brace-format +msgid "Build order {bo} is now overdue" +msgstr "生成订单 {bo} 现在已过期" + +#: build/templates/build/build_base.html:39 +#: company/templates/company/supplier_part.html:36 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:39 +#: order/templates/order/sales_order_base.html:39 +#: part/templates/part/part_base.html:43 +#: stock/templates/stock/item_base.html:41 +#: stock/templates/stock/location.html:54 +msgid "Barcode actions" +msgstr "" + +#: build/templates/build/build_base.html:43 +#: company/templates/company/supplier_part.html:40 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:43 +#: order/templates/order/sales_order_base.html:43 +#: part/templates/part/part_base.html:46 +#: stock/templates/stock/item_base.html:45 +#: stock/templates/stock/location.html:56 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: company/templates/company/supplier_part.html:42 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:46 +#: order/templates/order/sales_order_base.html:46 +#: stock/templates/stock/item_base.html:48 +#: stock/templates/stock/location.html:58 +#: templates/js/translated/barcode.js:466 +#: templates/js/translated/barcode.js:471 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:48 +#: company/templates/company/supplier_part.html:44 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:48 +#: order/templates/order/sales_order_base.html:48 +#: part/templates/part/part_base.html:51 +#: stock/templates/stock/item_base.html:50 +#: stock/templates/stock/location.html:60 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:57 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:56 +#: order/templates/order/sales_order_base.html:56 +msgid "Print actions" +msgstr "打印操作" + +#: build/templates/build/build_base.html:61 +msgid "Print build order report" +msgstr "打印构建订单报告" + +#: build/templates/build/build_base.html:68 +msgid "Build actions" +msgstr "生产操作" + +#: build/templates/build/build_base.html:72 +msgid "Edit Build" +msgstr "编辑生产" + +#: build/templates/build/build_base.html:74 +msgid "Cancel Build" +msgstr "取消生产" + +#: build/templates/build/build_base.html:77 +msgid "Duplicate Build" +msgstr "重复构件" + +#: build/templates/build/build_base.html:80 +msgid "Delete Build" +msgstr "删除生产" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/build_base.html:86 +msgid "Complete Build" +msgstr "生产完成" + +#: build/templates/build/build_base.html:108 +msgid "Build Description" +msgstr "构建描述" + +#: build/templates/build/build_base.html:117 +msgid "No build outputs have been created for this build order" +msgstr "针对此生产订单,尚未创建生产产出" + +#: build/templates/build/build_base.html:123 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "此构建订单是 %(link)s 订单的一个子订单" + +#: build/templates/build/build_base.html:130 +msgid "Build Order is ready to mark as completed" +msgstr "构建订单已准备好标记为已完成" + +#: build/templates/build/build_base.html:135 +msgid "Build Order cannot be completed as outstanding outputs remain" +msgstr "创建订单无法完成,因为未完成的输出" + +#: build/templates/build/build_base.html:140 +msgid "Required build quantity has not yet been completed" +msgstr "所需生产数量尚未完成" + +#: build/templates/build/build_base.html:145 +msgid "Stock has not been fully allocated to this Build Order" +msgstr "库存尚未被完全分配到此构建订单" + +#: build/templates/build/build_base.html:166 +#: build/templates/build/detail.html:138 order/models.py:206 +#: order/models.py:1068 order/templates/order/order_base.html:189 +#: order/templates/order/return_order_base.html:166 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2692 templates/js/translated/part.js:1465 +#: templates/js/translated/purchase_order.js:1636 +#: templates/js/translated/purchase_order.js:2052 +#: templates/js/translated/return_order.js:293 +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:761 +#: templates/js/translated/sales_order.js:1759 +msgid "Target Date" +msgstr "预计日期" + +#: build/templates/build/build_base.html:171 +#, python-format +msgid "This build was due on %(target)s" +msgstr "此次生产的截止日期为 %(target)s" + +#: build/templates/build/build_base.html:171 +#: build/templates/build/build_base.html:228 +#: order/templates/order/order_base.html:125 +#: order/templates/order/return_order_base.html:119 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:384 +#: templates/js/translated/table_filters.js:444 +#: templates/js/translated/table_filters.js:474 +msgid "Overdue" +msgstr "逾期" + +#: build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:67 build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:487 +msgid "Completed" +msgstr "已完成" + +#: build/templates/build/build_base.html:196 +#: build/templates/build/detail.html:101 order/api.py:1422 order/models.py:1267 +#: order/models.py:1366 order/models.py:1500 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:28 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:364 +#: templates/email/overdue_sales_order.html:15 +#: templates/js/translated/pricing.js:894 +#: templates/js/translated/sales_order.js:707 +#: templates/js/translated/stock.js:2703 +msgid "Sales Order" +msgstr "销售订单" + +#: build/templates/build/build_base.html:203 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +msgid "Issued By" +msgstr "发布者" + +#: build/templates/build/build_base.html:217 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2609 +msgid "Priority" +msgstr "优先级" + +#: build/templates/build/build_base.html:280 +msgid "Delete Build Order" +msgstr "删除生产订单" + +#: build/templates/build/build_base.html:290 +#, fuzzy +#| msgid "Build Order" +msgid "Build Order QR Code" +msgstr "生产订单" + +#: build/templates/build/build_base.html:302 +#, fuzzy +#| msgid "Print Build Orders" +msgid "Link Barcode to Build Order" +msgstr "打印生产订单" + +#: build/templates/build/detail.html:15 +msgid "Build Details" +msgstr "生产详情" + +#: build/templates/build/detail.html:38 +msgid "Stock Source" +msgstr "库存来源" + +#: build/templates/build/detail.html:43 +msgid "Stock can be taken from any available location." +msgstr "库存可以从任何可用的地点获得。" + +#: build/templates/build/detail.html:49 order/models.py:1185 +#: templates/js/translated/purchase_order.js:2094 +msgid "Destination" +msgstr "目的地" + +#: build/templates/build/detail.html:56 +msgid "Destination location not specified" +msgstr "目标位置未指定" + +#: build/templates/build/detail.html:73 +msgid "Allocated Parts" +msgstr "已分配的部件" + +#: build/templates/build/detail.html:80 stock/admin.py:105 +#: stock/templates/stock/item_base.html:163 +#: templates/js/translated/build.js:1259 +#: templates/js/translated/model_renderers.js:206 +#: templates/js/translated/purchase_order.js:1193 +#: templates/js/translated/stock.js:1072 templates/js/translated/stock.js:1900 +#: templates/js/translated/stock.js:2908 +#: templates/js/translated/table_filters.js:211 +#: templates/js/translated/table_filters.js:302 +msgid "Batch" +msgstr "批量" + +#: build/templates/build/detail.html:133 +#: order/templates/order/order_base.html:176 +#: order/templates/order/return_order_base.html:153 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2652 +msgid "Created" +msgstr "已创建" + +#: build/templates/build/detail.html:144 +msgid "No target date set" +msgstr "无预计日期" + +#: build/templates/build/detail.html:153 +msgid "Build not complete" +msgstr "生产未完成" + +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +msgid "Child Build Orders" +msgstr "子生产订单" + +#: build/templates/build/detail.html:179 +msgid "Allocate Stock to Build" +msgstr "为生产分配库存" + +#: build/templates/build/detail.html:183 templates/js/translated/build.js:2027 +msgid "Unallocate stock" +msgstr "未分配库存" + +#: build/templates/build/detail.html:184 +msgid "Unallocate Stock" +msgstr "未分配库存" + +#: build/templates/build/detail.html:186 +msgid "Automatically allocate stock to build" +msgstr "自动分配存货进行生成" + +#: build/templates/build/detail.html:187 +msgid "Auto Allocate" +msgstr "自动分配" + +#: build/templates/build/detail.html:189 +msgid "Manually allocate stock to build" +msgstr "手动分配存货进行生成" + +#: build/templates/build/detail.html:190 build/templates/build/sidebar.html:8 +msgid "Allocate Stock" +msgstr "分配库存" + +#: build/templates/build/detail.html:193 +msgid "Order required parts" +msgstr "订单所需部件" + +#: build/templates/build/detail.html:194 +#: company/templates/company/detail.html:38 +#: company/templates/company/detail.html:86 +#: part/templates/part/category.html:184 +#: templates/js/translated/purchase_order.js:740 +msgid "Order Parts" +msgstr "订购商品" + +#: build/templates/build/detail.html:206 +msgid "Untracked stock has been fully allocated for this Build Order" +msgstr "未跟踪的库存已完全分配给此生产订单" + +#: build/templates/build/detail.html:210 +msgid "Untracked stock has not been fully allocated for this Build Order" +msgstr "未跟踪的库存尚未完全分配给此生产订单" + +#: build/templates/build/detail.html:217 +msgid "Allocate selected items" +msgstr "分配选定项目" + +#: build/templates/build/detail.html:227 +msgid "This Build Order does not have any associated untracked BOM items" +msgstr "此构建订单没有任何关联的 BOM 项目" + +#: build/templates/build/detail.html:236 +msgid "Incomplete Build Outputs" +msgstr "未完成的生产产出" + +#: build/templates/build/detail.html:240 +msgid "Create new build output" +msgstr "创建新构建输出" + +#: build/templates/build/detail.html:241 +msgid "New Build Output" +msgstr "新建构建输出" + +#: build/templates/build/detail.html:255 +msgid "Output Actions" +msgstr "输出操作" + +#: build/templates/build/detail.html:260 +msgid "Complete selected build outputs" +msgstr "完成选定的构建输出" + +#: build/templates/build/detail.html:261 +msgid "Complete outputs" +msgstr "已完成输出" + +#: build/templates/build/detail.html:265 +msgid "Delete selected build outputs" +msgstr "删除选中的构建输出" + +#: build/templates/build/detail.html:266 +msgid "Delete outputs" +msgstr "删除输出" + +#: build/templates/build/detail.html:283 +msgid "Completed Build Outputs" +msgstr "已完成构建输出" + +#: build/templates/build/detail.html:295 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:261 +#: company/templates/company/manufacturer_part.html:151 +#: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:37 +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:103 +#: order/templates/order/return_order_detail.html:74 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:134 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:234 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:117 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" +msgstr "附件" + +#: build/templates/build/detail.html:310 +msgid "Build Notes" +msgstr "生产备注" + +#: build/templates/build/detail.html:475 +msgid "Allocation Complete" +msgstr "分配完成" + +#: build/templates/build/detail.html:476 +msgid "All untracked stock items have been allocated" +msgstr "所有未跟踪的库存项目都已分配" + +#: build/templates/build/index.html:18 part/templates/part/detail.html:340 +msgid "New Build Order" +msgstr "新建生产订单" + +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" +msgstr "生产订单详情" + +#: build/templates/build/sidebar.html:12 +msgid "Incomplete Outputs" +msgstr "未完成输出" + +#: build/templates/build/sidebar.html:15 +msgid "Completed Outputs" +msgstr "已完成输出" + +#: common/files.py:63 +#, fuzzy, python-brace-format +#| msgid "Unsupported file format: {ext.upper()}" +msgid "Unsupported file format: {fmt}" +msgstr "不支持的文件格式: {ext.uper()}" + +#: common/files.py:65 +msgid "Error reading file (invalid encoding)" +msgstr "读取文件时发生错误 (无效编码)" + +#: common/files.py:70 +msgid "Error reading file (invalid format)" +msgstr "读取文件时发生错误 (无效编码)" + +#: common/files.py:72 +msgid "Error reading file (incorrect dimension)" +msgstr "读取文件时出错(不正确的尺寸)" + +#: common/files.py:74 +msgid "Error reading file (data could be corrupted)" +msgstr "读取文件时出错(数据可能已损坏)" + +#: common/forms.py:13 +msgid "File" +msgstr "文件" + +#: common/forms.py:14 +msgid "Select file to upload" +msgstr "选择要上传的文件" + +#: common/forms.py:28 +msgid "{name.title()} File" +msgstr "{name.title()} 文件" + +#: common/forms.py:29 +#, python-brace-format +msgid "Select {name} file to upload" +msgstr "选择 {name} 文件上传" + +#: common/models.py:66 +msgid "Updated" +msgstr "已更新" + +#: common/models.py:67 +msgid "Timestamp of last update" +msgstr "最后一次更新时间" + +#: common/models.py:500 +msgid "Settings key (must be unique - case insensitive)" +msgstr "设置键值(必须是唯一的 - 大小写不敏感)" + +#: common/models.py:502 +msgid "Settings value" +msgstr "设定值" + +#: common/models.py:543 +msgid "Chosen value is not a valid option" +msgstr "选择的值不是一个有效的选项" + +#: common/models.py:560 +msgid "Value must be a boolean value" +msgstr "值必须是布尔量" + +#: common/models.py:571 +msgid "Value must be an integer value" +msgstr "值必须为整数" + +#: common/models.py:616 +msgid "Key string must be unique" +msgstr "关键字必须是唯一的" + +#: common/models.py:811 +msgid "No group" +msgstr "无群组" + +#: common/models.py:836 +msgid "An empty domain is not allowed." +msgstr "不允许空域。" + +#: common/models.py:838 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "无效的域名: {domain}" + +#: common/models.py:895 +msgid "Restart required" +msgstr "需要重启" + +#: common/models.py:896 +msgid "A setting has been changed which requires a server restart" +msgstr "设置已更改,需要服务器重启" + +#: common/models.py:903 +msgid "Server Instance Name" +msgstr "服务器实例名称" + +#: common/models.py:905 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:910 +msgid "Use instance name" +msgstr "" + +#: common/models.py:911 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:917 +msgid "Restrict showing `about`" +msgstr "" + +#: common/models.py:918 +msgid "Show the `about` modal only to superusers" +msgstr "" + +#: common/models.py:924 company/models.py:98 company/models.py:99 +msgid "Company name" +msgstr "公司名称" + +#: common/models.py:925 +msgid "Internal company name" +msgstr "内部公司名称" + +#: common/models.py:930 +msgid "Base URL" +msgstr "" + +#: common/models.py:931 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:938 +msgid "Default Currency" +msgstr "" + +#: common/models.py:939 +msgid "Select base currency for pricing caluclations" +msgstr "" + +#: common/models.py:946 +msgid "Download from URL" +msgstr "" + +#: common/models.py:947 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:953 +msgid "Download Size Limit" +msgstr "" + +#: common/models.py:954 +msgid "Maximum allowable download size for remote image" +msgstr "" + +#: common/models.py:965 +msgid "User-agent used to download from URL" +msgstr "" + +#: common/models.py:966 +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "" + +#: common/models.py:971 +msgid "Require confirm" +msgstr "" + +#: common/models.py:972 +msgid "Require explicit user confirmation for certain action." +msgstr "" + +#: common/models.py:978 +msgid "Tree Depth" +msgstr "" + +#: common/models.py:979 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "" + +#: common/models.py:988 +msgid "Update Check Inverval" +msgstr "" + +#: common/models.py:989 +msgid "How often to check for updates (set to zero to disable)" +msgstr "" + +#: common/models.py:995 common/models.py:1013 common/models.py:1020 +#: common/models.py:1031 common/models.py:1042 common/models.py:1266 +#: common/models.py:1290 common/models.py:1413 common/models.py:1655 +msgid "days" +msgstr "天" + +#: common/models.py:999 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1000 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1006 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1007 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1017 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1018 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1028 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1029 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1039 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1040 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1050 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1051 +msgid "Enable barcode scanner support" +msgstr "启用条形码扫描支持" + +#: common/models.py:1057 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1058 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1068 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1069 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1075 +#, fuzzy +#| msgid "Part description" +msgid "Part Revisions" +msgstr "商品描述" + +#: common/models.py:1076 +#, fuzzy +#| msgid "Enable internal prices for parts" +msgid "Enable revision field for Part" +msgstr "启用内部商品价格" + +#: common/models.py:1082 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1083 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1087 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1088 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1094 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1095 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1101 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1102 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1108 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1109 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1115 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1116 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1122 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1123 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1129 part/admin.py:55 part/models.py:3377 +#: report/models.py:164 templates/js/translated/table_filters.js:66 +#: templates/js/translated/table_filters.js:575 +msgid "Template" +msgstr "模板" + +#: common/models.py:1130 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1136 part/admin.py:51 part/admin.py:283 part/models.py:984 +#: templates/js/translated/bom.js:1594 +#: templates/js/translated/table_filters.js:228 +#: templates/js/translated/table_filters.js:534 +msgid "Assembly" +msgstr "组装" + +#: common/models.py:1137 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1143 part/admin.py:52 part/models.py:990 +#: templates/js/translated/table_filters.js:542 +msgid "Component" +msgstr "组件" + +#: common/models.py:1144 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1150 part/admin.py:53 part/models.py:1001 +msgid "Purchaseable" +msgstr "可购买" + +#: common/models.py:1151 +msgid "Parts are purchaseable by default" +msgstr "商品默认可购买" + +#: common/models.py:1157 part/admin.py:54 part/models.py:1006 +#: templates/js/translated/table_filters.js:563 +msgid "Salable" +msgstr "可销售" + +#: common/models.py:1158 +msgid "Parts are salable by default" +msgstr "商品默认可销售" + +#: common/models.py:1164 part/admin.py:56 part/models.py:996 +#: templates/js/translated/table_filters.js:74 +#: templates/js/translated/table_filters.js:148 +#: templates/js/translated/table_filters.js:579 +msgid "Trackable" +msgstr "可追踪" + +#: common/models.py:1165 +msgid "Parts are trackable by default" +msgstr "商品默认可跟踪" + +#: common/models.py:1171 part/admin.py:57 part/models.py:1016 +#: part/templates/part/part_base.html:156 +#: templates/js/translated/table_filters.js:70 +#: templates/js/translated/table_filters.js:583 +msgid "Virtual" +msgstr "虚拟" + +#: common/models.py:1172 +msgid "Parts are virtual by default" +msgstr "商品默认是虚拟的" + +#: common/models.py:1178 +msgid "Show Import in Views" +msgstr "视图中显示导入" + +#: common/models.py:1179 +msgid "Display the import wizard in some part views" +msgstr "在一些商品视图中显示导入向导" + +#: common/models.py:1185 +msgid "Show related parts" +msgstr "显示相关商品" + +#: common/models.py:1186 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1192 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1193 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1199 templates/js/translated/part.js:73 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1200 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1206 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1207 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1214 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1215 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1220 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1221 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1231 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1232 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1242 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1243 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1249 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1250 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1256 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1257 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1263 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1264 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1274 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1275 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1281 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1282 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1288 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1289 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1299 +msgid "Internal Prices" +msgstr "内部价格" + +#: common/models.py:1300 +msgid "Enable internal prices for parts" +msgstr "启用内部商品价格" + +#: common/models.py:1306 +msgid "Internal Price Override" +msgstr "" + +#: common/models.py:1307 +msgid "If available, internal prices override price range calculations" +msgstr "" + +#: common/models.py:1313 +msgid "Enable label printing" +msgstr "" + +#: common/models.py:1314 +msgid "Enable label printing from the web interface" +msgstr "" + +#: common/models.py:1320 +msgid "Label Image DPI" +msgstr "" + +#: common/models.py:1321 +msgid "DPI resolution when generating image files to supply to label printing plugins" +msgstr "" + +#: common/models.py:1330 +msgid "Enable Reports" +msgstr "" + +#: common/models.py:1331 +msgid "Enable generation of reports" +msgstr "" + +#: common/models.py:1337 templates/stats.html:25 +msgid "Debug Mode" +msgstr "调试模式" + +#: common/models.py:1338 +msgid "Generate reports in debug mode (HTML output)" +msgstr "在调试模式生成报告(HTML输出)" + +#: common/models.py:1344 +msgid "Page Size" +msgstr "页面大小" + +#: common/models.py:1345 +msgid "Default page size for PDF reports" +msgstr "PDF 报表默认页面大小" + +#: common/models.py:1355 +msgid "Enable Test Reports" +msgstr "" + +#: common/models.py:1356 +msgid "Enable generation of test reports" +msgstr "启用生成测试报表" + +#: common/models.py:1362 +msgid "Attach Test Reports" +msgstr "" + +#: common/models.py:1363 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +msgstr "" + +#: common/models.py:1369 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1370 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1376 +msgid "Autofill Serial Numbers" +msgstr "" + +#: common/models.py:1377 +msgid "Autofill serial numbers in forms" +msgstr "" + +#: common/models.py:1383 +msgid "Delete Depleted Stock" +msgstr "" + +#: common/models.py:1384 +msgid "Determines default behaviour when a stock item is depleted" +msgstr "" + +#: common/models.py:1390 +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1391 +msgid "Template for generating default batch codes for stock items" +msgstr "" + +#: common/models.py:1396 +msgid "Stock Expiry" +msgstr "库存到期" + +#: common/models.py:1397 +msgid "Enable stock expiry functionality" +msgstr "启用库存到期功能" + +#: common/models.py:1403 +msgid "Sell Expired Stock" +msgstr "销售过期库存" + +#: common/models.py:1404 +msgid "Allow sale of expired stock" +msgstr "允许销售过期库存" + +#: common/models.py:1410 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:1411 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:1418 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:1419 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:1425 +msgid "Stock Ownership Control" +msgstr "库存所有权控制" + +#: common/models.py:1426 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:1432 +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1433 +msgid "Stock location default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1438 +msgid "Build Order Reference Pattern" +msgstr "" + +#: common/models.py:1439 +msgid "Required pattern for generating Build Order reference field" +msgstr "" + +#: common/models.py:1445 +#, fuzzy +#| msgid "Sales Orders" +msgid "Enable Return Orders" +msgstr "销售订单" + +#: common/models.py:1446 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1452 +#, fuzzy +#| msgid "Build Order Reference" +msgid "Return Order Reference Pattern" +msgstr "相关生产订单" + +#: common/models.py:1453 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1459 +#, fuzzy +#| msgid "Complete Build Order" +msgid "Edit Completed Return Orders" +msgstr "生产订单完成" + +#: common/models.py:1460 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1466 +msgid "Sales Order Reference Pattern" +msgstr "" + +#: common/models.py:1467 +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1473 +msgid "Sales Order Default Shipment" +msgstr "" + +#: common/models.py:1474 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1480 +msgid "Edit Completed Sales Orders" +msgstr "" + +#: common/models.py:1481 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1487 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1488 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1494 +msgid "Edit Completed Purchase Orders" +msgstr "" + +#: common/models.py:1495 +msgid "Allow editing of purchase orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1502 +msgid "Enable password forgot" +msgstr "" + +#: common/models.py:1503 +msgid "Enable password forgot function on the login pages" +msgstr "" + +#: common/models.py:1509 +msgid "Enable registration" +msgstr "" + +#: common/models.py:1510 +msgid "Enable self-registration for users on the login pages" +msgstr "" + +#: common/models.py:1516 +msgid "Enable SSO" +msgstr "" + +#: common/models.py:1517 +msgid "Enable SSO on the login pages" +msgstr "" + +#: common/models.py:1523 +msgid "Enable SSO registration" +msgstr "" + +#: common/models.py:1524 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "" + +#: common/models.py:1530 +msgid "Email required" +msgstr "" + +#: common/models.py:1531 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:1537 +msgid "Auto-fill SSO users" +msgstr "" + +#: common/models.py:1538 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:1544 +msgid "Mail twice" +msgstr "" + +#: common/models.py:1545 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:1551 +msgid "Password twice" +msgstr "" + +#: common/models.py:1552 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:1558 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:1559 +msgid "Restrict signup to certain domains (comma-separated, strarting with @)" +msgstr "" + +#: common/models.py:1565 +msgid "Group on signup" +msgstr "" + +#: common/models.py:1566 +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1572 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:1573 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1579 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1580 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:1587 +msgid "Check plugin signatures" +msgstr "" + +#: common/models.py:1588 +msgid "Check and show signatures for plugins" +msgstr "" + +#: common/models.py:1595 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:1596 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:1603 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:1604 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:1611 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:1612 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1619 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:1620 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:1627 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:1628 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1635 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:1636 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:1642 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:1643 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:1652 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1653 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1670 common/models.py:2063 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1689 +msgid "No Printer (Export to PDF)" +msgstr "" + +#: common/models.py:1710 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:1711 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:1717 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:1718 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:1724 +msgid "Show latest parts" +msgstr "显示最近商品" + +#: common/models.py:1725 +msgid "Show latest parts on the homepage" +msgstr "在主页上显示最近商品" + +#: common/models.py:1731 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:1732 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:1738 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:1739 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:1745 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:1746 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:1752 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:1753 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:1759 +msgid "Show low stock" +msgstr "" + +#: common/models.py:1760 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:1766 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:1767 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:1773 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:1774 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:1780 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:1781 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:1787 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:1788 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:1794 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:1795 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:1801 +msgid "Show overdue builds" +msgstr "显示逾期生产" + +#: common/models.py:1802 +msgid "Show overdue builds on the homepage" +msgstr "在主页上显示逾期的生产" + +#: common/models.py:1808 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:1809 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:1815 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:1816 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:1822 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:1823 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:1829 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:1830 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:1836 +msgid "Show News" +msgstr "" + +#: common/models.py:1837 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:1843 +msgid "Inline label display" +msgstr "内嵌标签显示" + +#: common/models.py:1844 +msgid "Display PDF labels in the browser, instead of downloading as a file" +msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" + +#: common/models.py:1850 +msgid "Default label printer" +msgstr "" + +#: common/models.py:1851 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:1857 +msgid "Inline report display" +msgstr "" + +#: common/models.py:1858 +msgid "Display PDF reports in the browser, instead of downloading as a file" +msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" + +#: common/models.py:1864 +msgid "Search Parts" +msgstr "" + +#: common/models.py:1865 +msgid "Display parts in search preview window" +msgstr "" + +#: common/models.py:1871 +msgid "Search Supplier Parts" +msgstr "" + +#: common/models.py:1872 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:1878 +msgid "Search Manufacturer Parts" +msgstr "" + +#: common/models.py:1879 +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:1885 +msgid "Hide Inactive Parts" +msgstr "" + +#: common/models.py:1886 +msgid "Excluded inactive parts from search preview window" +msgstr "" + +#: common/models.py:1892 +msgid "Search Categories" +msgstr "" + +#: common/models.py:1893 +msgid "Display part categories in search preview window" +msgstr "" + +#: common/models.py:1899 +msgid "Search Stock" +msgstr "" + +#: common/models.py:1900 +msgid "Display stock items in search preview window" +msgstr "" + +#: common/models.py:1906 +msgid "Hide Unavailable Stock Items" +msgstr "" + +#: common/models.py:1907 +msgid "Exclude stock items which are not available from the search preview window" +msgstr "" + +#: common/models.py:1913 +msgid "Search Locations" +msgstr "" + +#: common/models.py:1914 +msgid "Display stock locations in search preview window" +msgstr "" + +#: common/models.py:1920 +msgid "Search Companies" +msgstr "" + +#: common/models.py:1921 +msgid "Display companies in search preview window" +msgstr "" + +#: common/models.py:1927 +msgid "Search Build Orders" +msgstr "" + +#: common/models.py:1928 +msgid "Display build orders in search preview window" +msgstr "" + +#: common/models.py:1934 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:1935 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:1941 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:1942 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:1948 +msgid "Search Sales Orders" +msgstr "" + +#: common/models.py:1949 +msgid "Display sales orders in search preview window" +msgstr "" + +#: common/models.py:1955 +msgid "Exclude Inactive Sales Orders" +msgstr "" + +#: common/models.py:1956 +msgid "Exclude inactive sales orders from search preview window" +msgstr "" + +#: common/models.py:1962 +#, fuzzy +#| msgid "Purchase Orders" +msgid "Search Return Orders" +msgstr "采购订单" + +#: common/models.py:1963 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:1969 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:1970 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:1976 +msgid "Search Preview Results" +msgstr "搜索预览结果" + +#: common/models.py:1977 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:1983 +#, fuzzy +#| msgid "Search" +msgid "Regex Search" +msgstr "搜索" + +#: common/models.py:1984 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:1990 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:1991 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:1997 +msgid "Show Quantity in Forms" +msgstr "在表格中显示数量" + +#: common/models.py:1998 +msgid "Display available part quantity in some forms" +msgstr "在某些表格中显示可用的商品数量" + +#: common/models.py:2004 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2005 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2011 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2012 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2018 +msgid "Date Format" +msgstr "" + +#: common/models.py:2019 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2033 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2034 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2040 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2041 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2047 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2048 +msgid "Maximimum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2103 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:2110 company/serializers.py:424 order/models.py:1095 +#: order/models.py:1888 templates/js/translated/company.js:1411 +#: templates/js/translated/part.js:1520 templates/js/translated/pricing.js:603 +#: templates/js/translated/return_order.js:683 +msgid "Price" +msgstr "价格" + +#: common/models.py:2111 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:2271 common/models.py:2449 +msgid "Endpoint" +msgstr "" + +#: common/models.py:2272 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:2281 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:2286 part/admin.py:50 part/models.py:1011 +#: plugin/models.py:100 templates/js/translated/table_filters.js:62 +#: templates/js/translated/table_filters.js:144 +#: templates/js/translated/table_filters.js:380 +#: templates/js/translated/table_filters.js:529 +msgid "Active" +msgstr "" + +#: common/models.py:2287 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:2301 +msgid "Token" +msgstr "令牌" + +#: common/models.py:2302 +msgid "Token for access" +msgstr "" + +#: common/models.py:2309 +msgid "Secret" +msgstr "" + +#: common/models.py:2310 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:2416 +msgid "Message ID" +msgstr "" + +#: common/models.py:2417 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:2425 +msgid "Host" +msgstr "" + +#: common/models.py:2426 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:2433 +msgid "Header" +msgstr "" + +#: common/models.py:2434 +msgid "Header of this message" +msgstr "" + +#: common/models.py:2440 +msgid "Body" +msgstr "" + +#: common/models.py:2441 +msgid "Body of this message" +msgstr "" + +#: common/models.py:2450 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:2455 +msgid "Worked on" +msgstr "" + +#: common/models.py:2456 +msgid "Was the work on this message finished?" +msgstr "" + +#: common/models.py:2610 +msgid "Id" +msgstr "" + +#: common/models.py:2616 templates/js/translated/news.js:35 +msgid "Title" +msgstr "" + +#: common/models.py:2626 templates/js/translated/news.js:51 +msgid "Published" +msgstr "" + +#: common/models.py:2631 templates/InvenTree/settings/plugin.html:62 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/news.js:47 +msgid "Author" +msgstr "" + +#: common/models.py:2636 templates/js/translated/news.js:43 +msgid "Summary" +msgstr "" + +#: common/models.py:2641 +msgid "Read" +msgstr "" + +#: common/models.py:2642 +msgid "Was this news item read?" +msgstr "" + +#: common/notifications.py:294 +#, python-brace-format +msgid "New {verbose_name}" +msgstr "" + +#: common/notifications.py:296 +msgid "A new order has been created and assigned to you" +msgstr "" + +#: common/notifications.py:302 common/notifications.py:309 +msgid "Items Received" +msgstr "" + +#: common/notifications.py:304 +msgid "Items have been received against a purchase order" +msgstr "" + +#: common/notifications.py:311 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Items have been received against a return order" +msgstr "收到定购单" + +#: common/notifications.py:423 +msgid "Error raised by plugin" +msgstr "" + +#: common/views.py:85 order/templates/order/order_wizard/po_upload.html:51 +#: order/templates/order/purchase_order_detail.html:25 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:108 +#: templates/patterns/wizard/upload.html:37 +msgid "Upload File" +msgstr "上传文件" + +#: common/views.py:86 order/templates/order/order_wizard/match_fields.html:52 +#: order/views.py:119 +#: part/templates/part/import_wizard/ajax_match_fields.html:45 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:109 +#: templates/patterns/wizard/match_fields.html:51 +msgid "Match Fields" +msgstr "匹配字段" + +#: common/views.py:87 +msgid "Match Items" +msgstr "匹配项" + +#: common/views.py:420 +msgid "Fields matching failed" +msgstr "字段匹配失败" + +#: common/views.py:481 +msgid "Parts imported" +msgstr "已导入商品" + +#: common/views.py:509 order/templates/order/order_wizard/match_fields.html:27 +#: order/templates/order/order_wizard/match_parts.html:19 +#: order/templates/order/order_wizard/po_upload.html:49 +#: part/templates/part/import_wizard/match_fields.html:27 +#: part/templates/part/import_wizard/match_references.html:19 +#: part/templates/part/import_wizard/part_upload.html:56 +#: templates/patterns/wizard/match_fields.html:26 +#: templates/patterns/wizard/upload.html:35 +msgid "Previous Step" +msgstr "" + +#: company/models.py:103 +msgid "Company description" +msgstr "公司简介" + +#: company/models.py:104 +msgid "Description of the company" +msgstr "公司简介" + +#: company/models.py:110 company/templates/company/company_base.html:101 +#: templates/InvenTree/settings/plugin_settings.html:55 +#: templates/js/translated/company.js:500 +msgid "Website" +msgstr "网站" + +#: company/models.py:111 +msgid "Company website URL" +msgstr "公司网站" + +#: company/models.py:115 company/templates/company/company_base.html:119 +msgid "Address" +msgstr "地址" + +#: company/models.py:116 +msgid "Company address" +msgstr "公司地址" + +#: company/models.py:119 +msgid "Phone number" +msgstr "电话号码" + +#: company/models.py:120 +msgid "Contact phone number" +msgstr "联系电话" + +#: company/models.py:123 company/templates/company/company_base.html:133 +#: templates/InvenTree/settings/user.html:48 +#: templates/js/translated/company.js:644 +msgid "Email" +msgstr "电子邮件" + +#: company/models.py:123 +msgid "Contact email address" +msgstr "联系人电子邮件" + +#: company/models.py:126 company/templates/company/company_base.html:140 +#: order/models.py:232 order/templates/order/order_base.html:206 +#: order/templates/order/return_order_base.html:176 +#: order/templates/order/sales_order_base.html:214 +msgid "Contact" +msgstr "联系人" + +#: company/models.py:127 +msgid "Point of contact" +msgstr "" + +#: company/models.py:129 +msgid "Link to external company information" +msgstr "链接到外部公司信息" + +#: company/models.py:140 part/models.py:905 +msgid "Image" +msgstr "图片" + +#: company/models.py:143 company/templates/company/detail.html:221 +msgid "Company Notes" +msgstr "公司备注" + +#: company/models.py:145 +msgid "is customer" +msgstr "是客户" + +#: company/models.py:145 +msgid "Do you sell items to this company?" +msgstr "您是否向该公司出售商品?" + +#: company/models.py:147 +msgid "is supplier" +msgstr "是供应商" + +#: company/models.py:147 +msgid "Do you purchase items from this company?" +msgstr "您是否从该公司采购商品?" + +#: company/models.py:149 +msgid "is manufacturer" +msgstr "是制造商" + +#: company/models.py:149 +msgid "Does this company manufacture parts?" +msgstr "该公司制造商品吗?" + +#: company/models.py:156 +msgid "Default currency used for this company" +msgstr "该公司使用的默认货币" + +#: company/models.py:222 company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 +#: templates/InvenTree/search.html:179 templates/js/translated/company.js:473 +msgid "Company" +msgstr "公司" + +#: company/models.py:277 company/models.py:512 stock/models.py:668 +#: stock/serializers.py:143 stock/templates/stock/item_base.html:143 +#: templates/js/translated/bom.js:591 +msgid "Base Part" +msgstr "" + +#: company/models.py:281 company/models.py:516 +msgid "Select part" +msgstr "选择商品" + +#: company/models.py:292 company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:146 part/serializers.py:359 +#: stock/templates/stock/item_base.html:208 +#: templates/js/translated/company.js:484 +#: templates/js/translated/company.js:809 +#: templates/js/translated/company.js:939 +#: templates/js/translated/company.js:1206 +#: templates/js/translated/table_filters.js:506 +msgid "Manufacturer" +msgstr "制造商" + +#: company/models.py:293 +msgid "Select manufacturer" +msgstr "选择制造商" + +#: company/models.py:299 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:154 part/serializers.py:365 +#: templates/js/translated/company.js:325 +#: templates/js/translated/company.js:808 +#: templates/js/translated/company.js:955 +#: templates/js/translated/company.js:1225 templates/js/translated/part.js:1435 +#: templates/js/translated/purchase_order.js:1751 +#: templates/js/translated/purchase_order.js:1958 +msgid "MPN" +msgstr "" + +#: company/models.py:300 +msgid "Manufacturer Part Number" +msgstr "制造商商品编号" + +#: company/models.py:306 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:312 +msgid "Manufacturer part description" +msgstr "制造商商品描述" + +#: company/models.py:357 company/models.py:381 company/models.py:535 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:218 +msgid "Manufacturer Part" +msgstr "制造商商品" + +#: company/models.py:388 +msgid "Parameter name" +msgstr "参数名称" + +#: company/models.py:394 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2222 templates/js/translated/company.js:857 +#: templates/js/translated/company.js:1062 templates/js/translated/part.js:1268 +#: templates/js/translated/stock.js:1425 +msgid "Value" +msgstr "数值" + +#: company/models.py:395 +msgid "Parameter value" +msgstr "参数值" + +#: company/models.py:401 part/admin.py:40 part/models.py:978 +#: part/models.py:3337 part/templates/part/part_base.html:286 +#: templates/InvenTree/settings/settings_staff_js.html:255 +#: templates/js/translated/company.js:1068 templates/js/translated/part.js:1274 +msgid "Units" +msgstr "单位" + +#: company/models.py:402 +msgid "Parameter units" +msgstr "参数单位" + +#: company/models.py:480 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:522 company/templates/company/company_base.html:82 +#: company/templates/company/supplier_part.html:130 order/models.py:350 +#: order/templates/order/order_base.html:139 part/bom.py:285 part/bom.py:313 +#: part/serializers.py:348 stock/templates/stock/item_base.html:225 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:324 +#: templates/js/translated/company.js:488 +#: templates/js/translated/company.js:1179 templates/js/translated/part.js:1403 +#: templates/js/translated/pricing.js:480 +#: templates/js/translated/purchase_order.js:1602 +#: templates/js/translated/table_filters.js:510 +msgid "Supplier" +msgstr "供应商" + +#: company/models.py:523 +msgid "Select supplier" +msgstr "选择供应商" + +#: company/models.py:528 company/templates/company/supplier_part.html:140 +#: part/bom.py:286 part/bom.py:314 part/serializers.py:354 +#: templates/js/translated/company.js:323 templates/js/translated/part.js:1421 +#: templates/js/translated/pricing.js:492 +#: templates/js/translated/purchase_order.js:1750 +#: templates/js/translated/purchase_order.js:1933 +msgid "SKU" +msgstr "" + +#: company/models.py:529 part/serializers.py:354 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:536 +msgid "Select manufacturer part" +msgstr "选择制造商商品" + +#: company/models.py:542 +msgid "URL for external supplier part link" +msgstr "外部供货商商品链接URL" + +#: company/models.py:548 +msgid "Supplier part description" +msgstr "供应商商品描述" + +#: company/models.py:553 company/templates/company/supplier_part.html:175 +#: part/admin.py:279 part/models.py:3605 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:393 +msgid "Note" +msgstr "备注" + +#: company/models.py:557 part/models.py:1910 +msgid "base cost" +msgstr "" + +#: company/models.py:557 part/models.py:1910 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "最低收费(例如库存费)" + +#: company/models.py:559 company/templates/company/supplier_part.html:161 +#: stock/admin.py:119 stock/models.py:694 +#: stock/templates/stock/item_base.html:241 +#: templates/js/translated/company.js:1241 +#: templates/js/translated/stock.js:2130 +msgid "Packaging" +msgstr "打包" + +#: company/models.py:559 +msgid "Part packaging" +msgstr "商品打包" + +#: company/models.py:562 company/serializers.py:319 +#: company/templates/company/supplier_part.html:168 +#: templates/js/translated/company.js:1246 templates/js/translated/part.js:1456 +#: templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:250 +#: templates/js/translated/purchase_order.js:778 +#: templates/js/translated/purchase_order.js:1022 +#: templates/js/translated/purchase_order.js:1989 +#: templates/js/translated/purchase_order.js:2006 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:563 +msgid "Unit quantity supplied in a single pack" +msgstr "" + +#: company/models.py:569 part/models.py:1912 +msgid "multiple" +msgstr "" + +#: company/models.py:569 +msgid "Order multiple" +msgstr "" + +#: company/models.py:577 company/templates/company/supplier_part.html:115 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/bom.js:1123 templates/js/translated/build.js:1885 +#: templates/js/translated/build.js:2792 +#: templates/js/translated/model_renderers.js:199 +#: templates/js/translated/part.js:613 templates/js/translated/part.js:615 +#: templates/js/translated/part.js:620 +#: templates/js/translated/table_filters.js:238 +msgid "Available" +msgstr "空闲" + +#: company/models.py:578 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:582 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:583 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:96 +msgid "Default currency used for this supplier" +msgstr "该公司使用的默认货币" + +#: company/templates/company/company_base.html:22 +#: templates/js/translated/purchase_order.js:178 +msgid "Create Purchase Order" +msgstr "创建采购订单" + +#: company/templates/company/company_base.html:28 +msgid "Company actions" +msgstr "" + +#: company/templates/company/company_base.html:33 +msgid "Edit company information" +msgstr "编辑公司信息" + +#: company/templates/company/company_base.html:34 +#: templates/js/translated/company.js:422 +msgid "Edit Company" +msgstr "编辑公司信息" + +#: company/templates/company/company_base.html:38 +msgid "Delete company" +msgstr "" + +#: company/templates/company/company_base.html:39 +#: company/templates/company/company_base.html:163 +msgid "Delete Company" +msgstr "删除该公司" + +#: company/templates/company/company_base.html:56 +#: part/templates/part/part_thumb.html:12 +msgid "Upload new image" +msgstr "上传新图片" + +#: company/templates/company/company_base.html:59 +#: part/templates/part/part_thumb.html:14 +msgid "Download image from URL" +msgstr "从 URL 下载图片" + +#: company/templates/company/company_base.html:61 +#: part/templates/part/part_thumb.html:16 +msgid "Delete image" +msgstr "" + +#: company/templates/company/company_base.html:87 order/models.py:748 +#: order/models.py:1687 order/templates/order/return_order_base.html:133 +#: order/templates/order/sales_order_base.html:144 stock/models.py:713 +#: stock/models.py:714 stock/serializers.py:796 +#: stock/templates/stock/item_base.html:395 +#: templates/email/overdue_sales_order.html:16 +#: templates/js/translated/company.js:480 +#: templates/js/translated/return_order.js:254 +#: templates/js/translated/sales_order.js:722 +#: templates/js/translated/stock.js:2738 +#: templates/js/translated/table_filters.js:514 +msgid "Customer" +msgstr "客户" + +#: company/templates/company/company_base.html:112 +msgid "Uses default currency" +msgstr "使用默认货币" + +#: company/templates/company/company_base.html:126 +msgid "Phone" +msgstr "电话" + +#: company/templates/company/company_base.html:206 +#: part/templates/part/part_base.html:529 +msgid "Remove Image" +msgstr "" + +#: company/templates/company/company_base.html:207 +msgid "Remove associated image from this company" +msgstr "" + +#: company/templates/company/company_base.html:209 +#: part/templates/part/part_base.html:532 +#: templates/InvenTree/settings/user.html:87 +#: templates/InvenTree/settings/user.html:149 +msgid "Remove" +msgstr "" + +#: company/templates/company/company_base.html:238 +#: part/templates/part/part_base.html:561 +msgid "Upload Image" +msgstr "上传图片" + +#: company/templates/company/company_base.html:253 +#: part/templates/part/part_base.html:616 +msgid "Download Image" +msgstr "下载图片" + +#: company/templates/company/detail.html:15 +#: company/templates/company/manufacturer_part_sidebar.html:7 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:177 +msgid "Supplier Parts" +msgstr "供应商商品" + +#: company/templates/company/detail.html:19 +msgid "Create new supplier part" +msgstr "创建新的供应商商品" + +#: company/templates/company/detail.html:20 +#: company/templates/company/manufacturer_part.html:123 +#: part/templates/part/detail.html:381 +msgid "New Supplier Part" +msgstr "新建供应商商品" + +#: company/templates/company/detail.html:37 +#: company/templates/company/detail.html:85 +#: part/templates/part/category.html:183 +msgid "Order parts" +msgstr "订购商品" + +#: company/templates/company/detail.html:42 +#: company/templates/company/detail.html:90 +msgid "Delete parts" +msgstr "删除商品" + +#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:91 +msgid "Delete Parts" +msgstr "删除商品" + +#: company/templates/company/detail.html:62 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:181 +msgid "Manufacturer Parts" +msgstr "制造商商品" + +#: company/templates/company/detail.html:66 +msgid "Create new manufacturer part" +msgstr "新建制造商商品" + +#: company/templates/company/detail.html:67 part/templates/part/detail.html:411 +msgid "New Manufacturer Part" +msgstr "新建制造商商品" + +#: company/templates/company/detail.html:108 +msgid "Supplier Stock" +msgstr "供货商库存" + +#: company/templates/company/detail.html:118 +#: company/templates/company/sidebar.html:12 +#: company/templates/company/supplier_part_sidebar.html:7 +#: order/templates/order/order_base.html:13 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:12 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:35 +#: templates/InvenTree/index.html:252 templates/InvenTree/search.html:200 +#: templates/InvenTree/settings/sidebar.html:51 +#: templates/js/translated/search.js:235 templates/navbar.html:50 +#: users/models.py:43 +msgid "Purchase Orders" +msgstr "采购订单" + +#: company/templates/company/detail.html:122 +#: order/templates/order/purchase_orders.html:17 +msgid "Create new purchase order" +msgstr "新建采购订单" + +#: company/templates/company/detail.html:123 +#: order/templates/order/purchase_orders.html:18 +msgid "New Purchase Order" +msgstr "新建采购订单" + +#: company/templates/company/detail.html:146 +#: company/templates/company/sidebar.html:21 +#: order/templates/order/sales_order_base.html:13 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:15 +#: part/templates/part/detail.html:131 part/templates/part/part_sidebar.html:39 +#: templates/InvenTree/index.html:283 templates/InvenTree/search.html:220 +#: templates/InvenTree/settings/sidebar.html:53 +#: templates/js/translated/search.js:249 templates/navbar.html:62 +#: users/models.py:44 +msgid "Sales Orders" +msgstr "销售订单" + +#: company/templates/company/detail.html:150 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "新建销售订单" + +#: company/templates/company/detail.html:151 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "新建销售订单" + +#: company/templates/company/detail.html:173 +#: templates/js/translated/build.js:1725 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/detail.html:191 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:262 templates/navbar.html:65 +#: users/models.py:45 +#, fuzzy +#| msgid "Returned" +msgid "Return Orders" +msgstr "已退回" + +#: company/templates/company/detail.html:195 +#: order/templates/order/return_orders.html:21 +#, fuzzy +#| msgid "Create new sales order" +msgid "Create new return order" +msgstr "新建销售订单" + +#: company/templates/company/detail.html:196 +#: order/templates/order/return_orders.html:22 +#, fuzzy +#| msgid "New Build Order" +msgid "New Return Order" +msgstr "新建生产订单" + +#: company/templates/company/detail.html:236 +#, fuzzy +#| msgid "Company Notes" +msgid "Company Contacts" +msgstr "公司备注" + +#: company/templates/company/detail.html:240 +#: company/templates/company/detail.html:241 +#, fuzzy +#| msgid "Contact" +msgid "Add Contact" +msgstr "联系人" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "供应商列表" + +#: company/templates/company/manufacturer_part.html:15 company/views.py:38 +#: templates/InvenTree/search.html:181 templates/navbar.html:49 +msgid "Manufacturers" +msgstr "制造商" + +#: company/templates/company/manufacturer_part.html:35 +#: company/templates/company/supplier_part.html:215 +#: part/templates/part/detail.html:111 part/templates/part/part_base.html:85 +msgid "Order part" +msgstr "订购商品" + +#: company/templates/company/manufacturer_part.html:39 +#: templates/js/translated/company.js:986 +msgid "Edit manufacturer part" +msgstr "编辑制造商商品" + +#: company/templates/company/manufacturer_part.html:43 +#: templates/js/translated/company.js:987 +msgid "Delete manufacturer part" +msgstr "删除生产商商品" + +#: company/templates/company/manufacturer_part.html:65 +#: company/templates/company/supplier_part.html:98 +msgid "Internal Part" +msgstr "内部商品" + +#: company/templates/company/manufacturer_part.html:95 +msgid "No manufacturer information available" +msgstr "" + +#: company/templates/company/manufacturer_part.html:119 +#: company/templates/company/supplier_part.html:15 company/views.py:32 +#: part/admin.py:60 part/templates/part/part_sidebar.html:33 +#: templates/InvenTree/search.html:191 templates/navbar.html:48 +msgid "Suppliers" +msgstr "供应商" + +#: company/templates/company/manufacturer_part.html:136 +#: part/templates/part/detail.html:392 +msgid "Delete supplier parts" +msgstr "删除供应商商品" + +#: company/templates/company/manufacturer_part.html:136 +#: company/templates/company/manufacturer_part.html:183 +#: part/templates/part/detail.html:393 part/templates/part/detail.html:423 +#: templates/js/translated/forms.js:499 templates/js/translated/helpers.js:58 +#: templates/js/translated/part.js:313 templates/js/translated/pricing.js:611 +#: templates/js/translated/stock.js:186 users/models.py:243 +msgid "Delete" +msgstr "删除" + +#: company/templates/company/manufacturer_part.html:166 +#: company/templates/company/manufacturer_part_sidebar.html:5 +#: part/templates/part/category_sidebar.html:19 +#: part/templates/part/detail.html:208 part/templates/part/part_sidebar.html:8 +msgid "Parameters" +msgstr "参数" + +#: company/templates/company/manufacturer_part.html:170 +#: part/templates/part/detail.html:213 +#: templates/InvenTree/settings/category.html:12 +#: templates/InvenTree/settings/part.html:64 +msgid "New Parameter" +msgstr "新建参数" + +#: company/templates/company/manufacturer_part.html:183 +msgid "Delete parameters" +msgstr "删除参数" + +#: company/templates/company/manufacturer_part.html:227 +#: part/templates/part/detail.html:872 +msgid "Add Parameter" +msgstr "添加参数" + +#: company/templates/company/sidebar.html:6 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/sidebar.html:10 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/sidebar.html:16 +msgid "Supplied Stock Items" +msgstr "" + +#: company/templates/company/sidebar.html:25 +msgid "Assigned Stock Items" +msgstr "" + +#: company/templates/company/sidebar.html:33 +#, fuzzy +#| msgid "Contact" +msgid "Contacts" +msgstr "联系人" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 stock/models.py:677 +#: stock/templates/stock/item_base.html:234 +#: templates/js/translated/company.js:1195 +#: templates/js/translated/purchase_order.js:698 +#: templates/js/translated/stock.js:1990 +msgid "Supplier Part" +msgstr "供应商商品" + +#: company/templates/company/supplier_part.html:51 +msgid "Supplier part actions" +msgstr "" + +#: company/templates/company/supplier_part.html:56 +#: company/templates/company/supplier_part.html:57 +#: company/templates/company/supplier_part.html:216 +#: part/templates/part/detail.html:112 +msgid "Order Part" +msgstr "订购商品" + +#: company/templates/company/supplier_part.html:61 +#: company/templates/company/supplier_part.html:62 +msgid "Update Availability" +msgstr "" + +#: company/templates/company/supplier_part.html:64 +#: company/templates/company/supplier_part.html:65 +#: templates/js/translated/company.js:268 +msgid "Edit Supplier Part" +msgstr "编辑供应商商品" + +#: company/templates/company/supplier_part.html:69 +#: company/templates/company/supplier_part.html:70 +#: templates/js/translated/company.js:243 +msgid "Duplicate Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:74 +msgid "Delete Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:75 +msgid "Delete Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:134 +msgid "No supplier information available" +msgstr "" + +#: company/templates/company/supplier_part.html:194 +msgid "Supplier Part Stock" +msgstr "供货商商品库存" + +#: company/templates/company/supplier_part.html:197 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:197 +msgid "Create new stock item" +msgstr "" + +#: company/templates/company/supplier_part.html:198 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:198 +#: templates/js/translated/stock.js:471 +msgid "New Stock Item" +msgstr "" + +#: company/templates/company/supplier_part.html:211 +msgid "Supplier Part Orders" +msgstr "供应商商品订单" + +#: company/templates/company/supplier_part.html:236 +msgid "Pricing Information" +msgstr "价格信息" + +#: company/templates/company/supplier_part.html:241 +#: templates/js/translated/company.js:373 +#: templates/js/translated/pricing.js:666 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part.html:268 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:279 +msgid "Link Barcode to Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:354 +msgid "Update Part Availability" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:5 part/tasks.py:288 +#: part/templates/part/category.html:199 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:47 +#: stock/templates/stock/location.html:168 +#: stock/templates/stock/location.html:182 +#: stock/templates/stock/location.html:194 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:977 +#: templates/js/translated/search.js:202 templates/js/translated/stock.js:2569 +#: users/models.py:41 +msgid "Stock Items" +msgstr "库存项" + +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "供应商商品价格" + +#: company/views.py:33 +msgid "New Supplier" +msgstr "新增供应商" + +#: company/views.py:39 +msgid "New Manufacturer" +msgstr "新建制造商" + +#: company/views.py:44 templates/InvenTree/search.html:211 +#: templates/navbar.html:60 +msgid "Customers" +msgstr "客户信息" + +#: company/views.py:45 +msgid "New Customer" +msgstr "新建客户" + +#: company/views.py:52 templates/js/translated/search.js:222 +msgid "Companies" +msgstr "公司" + +#: company/views.py:53 +msgid "New Company" +msgstr "新建公司信息" + +#: label/models.py:103 +msgid "Label name" +msgstr "标签名称" + +#: label/models.py:110 +msgid "Label description" +msgstr "标签说明" + +#: label/models.py:117 +msgid "Label" +msgstr "标签" + +#: label/models.py:118 +msgid "Label template file" +msgstr "标签模板文件" + +#: label/models.py:124 report/models.py:264 +msgid "Enabled" +msgstr "已启用" + +#: label/models.py:125 +msgid "Label template is enabled" +msgstr "标签模板已启用" + +#: label/models.py:130 +msgid "Width [mm]" +msgstr "宽度 [mm]" + +#: label/models.py:131 +msgid "Label width, specified in mm" +msgstr "标注宽度,以毫米为单位。" + +#: label/models.py:137 +msgid "Height [mm]" +msgstr "高度 [mm]" + +#: label/models.py:138 +msgid "Label height, specified in mm" +msgstr "标注高度,以毫米为单位。" + +#: label/models.py:144 report/models.py:257 +msgid "Filename Pattern" +msgstr "文件名样式" + +#: label/models.py:145 +msgid "Pattern for generating label filenames" +msgstr "" + +#: label/models.py:234 +msgid "Query filters (comma-separated list of key=value pairs)," +msgstr "查询筛选器 (逗号分隔的键值对列表)" + +#: label/models.py:235 label/models.py:276 label/models.py:304 +#: report/models.py:285 report/models.py:443 report/models.py:481 +#: report/models.py:519 +msgid "Filters" +msgstr "筛选器" + +#: label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "查询筛选器 (逗号分隔的键值对列表" + +#: label/models.py:303 +msgid "Part query filters (comma-separated value of key=value pairs)" +msgstr "商品查询筛选器 (逗号分隔的键值对列表)" + +#: order/api.py:225 +msgid "No matching purchase order found" +msgstr "" + +#: order/api.py:1420 order/models.py:1141 order/models.py:1225 +#: order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:18 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:177 +#: templates/email/overdue_purchase_order.html:15 +#: templates/js/translated/part.js:1380 templates/js/translated/pricing.js:772 +#: templates/js/translated/purchase_order.js:108 +#: templates/js/translated/purchase_order.js:699 +#: templates/js/translated/purchase_order.js:1586 +#: templates/js/translated/stock.js:1970 templates/js/translated/stock.js:2685 +msgid "Purchase Order" +msgstr "" + +#: order/api.py:1424 +msgid "Unknown" +msgstr "" + +#: order/models.py:67 report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:302 +#: templates/js/translated/purchase_order.js:2030 +#: templates/js/translated/sales_order.js:1739 +msgid "Total Price" +msgstr "" + +#: order/models.py:68 +#, fuzzy +#| msgid "User or group responsible for this order" +msgid "Total price for this order" +msgstr "负责此订单的用户或群组" + +#: order/models.py:178 +#, fuzzy +#| msgid "Build output does not match the parent build" +msgid "Contact does not match selected company" +msgstr "生产产出与对应生产不匹配" + +#: order/models.py:200 +#, fuzzy +#| msgid "Description (optional)" +msgid "Order description (optional)" +msgstr "描述 (可选)" + +#: order/models.py:202 order/models.py:1063 order/models.py:1413 +msgid "Link to external page" +msgstr "" + +#: order/models.py:207 +msgid "Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:216 +msgid "Created By" +msgstr "" + +#: order/models.py:223 +msgid "User or group responsible for this order" +msgstr "负责此订单的用户或群组" + +#: order/models.py:233 +#, fuzzy +#| msgid "Priority of this build order" +msgid "Point of contact for this order" +msgstr "此构建订单的优先级" + +#: order/models.py:237 +msgid "Order notes" +msgstr "" + +#: order/models.py:328 order/models.py:735 +msgid "Order reference" +msgstr "" + +#: order/models.py:336 order/models.py:760 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:351 +msgid "Company from which the items are being ordered" +msgstr "订购该商品的公司" + +#: order/models.py:359 order/templates/order/order_base.html:151 +#: templates/js/translated/purchase_order.js:1611 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:359 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:366 +msgid "received by" +msgstr "" + +#: order/models.py:371 order/models.py:1710 +msgid "Issue Date" +msgstr "" + +#: order/models.py:372 order/models.py:1711 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:378 order/models.py:1717 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:413 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:566 +msgid "Quantity must be a positive number" +msgstr "数量必须大于0" + +#: order/models.py:749 +msgid "Company to which the items are being sold" +msgstr "向其出售该商品的公司" + +#: order/models.py:768 order/models.py:1704 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:768 order/models.py:1705 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:770 order/models.py:1371 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:932 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:777 +msgid "shipped by" +msgstr "" + +#: order/models.py:826 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "" + +#: order/models.py:830 +#, fuzzy +#| msgid "Build Order is ready to mark as completed" +msgid "Only an open order can be marked as complete" +msgstr "构建订单已准备好标记为已完成" + +#: order/models.py:833 templates/js/translated/sales_order.js:441 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:836 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:1043 +msgid "Item quantity" +msgstr "" + +#: order/models.py:1056 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1058 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1069 +msgid "Target date for this line item (leave blank to use the target date from the order)" +msgstr "" + +#: order/models.py:1086 +msgid "Context" +msgstr "" + +#: order/models.py:1087 +msgid "Additional context for this line" +msgstr "" + +#: order/models.py:1096 +msgid "Unit price" +msgstr "" + +#: order/models.py:1126 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:1134 +msgid "deleted" +msgstr "" + +#: order/models.py:1140 order/models.py:1225 order/models.py:1266 +#: order/models.py:1365 order/models.py:1500 order/models.py:1857 +#: order/models.py:1904 templates/js/translated/sales_order.js:1383 +msgid "Order" +msgstr "" + +#: order/models.py:1159 +msgid "Supplier part" +msgstr "供应商商品" + +#: order/models.py:1166 order/templates/order/order_base.html:199 +#: templates/js/translated/part.js:1504 templates/js/translated/part.js:1536 +#: templates/js/translated/purchase_order.js:1225 +#: templates/js/translated/purchase_order.js:2074 +#: templates/js/translated/return_order.js:706 +#: templates/js/translated/table_filters.js:48 +#: templates/js/translated/table_filters.js:421 +msgid "Received" +msgstr "" + +#: order/models.py:1167 +msgid "Number of items received" +msgstr "" + +#: order/models.py:1174 stock/models.py:810 stock/serializers.py:229 +#: stock/templates/stock/item_base.html:184 +#: templates/js/translated/stock.js:2021 +msgid "Purchase Price" +msgstr "采购价格" + +#: order/models.py:1175 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:1188 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "" + +#: order/models.py:1254 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "" + +#: order/models.py:1259 +msgid "Only salable parts can be assigned to a sales order" +msgstr "" + +#: order/models.py:1285 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:128 templates/js/translated/pricing.js:922 +msgid "Sale Price" +msgstr "销售价格" + +#: order/models.py:1286 +msgid "Unit sale price" +msgstr "" + +#: order/models.py:1296 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1372 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1379 +msgid "Checked By" +msgstr "" + +#: order/models.py:1380 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1387 order/models.py:1576 order/serializers.py:1224 +#: order/serializers.py:1352 templates/js/translated/model_renderers.js:409 +msgid "Shipment" +msgstr "" + +#: order/models.py:1388 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1392 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1398 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1399 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1406 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1407 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1425 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1428 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1535 order/models.py:1537 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:1541 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:1543 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:1546 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:1556 order/serializers.py:1086 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:1559 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1560 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1568 +msgid "Line" +msgstr "" + +#: order/models.py:1577 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1590 order/models.py:1865 +#: templates/js/translated/return_order.js:664 +msgid "Item" +msgstr "" + +#: order/models.py:1591 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:1594 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/models.py:1674 +#, fuzzy +#| msgid "Build Order Reference" +msgid "Return Order reference" +msgstr "相关生产订单" + +#: order/models.py:1688 +#, fuzzy +#| msgid "Company from which the items are being ordered" +msgid "Company from which items are being returned" +msgstr "订购该商品的公司" + +#: order/models.py:1699 +msgid "Return order status" +msgstr "" + +#: order/models.py:1850 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:1858 order/models.py:1904 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:239 +#: templates/js/translated/stock.js:2720 +#, fuzzy +#| msgid "Returned" +msgid "Return Order" +msgstr "已退回" + +#: order/models.py:1866 +#, fuzzy +#| msgid "Returned from customer" +msgid "Select item to return from customer" +msgstr "从客户退货" + +#: order/models.py:1871 +msgid "Received Date" +msgstr "" + +#: order/models.py:1872 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:1883 templates/js/translated/return_order.js:675 +#: templates/js/translated/table_filters.js:51 +msgid "Outcome" +msgstr "" + +#: order/models.py:1883 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:1889 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:228 +msgid "Order cannot be cancelled" +msgstr "无法取消订单" + +#: order/serializers.py:243 order/serializers.py:1104 +msgid "Allow order to be closed with incomplete line items" +msgstr "" + +#: order/serializers.py:254 order/serializers.py:1115 +msgid "Order has incomplete line items" +msgstr "" + +#: order/serializers.py:367 +msgid "Order is not open" +msgstr "" + +#: order/serializers.py:385 +msgid "Purchase price currency" +msgstr "" + +#: order/serializers.py:403 +msgid "Supplier part must be specified" +msgstr "" + +#: order/serializers.py:408 +msgid "Purchase order must be specified" +msgstr "" + +#: order/serializers.py:414 +msgid "Supplier must match purchase order" +msgstr "" + +#: order/serializers.py:415 +msgid "Purchase order must match supplier" +msgstr "" + +#: order/serializers.py:453 order/serializers.py:1192 +msgid "Line Item" +msgstr "" + +#: order/serializers.py:459 +msgid "Line item does not match purchase order" +msgstr "" + +#: order/serializers.py:469 order/serializers.py:590 order/serializers.py:1563 +msgid "Select destination location for received items" +msgstr "" + +#: order/serializers.py:488 templates/js/translated/purchase_order.js:1049 +msgid "Enter batch code for incoming stock items" +msgstr "" + +#: order/serializers.py:496 templates/js/translated/purchase_order.js:1073 +msgid "Enter serial numbers for incoming stock items" +msgstr "" + +#: order/serializers.py:509 templates/js/translated/barcode.js:41 +msgid "Barcode" +msgstr "条形码" + +#: order/serializers.py:510 +#, fuzzy +#| msgid "Scan Barcode" +msgid "Scanned barcode" +msgstr "扫描条形码" + +#: order/serializers.py:526 +msgid "Barcode is already in use" +msgstr "" + +#: order/serializers.py:552 +msgid "An integer quantity must be provided for trackable parts" +msgstr "" + +#: order/serializers.py:606 order/serializers.py:1578 +msgid "Line items must be provided" +msgstr "" + +#: order/serializers.py:623 +msgid "Destination location must be specified" +msgstr "" + +#: order/serializers.py:634 +msgid "Supplied barcode values must be unique" +msgstr "" + +#: order/serializers.py:929 +msgid "Sale price currency" +msgstr "" + +#: order/serializers.py:984 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:1047 order/serializers.py:1201 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:1069 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:1214 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:1236 order/serializers.py:1360 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:1239 order/serializers.py:1363 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:1293 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:1303 +msgid "The following serial numbers are already allocated" +msgstr "" + +#: order/serializers.py:1529 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1536 +#, fuzzy +#| msgid "Build output does not match Build Order" +msgid "Line item does not match return order" +msgstr "生产产出与订单不匹配" + +#: order/serializers.py:1539 +#, fuzzy +#| msgid "This build output has already been completed" +msgid "Line item has already been received" +msgstr "此生产产出已经完成" + +#: order/serializers.py:1571 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1652 +#, fuzzy +#| msgid "Uses default currency" +msgid "Line price currency" +msgstr "使用默认货币" + +#: order/tasks.py:26 +msgid "Overdue Purchase Order" +msgstr "" + +#: order/tasks.py:31 +#, python-brace-format +msgid "Purchase order {po} is now overdue" +msgstr "" + +#: order/tasks.py:89 +msgid "Overdue Sales Order" +msgstr "" + +#: order/tasks.py:94 +#, python-brace-format +msgid "Sales order {so} is now overdue" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Print purchase order report" +msgstr "" + +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:63 +#: order/templates/order/sales_order_base.html:63 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:73 +#: order/templates/order/sales_order_base.html:72 +msgid "Order actions" +msgstr "" + +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:77 +#: order/templates/order/sales_order_base.html:76 +msgid "Edit order" +msgstr "" + +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:79 +#: order/templates/order/sales_order_base.html:78 +msgid "Cancel order" +msgstr "取消订单" + +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/return_order_base.html:84 +#: order/templates/order/sales_order_base.html:84 +#: order/templates/order/sales_order_base.html:85 +#, fuzzy +#| msgid "Build Order" +msgid "Issue Order" +msgstr "生产订单" + +#: order/templates/order/order_base.html:83 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:85 +msgid "Receive Items" +msgstr "" + +#: order/templates/order/order_base.html:87 +#: order/templates/order/return_order_base.html:87 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:88 +#: order/templates/order/return_order_base.html:88 +#: order/templates/order/sales_order_base.html:94 +msgid "Complete Order" +msgstr "" + +#: order/templates/order/order_base.html:110 +#: order/templates/order/return_order_base.html:102 +#: order/templates/order/sales_order_base.html:107 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:115 +#: order/templates/order/return_order_base.html:107 +#: order/templates/order/sales_order_base.html:112 +msgid "Order Description" +msgstr "" + +#: order/templates/order/order_base.html:121 +#: order/templates/order/return_order_base.html:115 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:144 +msgid "No suppplier information available" +msgstr "" + +#: order/templates/order/order_base.html:157 +#: order/templates/order/sales_order_base.html:157 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:163 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:182 +#: order/templates/order/return_order_base.html:159 +#: report/templates/report/inventree_build_order_base.html:121 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_base.html:220 +msgid "Total cost" +msgstr "" + +#: order/templates/order/order_base.html:224 +#: order/templates/order/return_order_base.html:194 +#: order/templates/order/sales_order_base.html:232 +msgid "Total cost could not be calculated" +msgstr "" + +#: order/templates/order/order_base.html:330 +#, fuzzy +#| msgid "Purchase Orders" +msgid "Purchase Order QR Code" +msgstr "采购订单" + +#: order/templates/order/order_base.html:342 +#, fuzzy +#| msgid "Create Purchase Order" +msgid "Link Barcode to Purchase Order" +msgstr "创建采购订单" + +#: order/templates/order/order_wizard/match_fields.html:9 +#: part/templates/part/import_wizard/ajax_match_fields.html:9 +#: part/templates/part/import_wizard/match_fields.html:9 +#: templates/patterns/wizard/match_fields.html:8 +msgid "Missing selections for the following required columns" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:20 +#: part/templates/part/import_wizard/ajax_match_fields.html:20 +#: part/templates/part/import_wizard/match_fields.html:20 +#: templates/patterns/wizard/match_fields.html:19 +msgid "Duplicate selections found, see below. Fix them then retry submitting." +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:29 +#: order/templates/order/order_wizard/match_parts.html:21 +#: part/templates/part/import_wizard/match_fields.html:29 +#: part/templates/part/import_wizard/match_references.html:21 +#: templates/patterns/wizard/match_fields.html:28 +msgid "Submit Selections" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:35 +#: part/templates/part/import_wizard/ajax_match_fields.html:28 +#: part/templates/part/import_wizard/match_fields.html:35 +#: templates/patterns/wizard/match_fields.html:34 +msgid "File Fields" +msgstr "文件字段" + +#: order/templates/order/order_wizard/match_fields.html:42 +#: part/templates/part/import_wizard/ajax_match_fields.html:35 +#: part/templates/part/import_wizard/match_fields.html:42 +#: templates/patterns/wizard/match_fields.html:41 +msgid "Remove column" +msgstr "移除列" + +#: order/templates/order/order_wizard/match_fields.html:60 +#: part/templates/part/import_wizard/ajax_match_fields.html:53 +#: part/templates/part/import_wizard/match_fields.html:60 +#: templates/patterns/wizard/match_fields.html:59 +msgid "Duplicate selection" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:71 +#: order/templates/order/order_wizard/match_parts.html:52 +#: part/templates/part/import_wizard/ajax_match_fields.html:64 +#: part/templates/part/import_wizard/ajax_match_references.html:42 +#: part/templates/part/import_wizard/match_fields.html:71 +#: part/templates/part/import_wizard/match_references.html:49 +#: templates/js/translated/bom.js:102 templates/js/translated/build.js:485 +#: templates/js/translated/build.js:646 templates/js/translated/build.js:2097 +#: templates/js/translated/purchase_order.js:643 +#: templates/js/translated/purchase_order.js:1155 +#: templates/js/translated/return_order.js:452 +#: templates/js/translated/sales_order.js:1005 +#: templates/js/translated/stock.js:660 templates/js/translated/stock.js:829 +#: templates/patterns/wizard/match_fields.html:70 +msgid "Remove row" +msgstr "移除行" + +#: order/templates/order/order_wizard/match_parts.html:12 +#: part/templates/part/import_wizard/ajax_match_references.html:12 +#: part/templates/part/import_wizard/match_references.html:12 +msgid "Errors exist in the submitted data" +msgstr "提交数据中存在错误" + +#: order/templates/order/order_wizard/match_parts.html:28 +#: part/templates/part/import_wizard/ajax_match_references.html:21 +#: part/templates/part/import_wizard/match_references.html:28 +msgid "Row" +msgstr "行" + +#: order/templates/order/order_wizard/match_parts.html:29 +msgid "Select Supplier Part" +msgstr "选择供应商商品" + +#: order/templates/order/order_wizard/po_upload.html:8 +msgid "Return to Orders" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:13 +msgid "Upload File for Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:14 +msgid "Order is already processed. Files cannot be uploaded." +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:27 +#: part/templates/part/import_wizard/ajax_part_upload.html:10 +#: part/templates/part/import_wizard/part_upload.html:26 +#: templates/patterns/wizard/upload.html:13 +#, python-format +msgid "Step %(step)s of %(count)s" +msgstr "步骤 %(step)s / %(count)s" + +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + +#: order/templates/order/po_sidebar.html:7 +msgid "Received Stock" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:19 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:28 +#: order/templates/order/return_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:24 +#: templates/js/translated/purchase_order.js:370 +#: templates/js/translated/return_order.js:405 +#: templates/js/translated/sales_order.js:179 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/purchase_order_detail.html:33 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:50 +#: order/templates/order/purchase_order_detail.html:51 +#, fuzzy +#| msgid "Delete parameters" +msgid "Delete Line Items" +msgstr "删除参数" + +#: order/templates/order/purchase_order_detail.html:67 +#: order/templates/order/return_order_detail.html:47 +#: order/templates/order/sales_order_detail.html:43 +msgid "Extra Lines" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:73 +#: order/templates/order/return_order_detail.html:53 +#: order/templates/order/sales_order_detail.html:49 +msgid "Add Extra Line" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:93 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:118 +#: order/templates/order/return_order_detail.html:89 +#: order/templates/order/sales_order_detail.html:149 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/return_order_base.html:61 +#, fuzzy +#| msgid "Print build order report" +msgid "Print return order report" +msgstr "打印构建订单报告" + +#: order/templates/order/return_order_base.html:65 +#: order/templates/order/sales_order_base.html:65 +msgid "Print packing list" +msgstr "" + +#: order/templates/order/return_order_base.html:140 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:267 +#: templates/js/translated/sales_order.js:735 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/return_order_base.html:190 +#: order/templates/order/sales_order_base.html:228 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:989 +#: templates/js/translated/purchase_order.js:1649 +#: templates/js/translated/return_order.js:327 +#: templates/js/translated/sales_order.js:781 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:258 +#, fuzzy +#| msgid "Returned" +msgid "Return Order QR Code" +msgstr "已退回" + +#: order/templates/order/return_order_base.html:270 +#, fuzzy +#| msgid "Create Purchase Order" +msgid "Link Barcode to Return Order" +msgstr "创建采购订单" + +#: order/templates/order/return_order_sidebar.html:5 +#, fuzzy +#| msgid "Build Order Details" +msgid "Order Details" +msgstr "生产订单详情" + +#: order/templates/order/sales_order_base.html:61 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:89 +#: order/templates/order/sales_order_base.html:90 +#, fuzzy +#| msgid "Match Items" +msgid "Ship Items" +msgstr "匹配项" + +#: order/templates/order/sales_order_base.html:93 +#: templates/js/translated/sales_order.js:419 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:105 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:305 +#, fuzzy +#| msgid "Sales Order" +msgid "Sales Order QR Code" +msgstr "销售订单" + +#: order/templates/order/sales_order_base.html:317 +#, fuzzy +#| msgid "New Sales Order" +msgid "Link Barcode to Sales Order" +msgstr "新建销售订单" + +#: order/templates/order/sales_order_detail.html:18 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:71 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: templates/attachment_table.html:6 templates/js/translated/bom.js:1232 +#: templates/js/translated/build.js:2000 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:84 +msgid "New Shipment" +msgstr "" + +#: order/views.py:120 +msgid "Match Supplier Parts" +msgstr "" + +#: order/views.py:393 +msgid "Sales order not found" +msgstr "" + +#: order/views.py:399 +msgid "Price not found" +msgstr "" + +#: order/views.py:402 +#, python-brace-format +msgid "Updated {part} unit-price to {price}" +msgstr "" + +#: order/views.py:407 +#, python-brace-format +msgid "Updated {part} unit-price to {price} and quantity to {qty}" +msgstr "" + +#: part/admin.py:33 part/admin.py:273 part/models.py:3471 part/tasks.py:283 +#: stock/admin.py:101 +msgid "Part ID" +msgstr "商品ID" + +#: part/admin.py:34 part/admin.py:275 part/models.py:3475 part/tasks.py:284 +#: stock/admin.py:102 +msgid "Part Name" +msgstr "" + +#: part/admin.py:35 part/tasks.py:285 +msgid "Part Description" +msgstr "" + +#: part/admin.py:36 part/models.py:880 part/templates/part/part_base.html:271 +#: templates/js/translated/part.js:1143 templates/js/translated/part.js:1855 +#: templates/js/translated/stock.js:1769 +msgid "IPN" +msgstr "" + +#: part/admin.py:37 part/models.py:887 part/templates/part/part_base.html:279 +#: report/models.py:177 templates/js/translated/part.js:1148 +#: templates/js/translated/part.js:1861 +msgid "Revision" +msgstr "" + +#: part/admin.py:38 part/admin.py:198 part/models.py:866 +#: part/templates/part/category.html:93 part/templates/part/part_base.html:300 +msgid "Keywords" +msgstr "关键词" + +#: part/admin.py:42 part/admin.py:192 part/tasks.py:286 +msgid "Category ID" +msgstr "类别 ID" + +#: part/admin.py:43 part/admin.py:193 part/tasks.py:287 +msgid "Category Name" +msgstr "" + +#: part/admin.py:44 part/admin.py:197 +msgid "Default Location ID" +msgstr "" + +#: part/admin.py:45 +msgid "Default Supplier ID" +msgstr "" + +#: part/admin.py:47 part/models.py:971 part/templates/part/part_base.html:205 +msgid "Minimum Stock" +msgstr "最低库存" + +#: part/admin.py:61 part/templates/part/part_base.html:199 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/table_filters.js:253 +msgid "In Stock" +msgstr "" + +#: part/admin.py:62 part/bom.py:178 part/templates/part/part_base.html:212 +#: templates/js/translated/bom.js:1163 templates/js/translated/build.js:1940 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1749 +#: templates/js/translated/table_filters.js:96 +msgid "On Order" +msgstr "" + +#: part/admin.py:63 part/templates/part/part_sidebar.html:27 +msgid "Used In" +msgstr "" + +#: part/admin.py:64 templates/js/translated/build.js:1954 +#: templates/js/translated/build.js:2214 templates/js/translated/build.js:2799 +#: templates/js/translated/sales_order.js:1818 +msgid "Allocated" +msgstr "" + +#: part/admin.py:65 part/templates/part/part_base.html:243 stock/admin.py:124 +#: templates/js/translated/part.js:635 templates/js/translated/part.js:1753 +msgid "Building" +msgstr "" + +#: part/admin.py:66 part/models.py:2914 templates/js/translated/part.js:886 +msgid "Minimum Cost" +msgstr "" + +#: part/admin.py:67 part/models.py:2920 templates/js/translated/part.js:896 +msgid "Maximum Cost" +msgstr "" + +#: part/admin.py:195 part/admin.py:270 stock/admin.py:42 stock/admin.py:116 +msgid "Parent ID" +msgstr "" + +#: part/admin.py:196 part/admin.py:272 stock/admin.py:43 +msgid "Parent Name" +msgstr "" + +#: part/admin.py:199 part/templates/part/category.html:87 +#: part/templates/part/category.html:100 +msgid "Category Path" +msgstr "类别路径" + +#: part/admin.py:202 part/models.py:383 part/templates/part/cat_link.html:3 +#: part/templates/part/category.html:23 part/templates/part/category.html:140 +#: part/templates/part/category.html:160 +#: part/templates/part/category_sidebar.html:9 +#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84 +#: templates/InvenTree/settings/sidebar.html:43 +#: templates/js/translated/part.js:2367 templates/js/translated/search.js:160 +#: templates/navbar.html:24 users/models.py:38 +msgid "Parts" +msgstr "商品" + +#: part/admin.py:265 +msgid "BOM Level" +msgstr "" + +#: part/admin.py:267 +msgid "BOM Item ID" +msgstr "" + +#: part/admin.py:271 +msgid "Parent IPN" +msgstr "" + +#: part/admin.py:274 part/models.py:3479 +msgid "Part IPN" +msgstr "" + +#: part/admin.py:280 templates/js/translated/pricing.js:340 +#: templates/js/translated/pricing.js:989 +msgid "Minimum Price" +msgstr "" + +#: part/admin.py:281 templates/js/translated/pricing.js:335 +#: templates/js/translated/pricing.js:997 +msgid "Maximum Price" +msgstr "" + +#: part/api.py:495 +msgid "Incoming Purchase Order" +msgstr "" + +#: part/api.py:515 +msgid "Outgoing Sales Order" +msgstr "" + +#: part/api.py:533 +msgid "Stock produced by Build Order" +msgstr "" + +#: part/api.py:619 +msgid "Stock required for Build Order" +msgstr "" + +#: part/api.py:767 +msgid "Valid" +msgstr "" + +#: part/api.py:768 +msgid "Validate entire Bill of Materials" +msgstr "" + +#: part/api.py:774 +msgid "This option must be selected" +msgstr "" + +#: part/bom.py:175 part/models.py:121 part/models.py:914 +#: part/templates/part/category.html:115 part/templates/part/part_base.html:369 +msgid "Default Location" +msgstr "默认仓储地点" + +#: part/bom.py:176 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:177 part/templates/part/part_base.html:194 +#: templates/js/translated/sales_order.js:1785 +msgid "Available Stock" +msgstr "可用库存" + +#: part/forms.py:48 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:71 part/models.py:3420 part/templates/part/category.html:16 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "商品类别" + +#: part/models.py:72 part/templates/part/category.html:135 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:188 +#: users/models.py:37 +msgid "Part Categories" +msgstr "商品类别" + +#: part/models.py:122 +msgid "Default location for parts in this category" +msgstr "此类别商品的默认仓储地点" + +#: part/models.py:127 stock/models.py:120 templates/js/translated/stock.js:2575 +#: templates/js/translated/table_filters.js:163 +#: templates/js/translated/table_filters.js:182 +msgid "Structural" +msgstr "" + +#: part/models.py:129 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:133 +msgid "Default keywords" +msgstr "" + +#: part/models.py:133 +msgid "Default keywords for parts in this category" +msgstr "此类别商品的默认关键字" + +#: part/models.py:138 stock/models.py:109 +msgid "Icon" +msgstr "" + +#: part/models.py:139 stock/models.py:110 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:158 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:466 +msgid "Invalid choice for parent part" +msgstr "" + +#: part/models.py:508 part/models.py:520 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:592 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "IPN 必须匹配正则表达式 {pat}" + +#: part/models.py:663 +msgid "Stock item with this serial number already exists" +msgstr "" + +#: part/models.py:794 +msgid "Duplicate IPN not allowed in part settings" +msgstr "在商品设置中不允许重复的IPN" + +#: part/models.py:799 +msgid "Part with this Name, IPN and Revision already exists." +msgstr "" + +#: part/models.py:813 +msgid "Parts cannot be assigned to structural part categories!" +msgstr "" + +#: part/models.py:837 part/models.py:3476 +msgid "Part name" +msgstr "商品名称" + +#: part/models.py:843 +msgid "Is Template" +msgstr "" + +#: part/models.py:844 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:854 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:855 part/templates/part/part_base.html:179 +msgid "Variant Of" +msgstr "" + +#: part/models.py:861 +#, fuzzy +#| msgid "Description (optional)" +msgid "Part description (optional)" +msgstr "描述 (可选)" + +#: part/models.py:867 +msgid "Part keywords to improve visibility in search results" +msgstr "提高搜索结果可见性的关键字" + +#: part/models.py:874 part/models.py:3182 part/models.py:3419 +#: part/serializers.py:849 part/templates/part/part_base.html:262 +#: templates/InvenTree/settings/settings_staff_js.html:132 +#: templates/js/translated/notification.js:50 +#: templates/js/translated/part.js:1885 templates/js/translated/part.js:2097 +msgid "Category" +msgstr "类别" + +#: part/models.py:875 +msgid "Part category" +msgstr "商品类别" + +#: part/models.py:881 +msgid "Internal Part Number" +msgstr "内部商品编号" + +#: part/models.py:886 +msgid "Part revision or version number" +msgstr "商品版本号" + +#: part/models.py:912 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:957 part/templates/part/part_base.html:378 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:958 +msgid "Default supplier part" +msgstr "默认供应商商品" + +#: part/models.py:965 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:966 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:972 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:979 +msgid "Units of measure for this part" +msgstr "" + +#: part/models.py:985 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:991 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:997 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:1002 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:1007 +msgid "Can this part be sold to customers?" +msgstr "此商品可以销售给客户吗?" + +#: part/models.py:1012 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:1017 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "这是一个虚拟商品,如软件产品或许可证吗?" + +#: part/models.py:1019 +msgid "Part notes" +msgstr "" + +#: part/models.py:1021 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1021 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:1024 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:1026 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:1030 +msgid "Creation User" +msgstr "新建用户" + +#: part/models.py:1032 +msgid "User responsible for this part" +msgstr "" + +#: part/models.py:1036 part/templates/part/part_base.html:341 +#: stock/templates/stock/item_base.html:441 +#: templates/js/translated/part.js:1947 +msgid "Last Stocktake" +msgstr "" + +#: part/models.py:1912 +msgid "Sell multiple" +msgstr "" + +#: part/models.py:2837 +msgid "Currency used to cache pricing calculations" +msgstr "" + +#: part/models.py:2854 +msgid "Minimum BOM Cost" +msgstr "" + +#: part/models.py:2855 +msgid "Minimum cost of component parts" +msgstr "" + +#: part/models.py:2860 +msgid "Maximum BOM Cost" +msgstr "" + +#: part/models.py:2861 +msgid "Maximum cost of component parts" +msgstr "" + +#: part/models.py:2866 +msgid "Minimum Purchase Cost" +msgstr "" + +#: part/models.py:2867 +msgid "Minimum historical purchase cost" +msgstr "" + +#: part/models.py:2872 +msgid "Maximum Purchase Cost" +msgstr "" + +#: part/models.py:2873 +msgid "Maximum historical purchase cost" +msgstr "" + +#: part/models.py:2878 +msgid "Minimum Internal Price" +msgstr "" + +#: part/models.py:2879 +msgid "Minimum cost based on internal price breaks" +msgstr "" + +#: part/models.py:2884 +msgid "Maximum Internal Price" +msgstr "" + +#: part/models.py:2885 +msgid "Maximum cost based on internal price breaks" +msgstr "" + +#: part/models.py:2890 +msgid "Minimum Supplier Price" +msgstr "" + +#: part/models.py:2891 +msgid "Minimum price of part from external suppliers" +msgstr "" + +#: part/models.py:2896 +msgid "Maximum Supplier Price" +msgstr "" + +#: part/models.py:2897 +msgid "Maximum price of part from external suppliers" +msgstr "" + +#: part/models.py:2902 +msgid "Minimum Variant Cost" +msgstr "" + +#: part/models.py:2903 +msgid "Calculated minimum cost of variant parts" +msgstr "" + +#: part/models.py:2908 +msgid "Maximum Variant Cost" +msgstr "" + +#: part/models.py:2909 +msgid "Calculated maximum cost of variant parts" +msgstr "" + +#: part/models.py:2915 +msgid "Calculated overall minimum cost" +msgstr "" + +#: part/models.py:2921 +msgid "Calculated overall maximum cost" +msgstr "" + +#: part/models.py:2926 +msgid "Minimum Sale Price" +msgstr "" + +#: part/models.py:2927 +msgid "Minimum sale price based on price breaks" +msgstr "" + +#: part/models.py:2932 +msgid "Maximum Sale Price" +msgstr "" + +#: part/models.py:2933 +msgid "Maximum sale price based on price breaks" +msgstr "" + +#: part/models.py:2938 +msgid "Minimum Sale Cost" +msgstr "" + +#: part/models.py:2939 +msgid "Minimum historical sale price" +msgstr "" + +#: part/models.py:2944 +msgid "Maximum Sale Cost" +msgstr "" + +#: part/models.py:2945 +msgid "Maximum historical sale price" +msgstr "" + +#: part/models.py:2964 +msgid "Part for stocktake" +msgstr "" + +#: part/models.py:2969 +msgid "Item Count" +msgstr "" + +#: part/models.py:2970 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:2977 +msgid "Total available stock at time of stocktake" +msgstr "" + +#: part/models.py:2981 part/models.py:3064 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 +#: templates/InvenTree/settings/plugin.html:63 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/InvenTree/settings/settings_staff_js.html:368 +#: templates/js/translated/part.js:1002 templates/js/translated/pricing.js:794 +#: templates/js/translated/pricing.js:915 +#: templates/js/translated/purchase_order.js:1628 +#: templates/js/translated/stock.js:2613 +msgid "Date" +msgstr "" + +#: part/models.py:2982 +msgid "Date stocktake was performed" +msgstr "" + +#: part/models.py:2990 +msgid "Additional notes" +msgstr "" + +#: part/models.py:2998 +msgid "User who performed this stocktake" +msgstr "" + +#: part/models.py:3003 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3004 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3009 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3071 templates/InvenTree/settings/settings_staff_js.html:357 +msgid "Report" +msgstr "" + +#: part/models.py:3072 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3077 templates/InvenTree/settings/settings_staff_js.html:364 +msgid "Part Count" +msgstr "" + +#: part/models.py:3078 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3086 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3222 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3239 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:3259 templates/js/translated/part.js:2434 +msgid "Test Name" +msgstr "" + +#: part/models.py:3260 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3265 +msgid "Test Description" +msgstr "" + +#: part/models.py:3266 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3271 templates/js/translated/part.js:2443 +#: templates/js/translated/table_filters.js:366 +msgid "Required" +msgstr "" + +#: part/models.py:3272 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3277 templates/js/translated/part.js:2451 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3278 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3283 templates/js/translated/part.js:2458 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3284 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:3325 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3333 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3337 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:3342 +msgid "Parameter description" +msgstr "" + +#: part/models.py:3375 +msgid "Parent Part" +msgstr "" + +#: part/models.py:3377 part/models.py:3425 part/models.py:3426 +#: templates/InvenTree/settings/settings_staff_js.html:127 +msgid "Parameter Template" +msgstr "参数模板" + +#: part/models.py:3379 +msgid "Data" +msgstr "" + +#: part/models.py:3379 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:3430 templates/InvenTree/settings/settings_staff_js.html:136 +msgid "Default Value" +msgstr "默认值" + +#: part/models.py:3431 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:3468 +msgid "Part ID or part name" +msgstr "" + +#: part/models.py:3472 +msgid "Unique part ID value" +msgstr "" + +#: part/models.py:3480 +msgid "Part IPN value" +msgstr "" + +#: part/models.py:3483 +msgid "Level" +msgstr "" + +#: part/models.py:3484 +msgid "BOM level" +msgstr "" + +#: part/models.py:3568 +msgid "Select parent part" +msgstr "" + +#: part/models.py:3576 +msgid "Sub part" +msgstr "" + +#: part/models.py:3577 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:3583 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:3587 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:941 templates/js/translated/bom.js:994 +#: templates/js/translated/build.js:1862 +#: templates/js/translated/table_filters.js:112 +#: templates/js/translated/table_filters.js:140 +msgid "Optional" +msgstr "可选项" + +#: part/models.py:3588 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:3593 templates/js/translated/bom.js:937 +#: templates/js/translated/bom.js:1003 templates/js/translated/build.js:1853 +#: templates/js/translated/table_filters.js:116 +msgid "Consumable" +msgstr "" + +#: part/models.py:3594 +msgid "This BOM item is consumable (it is not tracked in build orders)" +msgstr "" + +#: part/models.py:3598 part/templates/part/upload_bom.html:55 +msgid "Overage" +msgstr "" + +#: part/models.py:3599 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:3602 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:3605 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:3609 +msgid "Checksum" +msgstr "" + +#: part/models.py:3609 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:3614 templates/js/translated/table_filters.js:100 +msgid "Validated" +msgstr "" + +#: part/models.py:3615 +#, fuzzy +#| msgid "Some stock items have been overallocated" +msgid "This BOM item has been validated" +msgstr "一些库存项已被过度分配" + +#: part/models.py:3620 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1020 +#: templates/js/translated/table_filters.js:104 +#: templates/js/translated/table_filters.js:136 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:3621 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:3626 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1012 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:3627 +msgid "Stock items for variant parts can be used for this BOM item" +msgstr "" + +#: part/models.py:3713 stock/models.py:570 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:3722 part/models.py:3724 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:3840 +msgid "BOM Item Substitute" +msgstr "" + +#: part/models.py:3861 +msgid "Substitute part cannot be the same as the master part" +msgstr "" + +#: part/models.py:3874 +msgid "Parent BOM item" +msgstr "" + +#: part/models.py:3882 +msgid "Substitute part" +msgstr "" + +#: part/models.py:3897 +msgid "Part 1" +msgstr "" + +#: part/models.py:3901 +msgid "Part 2" +msgstr "" + +#: part/models.py:3901 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:3919 +msgid "Part relationship cannot be created between a part and itself" +msgstr "" + +#: part/models.py:3923 +msgid "Duplicate relationship already exists" +msgstr "" + +#: part/serializers.py:160 part/serializers.py:183 stock/serializers.py:234 +msgid "Purchase currency of this stock item" +msgstr "" + +#: part/serializers.py:307 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:307 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:312 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:317 part/templates/part/detail.html:296 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:317 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:322 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:332 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:332 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:338 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:338 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:348 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:359 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:365 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:372 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:380 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:392 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:400 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:621 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:392 +msgid "Duplicate Part" +msgstr "复制部件" + +#: part/serializers.py:621 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:626 templates/js/translated/part.js:68 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:626 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:631 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:631 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:637 +msgid "Copy Category Parameters" +msgstr "复制类别参数" + +#: part/serializers.py:638 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:843 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:849 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:855 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:860 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:861 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:866 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:867 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:875 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:964 +msgid "Update" +msgstr "" + +#: part/serializers.py:965 +msgid "Update pricing for this part" +msgstr "" + +#: part/serializers.py:1247 +msgid "Select part to copy BOM from" +msgstr "" + +#: part/serializers.py:1255 +msgid "Remove Existing Data" +msgstr "" + +#: part/serializers.py:1256 +msgid "Remove existing BOM items before copying" +msgstr "" + +#: part/serializers.py:1261 +msgid "Include Inherited" +msgstr "" + +#: part/serializers.py:1262 +msgid "Include BOM items which are inherited from templated parts" +msgstr "" + +#: part/serializers.py:1267 +msgid "Skip Invalid Rows" +msgstr "" + +#: part/serializers.py:1268 +msgid "Enable this option to skip invalid rows" +msgstr "" + +#: part/serializers.py:1273 +msgid "Copy Substitute Parts" +msgstr "" + +#: part/serializers.py:1274 +msgid "Copy substitute parts when duplicate BOM items" +msgstr "" + +#: part/serializers.py:1314 +msgid "Clear Existing BOM" +msgstr "" + +#: part/serializers.py:1315 +msgid "Delete existing BOM items before uploading" +msgstr "" + +#: part/serializers.py:1345 +msgid "No part column specified" +msgstr "" + +#: part/serializers.py:1388 +msgid "Multiple matching parts found" +msgstr "" + +#: part/serializers.py:1391 +msgid "No matching part found" +msgstr "" + +#: part/serializers.py:1394 +msgid "Part is not designated as a component" +msgstr "" + +#: part/serializers.py:1403 +msgid "Quantity not provided" +msgstr "" + +#: part/serializers.py:1411 +msgid "Invalid quantity" +msgstr "" + +#: part/serializers.py:1432 +msgid "At least one BOM item is required" +msgstr "" + +#: part/tasks.py:36 +msgid "Low stock notification" +msgstr "" + +#: part/tasks.py:37 +#, python-brace-format +msgid "The available stock for {part.name} has fallen below the configured minimum level" +msgstr "" + +#: part/tasks.py:289 templates/js/translated/part.js:983 +#: templates/js/translated/part.js:1456 templates/js/translated/part.js:1512 +#: templates/js/translated/purchase_order.js:1989 +msgid "Total Quantity" +msgstr "" + +#: part/tasks.py:290 +msgid "Total Cost Min" +msgstr "" + +#: part/tasks.py:291 +msgid "Total Cost Max" +msgstr "" + +#: part/tasks.py:355 +msgid "Stocktake Report Available" +msgstr "" + +#: part/tasks.py:356 +msgid "A new stocktake report is available for download" +msgstr "" + +#: part/templates/part/bom.html:6 +msgid "You do not have permission to edit the BOM." +msgstr "" + +#: part/templates/part/bom.html:15 +#, fuzzy +#| msgid "Some stock items have been overallocated" +msgid "The BOM this part has been changed, and must be validated" +msgstr "一些库存项已被过度分配" + +#: part/templates/part/bom.html:17 +#, python-format +msgid "The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:30 part/templates/part/detail.html:291 +msgid "BOM actions" +msgstr "" + +#: part/templates/part/bom.html:34 +msgid "Delete Items" +msgstr "" + +#: part/templates/part/category.html:34 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:40 part/templates/part/category.html:44 +msgid "You are subscribed to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:48 +msgid "Subscribe to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:54 +msgid "Category Actions" +msgstr "" + +#: part/templates/part/category.html:59 +msgid "Edit category" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Edit Category" +msgstr "" + +#: part/templates/part/category.html:64 +msgid "Delete category" +msgstr "" + +#: part/templates/part/category.html:65 +msgid "Delete Category" +msgstr "" + +#: part/templates/part/category.html:101 +msgid "Top level part category" +msgstr "" + +#: part/templates/part/category.html:121 part/templates/part/category.html:225 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "子类别" + +#: part/templates/part/category.html:126 +msgid "Parts (Including subcategories)" +msgstr "商品 (包括子类别)" + +#: part/templates/part/category.html:164 +msgid "Create new part" +msgstr "新建商品" + +#: part/templates/part/category.html:165 templates/js/translated/bom.js:413 +msgid "New Part" +msgstr "新商品" + +#: part/templates/part/category.html:175 part/templates/part/detail.html:390 +#: part/templates/part/detail.html:421 +msgid "Options" +msgstr "选项" + +#: part/templates/part/category.html:179 +msgid "Set category" +msgstr "设置类别" + +#: part/templates/part/category.html:180 +msgid "Set Category" +msgstr "设置类别" + +#: part/templates/part/category.html:208 +msgid "Part Parameters" +msgstr "商品参数" + +#: part/templates/part/category.html:229 +msgid "Create new part category" +msgstr "新建商品类别" + +#: part/templates/part/category.html:230 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:347 +msgid "Create Part Category" +msgstr "创建商品类别" + +#: part/templates/part/category_sidebar.html:13 +msgid "Import Parts" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:20 +msgid "Part Stock" +msgstr "商品库存" + +#: part/templates/part/detail.html:44 +msgid "Refresh scheduling data" +msgstr "" + +#: part/templates/part/detail.html:45 part/templates/part/prices.html:15 +#: templates/js/translated/tables.js:572 +msgid "Refresh" +msgstr "" + +#: part/templates/part/detail.html:66 +msgid "Add stocktake information" +msgstr "" + +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:130 templates/InvenTree/settings/part_stocktake.html:29 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/stock.js:1926 users/models.py:39 +msgid "Stocktake" +msgstr "" + +#: part/templates/part/detail.html:83 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/detail.html:88 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/detail.html:145 stock/templates/stock/item.html:53 +msgid "Sales Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/detail.html:180 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/detail.html:184 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "New Variant" +msgstr "" + +#: part/templates/part/detail.html:212 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/detail.html:249 part/templates/part/part_sidebar.html:58 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/detail.html:253 part/templates/part/detail.html:254 +msgid "Add Related" +msgstr "" + +#: part/templates/part/detail.html:274 part/templates/part/part_sidebar.html:17 +#: report/templates/report/inventree_bill_of_materials_report.html:100 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/detail.html:279 +msgid "Export actions" +msgstr "" + +#: part/templates/part/detail.html:283 templates/js/translated/bom.js:309 +msgid "Export BOM" +msgstr "" + +#: part/templates/part/detail.html:285 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/detail.html:295 +msgid "Upload BOM" +msgstr "" + +#: part/templates/part/detail.html:297 +msgid "Validate BOM" +msgstr "" + +#: part/templates/part/detail.html:302 part/templates/part/detail.html:303 +#: templates/js/translated/bom.js:1275 templates/js/translated/bom.js:1276 +msgid "Add BOM Item" +msgstr "" + +#: part/templates/part/detail.html:316 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/detail.html:334 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/detail.html:361 stock/templates/stock/item.html:38 +msgid "Build Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:377 +msgid "Part Suppliers" +msgstr "商品供应商" + +#: part/templates/part/detail.html:407 +msgid "Part Manufacturers" +msgstr "商品制造商" + +#: part/templates/part/detail.html:423 +msgid "Delete manufacturer parts" +msgstr "删除制造商商品" + +#: part/templates/part/detail.html:707 +msgid "Related Part" +msgstr "" + +#: part/templates/part/detail.html:715 +msgid "Add Related Part" +msgstr "" + +#: part/templates/part/detail.html:801 +msgid "Add Test Result Template" +msgstr "" + +#: part/templates/part/import_wizard/ajax_part_upload.html:29 +#: part/templates/part/import_wizard/part_upload.html:14 +msgid "Insufficient privileges." +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:8 +msgid "Return to Parts" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:13 +msgid "Import Parts from File" +msgstr "从文件导入商品" + +#: part/templates/part/import_wizard/part_upload.html:31 +msgid "Requirements for part import" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:33 +msgid "The part import file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:33 +msgid "Part Import Template" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:89 +msgid "Download Part Import Template" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:92 +#: templates/js/translated/bom.js:278 templates/js/translated/bom.js:312 +#: templates/js/translated/order.js:112 templates/js/translated/tables.js:183 +msgid "Format" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:93 +#: templates/js/translated/bom.js:279 templates/js/translated/bom.js:313 +#: templates/js/translated/order.js:113 +msgid "Select file format" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "商品列表" + +#: part/templates/part/part_base.html:27 part/templates/part/part_base.html:31 +msgid "You are subscribed to notifications for this part" +msgstr "" + +#: part/templates/part/part_base.html:35 +msgid "Subscribe to notifications for this part" +msgstr "" + +#: part/templates/part/part_base.html:49 +msgid "Unink Barcode" +msgstr "" + +#: part/templates/part/part_base.html:54 +#: stock/templates/stock/item_base.html:63 +#: stock/templates/stock/location.html:73 +msgid "Print Label" +msgstr "打印标签" + +#: part/templates/part/part_base.html:60 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:65 +#: stock/templates/stock/item_base.html:111 +#: stock/templates/stock/location.html:81 +msgid "Stock actions" +msgstr "" + +#: part/templates/part/part_base.html:72 +msgid "Count part stock" +msgstr "清点商品库存" + +#: part/templates/part/part_base.html:78 +msgid "Transfer part stock" +msgstr "" + +#: part/templates/part/part_base.html:93 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:96 +msgid "Duplicate part" +msgstr "重复的商品" + +#: part/templates/part/part_base.html:99 +msgid "Edit part" +msgstr "编辑商品" + +#: part/templates/part/part_base.html:102 +msgid "Delete part" +msgstr "删除商品" + +#: part/templates/part/part_base.html:121 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/part_base.html:125 +msgid "Part can be assembled from other parts" +msgstr "商品可以由其他部件组装" + +#: part/templates/part/part_base.html:129 +msgid "Part can be used in assemblies" +msgstr "商品可以用于组装成品" + +#: part/templates/part/part_base.html:133 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/part_base.html:137 +msgid "Part can be purchased from external suppliers" +msgstr "商品可以从外部供应商处购买" + +#: part/templates/part/part_base.html:141 +msgid "Part can be sold to customers" +msgstr "商品可以销售给客户" + +#: part/templates/part/part_base.html:147 +#, fuzzy +#| msgid "Print actions" +msgid "Part is not active" +msgstr "打印操作" + +#: part/templates/part/part_base.html:148 +#: templates/js/translated/company.js:930 +#: templates/js/translated/company.js:1170 +#: templates/js/translated/model_renderers.js:267 +#: templates/js/translated/part.js:735 templates/js/translated/part.js:1135 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:155 +msgid "Part is virtual (not a physical part)" +msgstr "商品是虚拟的(不是实体零件)" + +#: part/templates/part/part_base.html:165 +#: part/templates/part/part_base.html:684 +msgid "Show Part Details" +msgstr "" + +#: part/templates/part/part_base.html:220 +#: stock/templates/stock/item_base.html:378 +msgid "Allocated to Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:229 +#: stock/templates/stock/item_base.html:371 +msgid "Allocated to Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:237 templates/js/translated/bom.js:1174 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:293 +msgid "Minimum stock level" +msgstr "" + +#: part/templates/part/part_base.html:324 templates/js/translated/bom.js:1037 +#: templates/js/translated/part.js:1181 templates/js/translated/part.js:1920 +#: templates/js/translated/pricing.js:373 +#: templates/js/translated/pricing.js:1019 +msgid "Price Range" +msgstr "" + +#: part/templates/part/part_base.html:354 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/part_base.html:358 +#: stock/templates/stock/item_base.html:323 +msgid "Search for serial number" +msgstr "" + +#: part/templates/part/part_base.html:446 +msgid "Part QR Code" +msgstr "商品二维码" + +#: part/templates/part/part_base.html:463 +msgid "Link Barcode to Part" +msgstr "" + +#: part/templates/part/part_base.html:513 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_base.html:530 +msgid "Remove associated image from this part" +msgstr "" + +#: part/templates/part/part_base.html:582 +msgid "No matching images found" +msgstr "" + +#: part/templates/part/part_base.html:678 +msgid "Hide Part Details" +msgstr "" + +#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:73 +#: part/templates/part/prices.html:216 templates/js/translated/pricing.js:467 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:26 +#: part/templates/part/part_pricing.html:52 +#: part/templates/part/part_pricing.html:95 +#: part/templates/part/part_pricing.html:110 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:40 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:87 +#: part/templates/part/prices.html:240 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:66 +msgid "Unit Purchase Price" +msgstr "" + +#: part/templates/part/part_pricing.html:72 +msgid "Total Purchase Price" +msgstr "" + +#: part/templates/part/part_pricing.html:83 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:92 +msgid "Internal Price" +msgstr "" + +#: part/templates/part/part_pricing.html:123 +msgid "No pricing information is available for this part." +msgstr "此商品无价格信息可用。" + +#: part/templates/part/part_scheduling.html:14 +msgid "Scheduled Quantity" +msgstr "" + +#: part/templates/part/part_sidebar.html:11 +msgid "Variants" +msgstr "" + +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:45 +#: templates/js/translated/part.js:1159 templates/js/translated/part.js:1746 +#: templates/js/translated/part.js:1900 templates/js/translated/stock.js:1001 +#: templates/js/translated/stock.js:1803 templates/navbar.html:31 +msgid "Stock" +msgstr "库存" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Pricing" +msgstr "定价" + +#: part/templates/part/part_sidebar.html:44 +msgid "Scheduling" +msgstr "" + +#: part/templates/part/part_sidebar.html:54 +msgid "Test Templates" +msgstr "" + +#: part/templates/part/part_thumb.html:11 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/prices.html:11 +msgid "Pricing Overview" +msgstr "" + +#: part/templates/part/prices.html:14 +msgid "Refresh Part Pricing" +msgstr "" + +#: part/templates/part/prices.html:25 stock/admin.py:129 +#: stock/templates/stock/item_base.html:436 +#: templates/js/translated/company.js:1291 +#: templates/js/translated/company.js:1301 +#: templates/js/translated/stock.js:1956 +msgid "Last Updated" +msgstr "" + +#: part/templates/part/prices.html:34 part/templates/part/prices.html:116 +msgid "Price Category" +msgstr "" + +#: part/templates/part/prices.html:35 part/templates/part/prices.html:117 +msgid "Minimum" +msgstr "" + +#: part/templates/part/prices.html:36 part/templates/part/prices.html:118 +msgid "Maximum" +msgstr "" + +#: part/templates/part/prices.html:48 part/templates/part/prices.html:163 +msgid "Internal Pricing" +msgstr "" + +#: part/templates/part/prices.html:61 part/templates/part/prices.html:195 +msgid "Purchase History" +msgstr "" + +#: part/templates/part/prices.html:95 part/templates/part/prices.html:264 +msgid "Variant Pricing" +msgstr "" + +#: part/templates/part/prices.html:102 +msgid "Overall Pricing" +msgstr "" + +#: part/templates/part/prices.html:138 part/templates/part/prices.html:316 +msgid "Sale History" +msgstr "" + +#: part/templates/part/prices.html:146 +msgid "Sale price data is not available for this part" +msgstr "" + +#: part/templates/part/prices.html:153 +msgid "Price range data is not available for this part." +msgstr "" + +#: part/templates/part/prices.html:164 part/templates/part/prices.html:196 +#: part/templates/part/prices.html:217 part/templates/part/prices.html:241 +#: part/templates/part/prices.html:265 part/templates/part/prices.html:288 +#: part/templates/part/prices.html:317 +msgid "Jump to overview" +msgstr "" + +#: part/templates/part/prices.html:169 +msgid "Add Internal Price Break" +msgstr "" + +#: part/templates/part/prices.html:287 +msgid "Sale Pricing" +msgstr "" + +#: part/templates/part/prices.html:293 +msgid "Add Sell Price Break" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:625 +#: templates/js/translated/part.js:1741 templates/js/translated/part.js:1743 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:158 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/upload_bom.html:8 +msgid "Return to BOM" +msgstr "" + +#: part/templates/part/upload_bom.html:13 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/upload_bom.html:19 +msgid "BOM upload requirements" +msgstr "" + +#: part/templates/part/upload_bom.html:23 +#: part/templates/part/upload_bom.html:90 +msgid "Upload BOM File" +msgstr "" + +#: part/templates/part/upload_bom.html:29 +msgid "Submit BOM Data" +msgstr "" + +#: part/templates/part/upload_bom.html:37 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/upload_bom.html:39 +msgid "The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/upload_bom.html:39 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/upload_bom.html:40 +msgid "Each part must already exist in the database" +msgstr "每个商品必须已经存在于数据库" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +msgid "Create a new variant part from this template" +msgstr "" + +#: part/templatetags/inventree_extras.py:187 +msgid "Unknown database" +msgstr "" + +#: part/templatetags/inventree_extras.py:239 +#, python-brace-format +msgid "{title} v{version}" +msgstr "" + +#: part/views.py:110 +msgid "Match References" +msgstr "" + +#: part/views.py:238 +#, python-brace-format +msgid "Can't import part {name} because there is no category assigned" +msgstr "" + +#: part/views.py:379 +msgid "Select Part Image" +msgstr "选择商品图像" + +#: part/views.py:405 +msgid "Updated part image" +msgstr "更新商品图像" + +#: part/views.py:408 +msgid "Part image not found" +msgstr "未找到商品图像" + +#: part/views.py:503 +msgid "Part Pricing" +msgstr "商品价格" + +#: plugin/apps.py:55 +msgid "Your environment has an outdated git version. This prevents InvenTree from loading plugin details." +msgstr "" + +#: plugin/base/action/api.py:27 +msgid "No action specified" +msgstr "未指定操作" + +#: plugin/base/action/api.py:38 +msgid "No matching action found" +msgstr "未找到指定操作" + +#: plugin/base/barcodes/api.py:54 plugin/base/barcodes/api.py:110 +msgid "Missing barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:80 +msgid "No match found for barcode data" +msgstr "未找到匹配条形码数据" + +#: plugin/base/barcodes/api.py:84 +msgid "Match found for barcode data" +msgstr "找到匹配条形码数据" + +#: plugin/base/barcodes/api.py:120 +#: templates/js/translated/purchase_order.js:1321 +msgid "Barcode matches existing item" +msgstr "" + +#: plugin/base/barcodes/api.py:217 +msgid "No match found for provided value" +msgstr "" + +#: plugin/base/label/label.py:60 +msgid "Label printing failed" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:28 +msgid "InvenTree Barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:29 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:31 +#: plugin/builtin/integration/core_notifications.py:33 +msgid "InvenTree contributors" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:32 +msgid "InvenTree Notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:34 +msgid "Integrated outgoing notificaton methods" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:39 +#: plugin/builtin/integration/core_notifications.py:80 +msgid "Enable email notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:40 +#: plugin/builtin/integration/core_notifications.py:81 +msgid "Allow sending of emails for event notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:45 +msgid "Enable slack notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:46 +msgid "Allow sending of slack channel messages for event notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:51 +msgid "Slack incoming webhook url" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:52 +msgid "URL that is used to send messages to a slack channel" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:162 +msgid "Open link" +msgstr "" + +#: plugin/models.py:33 +msgid "Plugin Metadata" +msgstr "" + +#: plugin/models.py:34 +msgid "JSON metadata field, for use by external plugins" +msgstr "" + +#: plugin/models.py:80 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:81 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:86 templates/InvenTree/settings/plugin.html:61 +msgid "Key" +msgstr "" + +#: plugin/models.py:87 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:95 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:101 +msgid "Is the plugin active" +msgstr "" + +#: plugin/models.py:133 templates/InvenTree/settings/plugin_details.html:47 +msgid "Unvailable" +msgstr "" + +#: plugin/models.py:164 +msgid "Sample plugin" +msgstr "" + +#: plugin/models.py:173 +msgid "Builtin Plugin" +msgstr "" + +#: plugin/models.py:198 templates/InvenTree/settings/plugin_settings.html:10 +msgid "Plugin" +msgstr "" + +#: plugin/models.py:263 +msgid "Method" +msgstr "" + +#: plugin/plugin.py:257 +msgid "No author found" +msgstr "" + +#: plugin/plugin.py:269 +msgid "No date found" +msgstr "" + +#: plugin/registry.py:452 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" + +#: plugin/registry.py:454 +#, python-brace-format +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:456 +#, python-brace-format +msgid "Plugin requires at most version {v}" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/samples/integration/sample.py:45 +msgid "API Key" +msgstr "" + +#: plugin/samples/integration/sample.py:46 +msgid "Key required for accessing external API" +msgstr "" + +#: plugin/samples/integration/sample.py:49 +msgid "Numerical" +msgstr "" + +#: plugin/samples/integration/sample.py:50 +msgid "A numerical setting" +msgstr "" + +#: plugin/samples/integration/sample.py:55 +msgid "Choice Setting" +msgstr "" + +#: plugin/samples/integration/sample.py:56 +msgid "A setting with multiple choices" +msgstr "" + +#: plugin/serializers.py:81 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:82 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:87 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:88 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:91 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:92 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:104 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:106 +msgid "Either packagename of URL must be provided" +msgstr "" + +#: report/api.py:171 +msgid "No valid objects provided to template" +msgstr "没有为模板提供有效对象" + +#: report/api.py:207 report/api.py:243 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" +msgstr "" + +#: report/api.py:310 +msgid "Test report" +msgstr "" + +#: report/models.py:159 +msgid "Template name" +msgstr "" + +#: report/models.py:165 +msgid "Report template file" +msgstr "" + +#: report/models.py:172 +msgid "Report template description" +msgstr "" + +#: report/models.py:178 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:258 +msgid "Pattern for generating report filenames" +msgstr "" + +#: report/models.py:265 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:286 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:295 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:369 +msgid "Build Filters" +msgstr "" + +#: report/models.py:370 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:409 +msgid "Part Filters" +msgstr "商品过滤器" + +#: report/models.py:410 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:444 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:482 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:520 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:573 +msgid "Snippet" +msgstr "" + +#: report/models.py:574 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:578 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:615 +msgid "Asset" +msgstr "" + +#: report/models.py:616 +msgid "Report asset file" +msgstr "" + +#: report/models.py:623 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_bill_of_materials_report.html:133 +msgid "Materials needed" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:146 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:15 +msgid "Supplier was deleted" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:291 templates/js/translated/pricing.js:509 +#: templates/js/translated/pricing.js:578 +#: templates/js/translated/pricing.js:802 +#: templates/js/translated/purchase_order.js:2020 +#: templates/js/translated/sales_order.js:1729 +msgid "Unit Price" +msgstr "单价" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +#, fuzzy +#| msgid "Extra build notes" +msgid "Extra Line Items" +msgstr "额外的生产备注" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:1922 +#: templates/js/translated/sales_order.js:1704 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:718 stock/templates/stock/item_base.html:312 +#: templates/js/translated/build.js:475 templates/js/translated/build.js:636 +#: templates/js/translated/build.js:1250 templates/js/translated/build.js:1738 +#: templates/js/translated/model_renderers.js:195 +#: templates/js/translated/return_order.js:486 +#: templates/js/translated/return_order.js:666 +#: templates/js/translated/sales_order.js:254 +#: templates/js/translated/sales_order.js:1509 +#: templates/js/translated/sales_order.js:1594 +#: templates/js/translated/stock.js:526 +msgid "Serial Number" +msgstr "序列号" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:97 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:102 +#: stock/models.py:2210 templates/js/translated/stock.js:1398 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2216 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:130 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:132 +msgid "Fail" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:139 +#, fuzzy +#| msgid "Restart required" +msgid "No result (required)" +msgstr "需要重启" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 +msgid "Installed Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:104 templates/js/translated/stock.js:646 +#: templates/js/translated/stock.js:817 templates/js/translated/stock.js:2891 +msgid "Serial" +msgstr "" + +#: stock/admin.py:39 stock/admin.py:108 +msgid "Location ID" +msgstr "" + +#: stock/admin.py:40 stock/admin.py:109 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:44 stock/templates/stock/location.html:129 +#: stock/templates/stock/location.html:135 +msgid "Location Path" +msgstr "" + +#: stock/admin.py:100 +msgid "Stock Item ID" +msgstr "" + +#: stock/admin.py:107 +#, fuzzy +#| msgid "Status" +msgid "Status Code" +msgstr "状态" + +#: stock/admin.py:110 +msgid "Supplier Part ID" +msgstr "供应商商品ID" + +#: stock/admin.py:111 +msgid "Supplier ID" +msgstr "" + +#: stock/admin.py:112 +msgid "Supplier Name" +msgstr "" + +#: stock/admin.py:113 +msgid "Customer ID" +msgstr "" + +#: stock/admin.py:114 stock/models.py:701 +#: stock/templates/stock/item_base.html:355 +msgid "Installed In" +msgstr "" + +#: stock/admin.py:115 +msgid "Build ID" +msgstr "" + +#: stock/admin.py:117 +msgid "Sales Order ID" +msgstr "" + +#: stock/admin.py:118 +msgid "Purchase Order ID" +msgstr "" + +#: stock/admin.py:125 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:126 +#, fuzzy +#| msgid "Delete Template" +msgid "Delete on Deplete" +msgstr "删除模板" + +#: stock/admin.py:131 stock/models.py:774 +#: stock/templates/stock/item_base.html:423 +#: templates/js/translated/stock.js:1940 +msgid "Expiry Date" +msgstr "" + +#: stock/api.py:409 templates/js/translated/table_filters.js:325 +msgid "External Location" +msgstr "" + +#: stock/api.py:570 +msgid "Quantity is required" +msgstr "" + +#: stock/api.py:577 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/api.py:602 +msgid "Serial numbers cannot be supplied for a non-trackable part" +msgstr "" + +#: stock/models.py:54 stock/models.py:685 +#: stock/templates/stock/location.html:17 +#: stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "仓储地点" + +#: stock/models.py:55 stock/templates/stock/location.html:177 +#: templates/InvenTree/search.html:167 templates/js/translated/search.js:208 +#: users/models.py:40 +msgid "Stock Locations" +msgstr "仓储地点" + +#: stock/models.py:114 stock/models.py:815 +#: stock/templates/stock/item_base.html:248 +msgid "Owner" +msgstr "" + +#: stock/models.py:115 stock/models.py:816 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:122 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:128 templates/js/translated/stock.js:2584 +#: templates/js/translated/table_filters.js:167 +msgid "External" +msgstr "" + +#: stock/models.py:129 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:171 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:550 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:576 stock/serializers.py:151 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:593 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "商品类型 ('{pf}') 必须是 {pe}" + +#: stock/models.py:603 stock/models.py:612 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:604 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:626 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:632 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:646 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:660 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:670 +msgid "Base part" +msgstr "" + +#: stock/models.py:678 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:688 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:695 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:704 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:720 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:734 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:739 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:746 +msgid "Source Build" +msgstr "" + +#: stock/models.py:748 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:759 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:762 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:768 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:775 +msgid "Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:790 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:790 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:803 stock/templates/stock/item.html:132 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:811 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:839 +msgid "Converted to part" +msgstr "" + +#: stock/models.py:1361 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:1367 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:1373 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:1376 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:1379 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:1386 stock/serializers.py:349 +msgid "Serial numbers already exist" +msgstr "序列号已存在" + +#: stock/models.py:1457 +msgid "Stock item has been assigned to a sales order" +msgstr "" + +#: stock/models.py:1460 +msgid "Stock item is installed in another item" +msgstr "" + +#: stock/models.py:1463 +msgid "Stock item contains other items" +msgstr "" + +#: stock/models.py:1466 +msgid "Stock item has been assigned to a customer" +msgstr "" + +#: stock/models.py:1469 +msgid "Stock item is currently in production" +msgstr "" + +#: stock/models.py:1472 +msgid "Serialized stock cannot be merged" +msgstr "" + +#: stock/models.py:1479 stock/serializers.py:946 +msgid "Duplicate stock items" +msgstr "" + +#: stock/models.py:1483 +msgid "Stock items must refer to the same part" +msgstr "" + +#: stock/models.py:1487 +msgid "Stock items must refer to the same supplier part" +msgstr "" + +#: stock/models.py:1491 +msgid "Stock status codes must match" +msgstr "" + +#: stock/models.py:1660 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:2128 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:2186 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2192 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2211 +msgid "Test name" +msgstr "" + +#: stock/models.py:2217 +msgid "Test result" +msgstr "" + +#: stock/models.py:2223 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2230 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2236 +msgid "Test notes" +msgstr "" + +#: stock/serializers.py:75 +msgid "Serial number is too large" +msgstr "" + +#: stock/serializers.py:231 +msgid "Purchase price of this stock item" +msgstr "" + +#: stock/serializers.py:282 +msgid "Enter number of stock items to serialize" +msgstr "" + +#: stock/serializers.py:294 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({q})" +msgstr "" + +#: stock/serializers.py:300 +msgid "Enter serial numbers for new items" +msgstr "输入新项目的序列号" + +#: stock/serializers.py:311 stock/serializers.py:903 stock/serializers.py:1145 +msgid "Destination stock location" +msgstr "目标库存位置" + +#: stock/serializers.py:318 +msgid "Optional note field" +msgstr "" + +#: stock/serializers.py:328 +msgid "Serial numbers cannot be assigned to this part" +msgstr "" + +#: stock/serializers.py:389 +msgid "Select stock item to install" +msgstr "" + +#: stock/serializers.py:402 +msgid "Stock item is unavailable" +msgstr "" + +#: stock/serializers.py:409 +msgid "Selected part is not in the Bill of Materials" +msgstr "" + +#: stock/serializers.py:446 +msgid "Destination location for uninstalled item" +msgstr "" + +#: stock/serializers.py:451 stock/serializers.py:532 +msgid "Add transaction note (optional)" +msgstr "添加交易备注 (可选)" + +#: stock/serializers.py:485 +msgid "Select part to convert stock item into" +msgstr "" + +#: stock/serializers.py:496 +msgid "Selected part is not a valid option for conversion" +msgstr "" + +#: stock/serializers.py:527 +msgid "Destination location for returned item" +msgstr "" + +#: stock/serializers.py:758 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:762 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:766 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:797 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:803 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:811 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:821 stock/serializers.py:1052 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:910 +msgid "Stock merging notes" +msgstr "" + +#: stock/serializers.py:915 +msgid "Allow mismatched suppliers" +msgstr "" + +#: stock/serializers.py:916 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" + +#: stock/serializers.py:921 +msgid "Allow mismatched status" +msgstr "" + +#: stock/serializers.py:922 +msgid "Allow stock items with different status codes to be merged" +msgstr "" + +#: stock/serializers.py:932 +msgid "At least two stock items must be provided" +msgstr "" + +#: stock/serializers.py:1014 +msgid "StockItem primary key value" +msgstr "" + +#: stock/serializers.py:1042 +msgid "Stock transaction notes" +msgstr "" + +#: stock/templates/stock/item.html:17 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:69 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item.html:77 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:86 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:90 stock/templates/stock/item_base.html:66 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:94 stock/templates/stock/item.html:288 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item.html:98 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/item.html:147 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:3038 +msgid "Install Stock Item" +msgstr "" + +#: stock/templates/stock/item.html:276 +msgid "Delete all test results for this stock item" +msgstr "" + +#: stock/templates/stock/item.html:305 templates/js/translated/stock.js:1590 +msgid "Add Test Result" +msgstr "" + +#: stock/templates/stock/item_base.html:34 +msgid "Locate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:52 templates/stock_table.html:21 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:60 +#: stock/templates/stock/location.html:69 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:76 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:80 +#: stock/templates/stock/location.html:88 templates/stock_table.html:35 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:82 templates/stock_table.html:33 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:83 templates/stock_table.html:34 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:86 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:89 +#: stock/templates/stock/location.html:94 templates/stock_table.html:36 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:92 templates/stock_table.html:39 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:95 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:98 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:98 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:102 +msgid "Install stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:102 +msgid "Install" +msgstr "" + +#: stock/templates/stock/item_base.html:116 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:119 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:121 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:124 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:194 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:212 +msgid "No manufacturer set" +msgstr "" + +#: stock/templates/stock/item_base.html:252 +msgid "You are not in the list of owners of this item. This stock item cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:253 +#: stock/templates/stock/location.html:147 +msgid "Read only" +msgstr "" + +#: stock/templates/stock/item_base.html:266 +#, fuzzy +#| msgid "Stock item is over-allocated" +msgid "This stock item is unavailable" +msgstr "库存物品分配过度!" + +#: stock/templates/stock/item_base.html:272 +msgid "This stock item is in production and cannot be edited." +msgstr "此库存项目正在生产中,无法编辑。" + +#: stock/templates/stock/item_base.html:273 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:288 +msgid "This stock item is allocated to Sales Order" +msgstr "" + +#: stock/templates/stock/item_base.html:296 +msgid "This stock item is allocated to Build Order" +msgstr "" + +#: stock/templates/stock/item_base.html:312 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" + +#: stock/templates/stock/item_base.html:318 +msgid "previous page" +msgstr "" + +#: stock/templates/stock/item_base.html:318 +msgid "Navigate to previous serial number" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "next page" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Navigate to next serial number" +msgstr "" + +#: stock/templates/stock/item_base.html:341 +msgid "Available Quantity" +msgstr "" + +#: stock/templates/stock/item_base.html:388 +#: templates/js/translated/build.js:1764 +msgid "No location set" +msgstr "未设置仓储地点" + +#: stock/templates/stock/item_base.html:403 +msgid "Tests" +msgstr "" + +#: stock/templates/stock/item_base.html:409 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:427 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/table_filters.js:333 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:429 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:429 +#: templates/js/translated/table_filters.js:339 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:445 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_base.html:523 +msgid "Edit Stock Status" +msgstr "" + +#: stock/templates/stock/item_base.html:532 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:543 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: stock/templates/stock/item_base.html:607 +msgid "Select one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/item_base.html:610 +msgid "Warning" +msgstr "警告" + +#: stock/templates/stock/item_base.html:611 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/item_base.html:619 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/item_base.html:649 +msgid "Return to Stock" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:44 +msgid "Locate stock location" +msgstr "" + +#: stock/templates/stock/location.html:62 +msgid "Scan stock items into this location" +msgstr "" + +#: stock/templates/stock/location.html:62 +msgid "Scan In Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:63 +msgid "Scan stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:63 +msgid "Scan In Container" +msgstr "" + +#: stock/templates/stock/location.html:102 +msgid "Location actions" +msgstr "仓储地操作" + +#: stock/templates/stock/location.html:104 +msgid "Edit location" +msgstr "编辑仓储地" + +#: stock/templates/stock/location.html:106 +msgid "Delete location" +msgstr "删除仓储地" + +#: stock/templates/stock/location.html:136 +msgid "Top level stock location" +msgstr "" + +#: stock/templates/stock/location.html:142 +msgid "Location Owner" +msgstr "" + +#: stock/templates/stock/location.html:146 +msgid "You are not in the list of owners of this location. This stock location cannot be edited." +msgstr "您不在此仓储地的所有者列表中,无法编辑此仓储地。" + +#: stock/templates/stock/location.html:163 +#: stock/templates/stock/location.html:211 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:215 +msgid "Create new stock location" +msgstr "新建仓储地点" + +#: stock/templates/stock/location.html:216 +msgid "New Location" +msgstr "新建仓储地点" + +#: stock/templates/stock/location.html:303 +msgid "Scanned stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:376 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:387 +msgid "Link Barcode to Stock Location" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:5 +msgid "Stock Tracking" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:15 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/403_csrf.html:11 +msgid "Authentication Failure" +msgstr "" + +#: templates/403_csrf.html:14 +msgid "You have been logged out from InvenTree." +msgstr "" + +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:147 +msgid "Login" +msgstr "" + +#: templates/404.html:6 templates/404.html:12 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:15 +msgid "The requested page does not exist" +msgstr "" + +#: templates/500.html:6 templates/500.html:12 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:15 +#, python-format +msgid "The %(inventree_title)s server raised an internal error" +msgstr "" + +#: templates/500.html:16 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + +#: templates/503.html:11 templates/503.html:34 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:40 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:88 +msgid "Subscribed Parts" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Subscribed Categories" +msgstr "" + +#: templates/InvenTree/index.html:108 +msgid "Latest Parts" +msgstr "最近商品" + +#: templates/InvenTree/index.html:119 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:168 +msgid "Depleted Stock" +msgstr "" + +#: templates/InvenTree/index.html:178 +msgid "Required for Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:191 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:202 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:224 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:235 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:255 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:266 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:286 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:297 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:312 +msgid "InvenTree News" +msgstr "" + +#: templates/InvenTree/index.html:314 +msgid "Current News" +msgstr "" + +#: templates/InvenTree/notifications/history.html:9 +msgid "Notification History" +msgstr "" + +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:77 +msgid "Delete Notifications" +msgstr "" + +#: templates/InvenTree/notifications/inbox.html:9 +msgid "Pending Notifications" +msgstr "" + +#: templates/InvenTree/notifications/inbox.html:13 +#: templates/InvenTree/notifications/inbox.html:14 +msgid "Mark all as read" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:10 +#: templates/InvenTree/notifications/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:17 +#: templates/InvenTree/settings/sidebar.html:33 templates/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:39 +msgid "No unread notifications found" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:59 +msgid "No notification history found" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:67 +msgid "Delete all read notifications" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:91 +#: templates/js/translated/notification.js:73 +msgid "Delete Notification" +msgstr "" + +#: templates/InvenTree/notifications/sidebar.html:8 +msgid "Inbox" +msgstr "" + +#: templates/InvenTree/notifications/sidebar.html:10 +msgid "History" +msgstr "" + +#: templates/InvenTree/search.html:8 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/settings/barcode.html:8 +msgid "Barcode Settings" +msgstr "条形码设置" + +#: templates/InvenTree/settings/build.html:8 +msgid "Build Order Settings" +msgstr "生产订单设置" + +#: templates/InvenTree/settings/category.html:7 +msgid "Category Settings" +msgstr "类别设置" + +#: templates/InvenTree/settings/global.html:9 +msgid "Server Settings" +msgstr "" + +#: templates/InvenTree/settings/label.html:8 +#: templates/InvenTree/settings/user_labels.html:9 +msgid "Label Settings" +msgstr "标签设置" + +#: templates/InvenTree/settings/login.html:9 +msgid "Login Settings" +msgstr "" + +#: templates/InvenTree/settings/login.html:16 +msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" +msgstr "" + +#: templates/InvenTree/settings/login.html:26 templates/account/signup.html:5 +#: templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: templates/InvenTree/settings/login.html:35 +msgid "Single Sign On" +msgstr "" + +#: templates/InvenTree/settings/mixins/settings.html:5 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:144 +msgid "Settings" +msgstr "设置" + +#: templates/InvenTree/settings/mixins/urls.html:5 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:8 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:23 +msgid "Open in new tab" +msgstr "" + +#: templates/InvenTree/settings/notifications.html:9 +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "" + +#: templates/InvenTree/settings/notifications.html:18 +msgid "Slug" +msgstr "" + +#: templates/InvenTree/settings/part.html:7 +msgid "Part Settings" +msgstr "商品设置" + +#: templates/InvenTree/settings/part.html:42 +msgid "Part Import" +msgstr "商品导入" + +#: templates/InvenTree/settings/part.html:46 +msgid "Import Part" +msgstr "导入商品" + +#: templates/InvenTree/settings/part.html:60 +msgid "Part Parameter Templates" +msgstr "商品参数模板" + +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:24 +msgid "Stocktake Reports" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:10 +#: templates/InvenTree/settings/sidebar.html:58 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/sidebar.html:60 +msgid "Plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:44 +#: templates/js/translated/plugin.js:16 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:52 +msgid "External plugins are not enabled for this InvenTree installation" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:64 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:72 +msgid "Active plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:80 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:94 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:103 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:105 +#: templates/js/translated/notification.js:66 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_details.html:32 +#: templates/InvenTree/settings/plugin_settings.html:101 +msgid "Builtin" +msgstr "" + +#: templates/InvenTree/settings/plugin_details.html:38 +msgid "Sample" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:71 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:77 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:86 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:88 +msgid "This plugin was found in a local server path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:94 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:102 +msgid "This is a builtin plugin which cannot be disabled" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:107 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:111 +#: templates/about.html:36 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:115 +#: templates/about.html:29 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:127 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:132 +msgid "Sign Key" +msgstr "" + +#: templates/InvenTree/settings/po.html:7 +msgid "Purchase Order Settings" +msgstr "采购订单设置" + +#: templates/InvenTree/settings/pricing.html:7 +msgid "Pricing Settings" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:34 +msgid "Exchange Rates" +msgstr "汇率" + +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "立即更新" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "上次更新" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" +msgstr "从不" + +#: templates/InvenTree/settings/report.html:8 +#: templates/InvenTree/settings/user_reporting.html:9 +msgid "Report Settings" +msgstr "报表设置" + +#: templates/InvenTree/settings/returns.html:7 +#, fuzzy +#| msgid "Build Order Settings" +msgid "Return Order Settings" +msgstr "生产订单设置" + +#: templates/InvenTree/settings/setting.html:31 +msgid "No value set" +msgstr "未设置值" + +#: templates/InvenTree/settings/setting.html:44 +msgid "Edit setting" +msgstr "编辑设置" + +#: templates/InvenTree/settings/settings_js.html:58 +msgid "Edit Plugin Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:60 +msgid "Edit Notification Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:63 +msgid "Edit Global Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:65 +msgid "Edit User Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:117 +msgid "No category parameter templates found" +msgstr "未找到类别参数模板" + +#: templates/InvenTree/settings/settings_staff_js.html:139 +#: templates/InvenTree/settings/settings_staff_js.html:267 +msgid "Edit Template" +msgstr "编辑模板" + +#: templates/InvenTree/settings/settings_staff_js.html:140 +#: templates/InvenTree/settings/settings_staff_js.html:268 +msgid "Delete Template" +msgstr "删除模板" + +#: templates/InvenTree/settings/settings_staff_js.html:179 +msgid "Delete Category Parameter Template" +msgstr "删除类别参数模板" + +#: templates/InvenTree/settings/settings_staff_js.html:215 +msgid "Create Category Parameter Template" +msgstr "创建类别参数模板" + +#: templates/InvenTree/settings/settings_staff_js.html:240 +msgid "No part parameter templates found" +msgstr "未找到商品参数模板" + +#: templates/InvenTree/settings/settings_staff_js.html:244 +#: templates/js/translated/news.js:29 +#: templates/js/translated/notification.js:36 +msgid "ID" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:286 +msgid "Create Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:303 +msgid "Edit Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:315 +msgid "Any parameters which reference this template will also be deleted" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:323 +msgid "Delete Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:6 +#: templates/InvenTree/settings/user_settings.html:9 +msgid "User Settings" +msgstr "用户设置" + +#: templates/InvenTree/settings/sidebar.html:9 +#, fuzzy +#| msgid "Account Settings" +msgid "Account" +msgstr "帐户设置" + +#: templates/InvenTree/settings/sidebar.html:11 +msgid "Display" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:13 +msgid "Home Page" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:15 +#: templates/js/translated/tables.js:563 templates/navbar.html:107 +#: templates/search.html:8 templates/search_form.html:6 +#: templates/search_form.html:7 +msgid "Search" +msgstr "搜索" + +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:39 +msgid "Reporting" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:24 +msgid "Global Settings" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:37 +#, fuzzy +#| msgid "Label" +msgid "Labels" +msgstr "标签" + +#: templates/InvenTree/settings/sidebar.html:41 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/so.html:7 +msgid "Sales Order Settings" +msgstr "销售订单设置" + +#: templates/InvenTree/settings/stock.html:7 +msgid "Stock Settings" +msgstr "库存设置" + +#: templates/InvenTree/settings/user.html:12 +msgid "Account Settings" +msgstr "帐户设置" + +#: templates/InvenTree/settings/user.html:18 +#: templates/account/password_reset_from_key.html:4 +#: templates/account/password_reset_from_key.html:7 +msgid "Change Password" +msgstr "更改密码" + +#: templates/InvenTree/settings/user.html:23 +#: templates/js/translated/helpers.js:53 templates/js/translated/pricing.js:610 +#: templates/notes_buttons.html:3 templates/notes_buttons.html:4 +msgid "Edit" +msgstr "编辑" + +#: templates/InvenTree/settings/user.html:32 +msgid "Username" +msgstr "用户名" + +#: templates/InvenTree/settings/user.html:36 +msgid "First Name" +msgstr "名字" + +#: templates/InvenTree/settings/user.html:40 +msgid "Last Name" +msgstr "姓氏" + +#: templates/InvenTree/settings/user.html:54 +msgid "The following email addresses are associated with your account:" +msgstr "" + +#: templates/InvenTree/settings/user.html:75 +msgid "Verified" +msgstr "" + +#: templates/InvenTree/settings/user.html:77 +msgid "Unverified" +msgstr "" + +#: templates/InvenTree/settings/user.html:79 +msgid "Primary" +msgstr "" + +#: templates/InvenTree/settings/user.html:85 +msgid "Make Primary" +msgstr "" + +#: templates/InvenTree/settings/user.html:86 +msgid "Re-send Verification" +msgstr "" + +#: templates/InvenTree/settings/user.html:95 +msgid "Warning:" +msgstr "" + +#: templates/InvenTree/settings/user.html:96 +msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." +msgstr "" + +#: templates/InvenTree/settings/user.html:104 +msgid "Add Email Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:109 +msgid "Add Email" +msgstr "" + +#: templates/InvenTree/settings/user.html:117 +msgid "Social Accounts" +msgstr "" + +#: templates/InvenTree/settings/user.html:122 +msgid "You can sign in to your account using any of the following third party accounts:" +msgstr "" + +#: templates/InvenTree/settings/user.html:158 +msgid "There are no social network accounts connected to this account." +msgstr "" + +#: templates/InvenTree/settings/user.html:164 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/InvenTree/settings/user.html:174 +msgid "Multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:179 +msgid "You have these factors available:" +msgstr "" + +#: templates/InvenTree/settings/user.html:189 +msgid "TOTP" +msgstr "" + +#: templates/InvenTree/settings/user.html:195 +msgid "Static" +msgstr "" + +#: templates/InvenTree/settings/user.html:204 +msgid "Multifactor authentication is not configured for your account" +msgstr "" + +#: templates/InvenTree/settings/user.html:211 +msgid "Change factors" +msgstr "" + +#: templates/InvenTree/settings/user.html:212 +msgid "Setup multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:214 +msgid "Remove multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:222 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:228 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:229 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:238 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:239 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:244 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:245 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:258 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:260 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:272 +msgid "Do you really want to remove the selected email address?" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:29 +msgid "Theme Settings" +msgstr "主题设置" + +#: templates/InvenTree/settings/user_display.html:39 +msgid "Select theme" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:50 +msgid "Set Theme" +msgstr "设置主题" + +#: templates/InvenTree/settings/user_display.html:58 +msgid "Language Settings" +msgstr "语言设置" + +#: templates/InvenTree/settings/user_display.html:67 +msgid "Select language" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:83 +#, python-format +msgid "%(lang_translated)s%% translated" +msgstr "%(lang_translated)s%% 已翻译" + +#: templates/InvenTree/settings/user_display.html:85 +msgid "No translations available" +msgstr "无可用翻译" + +#: templates/InvenTree/settings/user_display.html:92 +msgid "Set Language" +msgstr "设置语言" + +#: templates/InvenTree/settings/user_display.html:95 +msgid "Some languages are not complete" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:97 +msgid "Show only sufficent" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:99 +msgid "and hidden." +msgstr "" + +#: templates/InvenTree/settings/user_display.html:99 +msgid "Show them too" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:106 +msgid "Help the translation efforts!" +msgstr "帮助翻译工作!" + +#: templates/InvenTree/settings/user_display.html:107 +msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." +msgstr "" + +#: templates/InvenTree/settings/user_display.html:108 +msgid "InvenTree Translation Project" +msgstr "" + +#: templates/InvenTree/settings/user_homepage.html:9 +msgid "Home Page Settings" +msgstr "主页设置" + +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "搜索设置" + +#: templates/about.html:9 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:14 +msgid "Development Version" +msgstr "" + +#: templates/about.html:17 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:19 +msgid "Update Available" +msgstr "" + +#: templates/about.html:42 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:47 +msgid "API Version" +msgstr "" + +#: templates/about.html:52 +msgid "Python Version" +msgstr "" + +#: templates/about.html:57 +msgid "Django Version" +msgstr "" + +#: templates/about.html:62 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:67 +msgid "Credits" +msgstr "" + +#: templates/about.html:72 +msgid "Mobile App" +msgstr "" + +#: templates/about.html:77 +msgid "Submit Bug Report" +msgstr "" + +#: templates/about.html:84 templates/clip.html:4 +msgid "copy to clipboard" +msgstr "" + +#: templates/about.html:84 +msgid "copy version information" +msgstr "" + +#: templates/account/email_confirm.html:6 +#: templates/account/email_confirm.html:10 +msgid "Confirm Email Address" +msgstr "" + +#: templates/account/email_confirm.html:16 +#, python-format +msgid "Please confirm that %(email)s is an email address for user %(user_display)s." +msgstr "" + +#: templates/account/email_confirm.html:22 templates/js/translated/forms.js:702 +msgid "Confirm" +msgstr "确认" + +#: templates/account/email_confirm.html:30 +#, python-format +msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." +msgstr "" + +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:4 +msgid "Sign In" +msgstr "" + +#: templates/account/login.html:21 +msgid "Not a member?" +msgstr "" + +#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/signup.html:22 templates/socialaccount/signup.html:8 +#: templates/socialaccount/signup.html:20 +msgid "Sign Up" +msgstr "" + +#: templates/account/login.html:45 +msgid "Forgot Password?" +msgstr "" + +#: templates/account/login.html:53 +msgid "or log in with" +msgstr "" + +#: templates/account/logout.html:5 templates/account/logout.html:8 +#: templates/account/logout.html:20 +msgid "Sign Out" +msgstr "" + +#: templates/account/logout.html:10 +msgid "Are you sure you want to sign out?" +msgstr "" + +#: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 +msgid "Return to Site" +msgstr "" + +#: templates/account/password_reset.html:5 +#: templates/account/password_reset.html:12 +msgid "Password Reset" +msgstr "" + +#: templates/account/password_reset.html:18 +msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." +msgstr "" + +#: templates/account/password_reset.html:23 +msgid "Reset My Password" +msgstr "" + +#: templates/account/password_reset.html:27 templates/account/signup.html:37 +msgid "This function is currently disabled. Please contact an administrator." +msgstr "" + +#: templates/account/password_reset_from_key.html:7 +msgid "Bad Token" +msgstr "" + +#: templates/account/password_reset_from_key.html:11 +#, python-format +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/account/password_reset_from_key.html:18 +msgid "Change password" +msgstr "" + +#: templates/account/password_reset_from_key.html:22 +msgid "Your password is now changed." +msgstr "" + +#: templates/account/signup.html:13 +#, python-format +msgid "Already have an account? Then please sign in." +msgstr "" + +#: templates/account/signup.html:28 +msgid "Use a SSO-provider for signup" +msgstr "" + +#: templates/account/signup_closed.html:5 +#: templates/account/signup_closed.html:8 +msgid "Sign Up Closed" +msgstr "" + +#: templates/account/signup_closed.html:10 +msgid "Sign up is currently closed." +msgstr "" + +#: templates/account/signup_closed.html:15 +#: templates/socialaccount/authentication_error.html:19 +#: templates/socialaccount/login.html:25 templates/socialaccount/signup.html:27 +msgid "Return to login page" +msgstr "" + +#: templates/admin_button.html:8 +msgid "View in administration panel" +msgstr "" + +#: templates/allauth_2fa/authenticate.html:5 +msgid "Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/authenticate.html:13 +msgid "Authenticate" +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:6 +msgid "Two-Factor Authentication Backup Tokens" +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:17 +msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:20 +msgid "No backup tokens are available. Press the button below to generate some." +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:28 +msgid "Generate Tokens" +msgstr "" + +#: templates/allauth_2fa/remove.html:6 +msgid "Disable Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/remove.html:9 +msgid "Are you sure?" +msgstr "" + +#: templates/allauth_2fa/remove.html:17 +msgid "Disable 2FA" +msgstr "" + +#: templates/allauth_2fa/setup.html:6 +msgid "Setup Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/setup.html:10 +msgid "Step 1" +msgstr "" + +#: templates/allauth_2fa/setup.html:14 +msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." +msgstr "" + +#: templates/allauth_2fa/setup.html:23 +msgid "Step 2" +msgstr "" + +#: templates/allauth_2fa/setup.html:27 +msgid "Input a token generated by the app:" +msgstr "" + +#: templates/allauth_2fa/setup.html:37 +msgid "Verify" +msgstr "" + +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:60 +msgid "Add Link" +msgstr "" + +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:38 +msgid "Add Attachment" +msgstr "添加附件" + +#: templates/attachment_table.html:11 +msgid "Delete selected attachments" +msgstr "" + +#: templates/attachment_table.html:12 templates/js/translated/attachment.js:119 +msgid "Delete Attachments" +msgstr "" + +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:102 +msgid "Server Restart Required" +msgstr "" + +#: templates/base.html:105 +msgid "A configuration option has been changed which requires a server restart" +msgstr "" + +#: templates/base.html:105 +msgid "Contact your system administrator for further information" +msgstr "" + +#: templates/email/build_order_completed.html:9 +#: templates/email/new_order_assigned.html:9 +#: templates/email/overdue_build_order.html:9 +#: templates/email/overdue_purchase_order.html:9 +#: templates/email/overdue_sales_order.html:9 +#: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 +msgid "Click on the following link to view this order" +msgstr "" + +#: templates/email/build_order_required_stock.html:7 +msgid "Stock is required for the following build order" +msgstr "" + +#: templates/email/build_order_required_stock.html:8 +#, python-format +msgid "Build order %(build)s - building %(quantity)s x %(part)s" +msgstr "" + +#: templates/email/build_order_required_stock.html:10 +msgid "Click on the following link to view this build order" +msgstr "" + +#: templates/email/build_order_required_stock.html:14 +msgid "The following parts are low on required stock" +msgstr "" + +#: templates/email/build_order_required_stock.html:18 +#: templates/js/translated/bom.js:1629 +msgid "Required Quantity" +msgstr "" + +#: templates/email/build_order_required_stock.html:38 +#: templates/email/low_stock_notification.html:31 +msgid "You are receiving this email because you are subscribed to notifications for this part " +msgstr "" + +#: templates/email/low_stock_notification.html:9 +msgid "Click on the following link to view this part" +msgstr "" + +#: templates/email/low_stock_notification.html:19 +#: templates/js/translated/part.js:2753 +msgid "Minimum Quantity" +msgstr "" + +#: templates/js/translated/api.js:224 templates/js/translated/modals.js:1110 +msgid "No Response" +msgstr "" + +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1111 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/translated/api.js:231 +msgid "Error 400: Bad request" +msgstr "" + +#: templates/js/translated/api.js:232 +msgid "API request returned error code 400" +msgstr "" + +#: templates/js/translated/api.js:236 templates/js/translated/modals.js:1120 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1121 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/translated/api.js:241 templates/js/translated/modals.js:1125 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1126 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/translated/api.js:246 templates/js/translated/modals.js:1130 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1131 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/translated/api.js:251 +msgid "Error 405: Method Not Allowed" +msgstr "" + +#: templates/js/translated/api.js:252 +msgid "HTTP method not allowed at URL" +msgstr "" + +#: templates/js/translated/api.js:256 templates/js/translated/modals.js:1135 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1136 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/translated/api.js:260 +msgid "Unhandled Error Code" +msgstr "" + +#: templates/js/translated/api.js:261 +msgid "Error code" +msgstr "" + +#: templates/js/translated/attachment.js:104 +msgid "All selected attachments will be deleted" +msgstr "" + +#: templates/js/translated/attachment.js:245 +msgid "No attachments found" +msgstr "" + +#: templates/js/translated/attachment.js:275 +msgid "Edit Attachment" +msgstr "编辑附件" + +#: templates/js/translated/attachment.js:316 +msgid "Upload Date" +msgstr "" + +#: templates/js/translated/attachment.js:336 +msgid "Edit attachment" +msgstr "" + +#: templates/js/translated/attachment.js:344 +msgid "Delete attachment" +msgstr "" + +#: templates/js/translated/barcode.js:32 +msgid "Scan barcode data here using barcode scanner" +msgstr "" + +#: templates/js/translated/barcode.js:34 +msgid "Enter barcode data" +msgstr "输入条形码数据" + +#: templates/js/translated/barcode.js:48 +msgid "Scan barcode using connected webcam" +msgstr "" + +#: templates/js/translated/barcode.js:125 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/translated/barcode.js:126 +msgid "Enter notes" +msgstr "" + +#: templates/js/translated/barcode.js:175 +msgid "Server error" +msgstr "" + +#: templates/js/translated/barcode.js:204 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/translated/barcode.js:239 +#: templates/js/translated/modals.js:1100 +msgid "Invalid server response" +msgstr "" + +#: templates/js/translated/barcode.js:359 +msgid "Scan barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:407 templates/navbar.html:114 +msgid "Scan Barcode" +msgstr "扫描条形码" + +#: templates/js/translated/barcode.js:427 +msgid "No URL in response" +msgstr "" + +#: templates/js/translated/barcode.js:468 +msgid "This will remove the link to the associated barcode" +msgstr "" + +#: templates/js/translated/barcode.js:474 +msgid "Unlink" +msgstr "" + +#: templates/js/translated/barcode.js:537 templates/js/translated/stock.js:1097 +msgid "Remove stock item" +msgstr "" + +#: templates/js/translated/barcode.js:580 +msgid "Scan Stock Items Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:582 +msgid "Scan stock item barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:585 +#: templates/js/translated/barcode.js:780 +msgid "Check In" +msgstr "" + +#: templates/js/translated/barcode.js:616 +msgid "No barcode provided" +msgstr "" + +#: templates/js/translated/barcode.js:656 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/translated/barcode.js:660 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/translated/barcode.js:667 +msgid "Added stock item" +msgstr "" + +#: templates/js/translated/barcode.js:676 +msgid "Barcode does not match valid stock item" +msgstr "" + +#: templates/js/translated/barcode.js:695 +msgid "Scan Stock Container Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:697 +msgid "Scan stock container barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:731 +msgid "Barcode does not match valid stock location" +msgstr "" + +#: templates/js/translated/barcode.js:775 +msgid "Check Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:843 +#: templates/js/translated/barcode.js:852 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/translated/bom.js:47 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:101 +msgid "Display row data" +msgstr "" + +#: templates/js/translated/bom.js:157 +msgid "Row Data" +msgstr "" + +#: templates/js/translated/bom.js:158 templates/js/translated/bom.js:669 +#: templates/js/translated/modals.js:69 templates/js/translated/modals.js:608 +#: templates/js/translated/modals.js:732 templates/js/translated/modals.js:1040 +#: templates/js/translated/purchase_order.js:742 templates/modals.html:15 +#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 +msgid "Close" +msgstr "" + +#: templates/js/translated/bom.js:275 +msgid "Download BOM Template" +msgstr "" + +#: templates/js/translated/bom.js:320 +msgid "Multi Level BOM" +msgstr "" + +#: templates/js/translated/bom.js:321 +msgid "Include BOM data for subassemblies" +msgstr "" + +#: templates/js/translated/bom.js:326 +msgid "Levels" +msgstr "等级" + +#: templates/js/translated/bom.js:327 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: templates/js/translated/bom.js:334 +msgid "Include Alternative Parts" +msgstr "" + +#: templates/js/translated/bom.js:335 +msgid "Include alternative parts in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:340 +msgid "Include Parameter Data" +msgstr "包含参数数据" + +#: templates/js/translated/bom.js:341 +msgid "Include part parameter data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:346 +msgid "Include Stock Data" +msgstr "包括库存数据" + +#: templates/js/translated/bom.js:347 +msgid "Include part stock data in exported BOM" +msgstr "在导出 BOM 中包括库存数据" + +#: templates/js/translated/bom.js:352 +msgid "Include Manufacturer Data" +msgstr "包括制造商数据" + +#: templates/js/translated/bom.js:353 +msgid "Include part manufacturer data in exported BOM" +msgstr "在导出 BOM 中包含制造商数据" + +#: templates/js/translated/bom.js:358 +msgid "Include Supplier Data" +msgstr "包含供应商数据" + +#: templates/js/translated/bom.js:359 +msgid "Include part supplier data in exported BOM" +msgstr "在导出 BOM 中包含供应商数据" + +#: templates/js/translated/bom.js:364 +msgid "Include Pricing Data" +msgstr "" + +#: templates/js/translated/bom.js:365 +msgid "Include part pricing data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:560 +msgid "Remove substitute part" +msgstr "" + +#: templates/js/translated/bom.js:614 +msgid "Select and add a new substitute part using the input below" +msgstr "" + +#: templates/js/translated/bom.js:625 +msgid "Are you sure you wish to remove this substitute part link?" +msgstr "" + +#: templates/js/translated/bom.js:631 +msgid "Remove Substitute Part" +msgstr "" + +#: templates/js/translated/bom.js:670 +msgid "Add Substitute" +msgstr "" + +#: templates/js/translated/bom.js:671 +msgid "Edit BOM Item Substitutes" +msgstr "" + +#: templates/js/translated/bom.js:733 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: templates/js/translated/bom.js:749 +msgid "Delete selected BOM items?" +msgstr "" + +#: templates/js/translated/bom.js:876 +msgid "Load BOM for subassembly" +msgstr "" + +#: templates/js/translated/bom.js:886 +msgid "Substitutes Available" +msgstr "" + +#: templates/js/translated/bom.js:890 templates/js/translated/build.js:1839 +msgid "Variant stock allowed" +msgstr "" + +#: templates/js/translated/bom.js:980 +msgid "Substitutes" +msgstr "" + +#: templates/js/translated/bom.js:1100 +msgid "BOM pricing is complete" +msgstr "" + +#: templates/js/translated/bom.js:1105 +msgid "BOM pricing is incomplete" +msgstr "" + +#: templates/js/translated/bom.js:1112 +msgid "No pricing available" +msgstr "" + +#: templates/js/translated/bom.js:1143 templates/js/translated/build.js:1922 +#: templates/js/translated/sales_order.js:1799 +msgid "No Stock Available" +msgstr "" + +#: templates/js/translated/bom.js:1148 templates/js/translated/build.js:1926 +msgid "Includes variant and substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1150 templates/js/translated/build.js:1928 +#: templates/js/translated/part.js:1173 +msgid "Includes variant stock" +msgstr "" + +#: templates/js/translated/bom.js:1152 templates/js/translated/build.js:1930 +msgid "Includes substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1180 templates/js/translated/build.js:1913 +#: templates/js/translated/build.js:2006 +msgid "Consumable item" +msgstr "" + +#: templates/js/translated/bom.js:1240 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1242 +msgid "This line has been validated" +msgstr "" + +#: templates/js/translated/bom.js:1244 +msgid "Edit substitute parts" +msgstr "" + +#: templates/js/translated/bom.js:1246 templates/js/translated/bom.js:1441 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1248 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1268 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1352 templates/js/translated/build.js:1679 +msgid "No BOM items found" +msgstr "" + +#: templates/js/translated/bom.js:1612 templates/js/translated/build.js:1822 +msgid "Required Part" +msgstr "" + +#: templates/js/translated/bom.js:1638 +msgid "Inherited from parent BOM" +msgstr "" + +#: templates/js/translated/build.js:96 +msgid "Edit Build Order" +msgstr "" + +#: templates/js/translated/build.js:139 +msgid "Create Build Order" +msgstr "" + +#: templates/js/translated/build.js:172 +msgid "Cancel Build Order" +msgstr "" + +#: templates/js/translated/build.js:181 +msgid "Are you sure you wish to cancel this build?" +msgstr "是否确定取消生产?" + +#: templates/js/translated/build.js:187 +msgid "Stock items have been allocated to this build order" +msgstr "" + +#: templates/js/translated/build.js:194 +msgid "There are incomplete outputs remaining for this build order" +msgstr "" + +#: templates/js/translated/build.js:246 +msgid "Build order is ready to be completed" +msgstr "" + +#: templates/js/translated/build.js:254 +msgid "This build order cannot be completed as there are incomplete outputs" +msgstr "" + +#: templates/js/translated/build.js:259 +msgid "Build Order is incomplete" +msgstr "生产订单未完成" + +#: templates/js/translated/build.js:277 +msgid "Complete Build Order" +msgstr "生产订单完成" + +#: templates/js/translated/build.js:318 templates/js/translated/stock.js:92 +#: templates/js/translated/stock.js:235 +msgid "Next available serial number" +msgstr "" + +#: templates/js/translated/build.js:320 templates/js/translated/stock.js:94 +#: templates/js/translated/stock.js:237 +msgid "Latest serial number" +msgstr "" + +#: templates/js/translated/build.js:329 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: templates/js/translated/build.js:330 +msgid "Build outputs must be generated individually" +msgstr "" + +#: templates/js/translated/build.js:338 +msgid "Trackable parts can have serial numbers specified" +msgstr "可追踪商品可以指定序列号" + +#: templates/js/translated/build.js:339 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: templates/js/translated/build.js:346 +msgid "Create Build Output" +msgstr "创建创建生产产出" + +#: templates/js/translated/build.js:377 +msgid "Allocate stock items to this build output" +msgstr "" + +#: templates/js/translated/build.js:388 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/translated/build.js:397 +msgid "Complete build output" +msgstr "" + +#: templates/js/translated/build.js:404 +msgid "Delete build output" +msgstr "" + +#: templates/js/translated/build.js:424 +msgid "Are you sure you wish to unallocate stock items from this build?" +msgstr "" + +#: templates/js/translated/build.js:442 +msgid "Unallocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:462 templates/js/translated/build.js:623 +msgid "Select Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:463 templates/js/translated/build.js:624 +msgid "At least one build output must be selected" +msgstr "" + +#: templates/js/translated/build.js:520 templates/js/translated/build.js:681 +msgid "Output" +msgstr "" + +#: templates/js/translated/build.js:544 +msgid "Complete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:694 +msgid "Delete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:780 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:817 +msgid "Location not specified" +msgstr "未指定仓储地点" + +#: templates/js/translated/build.js:1210 +msgid "No active build outputs found" +msgstr "" + +#: templates/js/translated/build.js:1284 +msgid "Allocated Stock" +msgstr "" + +#: templates/js/translated/build.js:1291 +msgid "No tracked BOM items for this build" +msgstr "" + +#: templates/js/translated/build.js:1313 +msgid "Completed Tests" +msgstr "" + +#: templates/js/translated/build.js:1318 +msgid "No required tests for this build" +msgstr "" + +#: templates/js/translated/build.js:1781 templates/js/translated/build.js:2803 +#: templates/js/translated/sales_order.js:1544 +msgid "Edit stock allocation" +msgstr "" + +#: templates/js/translated/build.js:1783 templates/js/translated/build.js:2804 +#: templates/js/translated/sales_order.js:1545 +msgid "Delete stock allocation" +msgstr "" + +#: templates/js/translated/build.js:1799 +msgid "Edit Allocation" +msgstr "" + +#: templates/js/translated/build.js:1809 +msgid "Remove Allocation" +msgstr "" + +#: templates/js/translated/build.js:1835 +msgid "Substitute parts available" +msgstr "" + +#: templates/js/translated/build.js:1871 +msgid "Quantity Per" +msgstr "" + +#: templates/js/translated/build.js:1916 +#: templates/js/translated/sales_order.js:1806 +msgid "Insufficient stock available" +msgstr "" + +#: templates/js/translated/build.js:1918 +#: templates/js/translated/sales_order.js:1804 +msgid "Sufficient stock available" +msgstr "" + +#: templates/js/translated/build.js:2014 +#: templates/js/translated/sales_order.js:1905 +msgid "Build stock" +msgstr "" + +#: templates/js/translated/build.js:2018 templates/stock_table.html:38 +msgid "Order stock" +msgstr "" + +#: templates/js/translated/build.js:2021 +#: templates/js/translated/sales_order.js:1899 +msgid "Allocate stock" +msgstr "" + +#: templates/js/translated/build.js:2059 +#: templates/js/translated/purchase_order.js:567 +#: templates/js/translated/sales_order.js:1068 +msgid "Select Parts" +msgstr "选择商品" + +#: templates/js/translated/build.js:2060 +#: templates/js/translated/sales_order.js:1069 +msgid "You must select at least one part to allocate" +msgstr "" + +#: templates/js/translated/build.js:2108 +#: templates/js/translated/sales_order.js:1017 +msgid "Specify stock allocation quantity" +msgstr "" + +#: templates/js/translated/build.js:2187 +msgid "All Parts Allocated" +msgstr "" + +#: templates/js/translated/build.js:2188 +msgid "All selected parts have been fully allocated" +msgstr "" + +#: templates/js/translated/build.js:2202 +#: templates/js/translated/sales_order.js:1083 +msgid "Select source location (leave blank to take from all locations)" +msgstr "" + +#: templates/js/translated/build.js:2230 +msgid "Allocate Stock Items to Build Order" +msgstr "" + +#: templates/js/translated/build.js:2241 +#: templates/js/translated/sales_order.js:1180 +msgid "No matching stock locations" +msgstr "" + +#: templates/js/translated/build.js:2314 +#: templates/js/translated/sales_order.js:1257 +msgid "No matching stock items" +msgstr "" + +#: templates/js/translated/build.js:2411 +msgid "Automatic Stock Allocation" +msgstr "" + +#: templates/js/translated/build.js:2412 +msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" +msgstr "" + +#: templates/js/translated/build.js:2414 +msgid "If a location is specified, stock will only be allocated from that location" +msgstr "" + +#: templates/js/translated/build.js:2415 +msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" +msgstr "" + +#: templates/js/translated/build.js:2416 +msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" +msgstr "" + +#: templates/js/translated/build.js:2443 +msgid "Allocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:2547 +msgid "No builds matching query" +msgstr "" + +#: templates/js/translated/build.js:2582 templates/js/translated/part.js:1830 +#: templates/js/translated/part.js:2305 templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:2513 +msgid "Select" +msgstr "" + +#: templates/js/translated/build.js:2596 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/translated/build.js:2630 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2666 templates/js/translated/stock.js:2821 +msgid "No user information" +msgstr "没有用户信息" + +#: templates/js/translated/build.js:2681 +msgid "group" +msgstr "" + +#: templates/js/translated/build.js:2780 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/translated/company.js:72 +msgid "Add Manufacturer" +msgstr "添加制造商" + +#: templates/js/translated/company.js:85 templates/js/translated/company.js:187 +msgid "Add Manufacturer Part" +msgstr "添加制造商商品" + +#: templates/js/translated/company.js:106 +msgid "Edit Manufacturer Part" +msgstr "编辑制造商商品" + +#: templates/js/translated/company.js:175 +#: templates/js/translated/purchase_order.js:54 +msgid "Add Supplier" +msgstr "添加供应商" + +#: templates/js/translated/company.js:217 +#: templates/js/translated/purchase_order.js:289 +msgid "Add Supplier Part" +msgstr "添加供应商商品" + +#: templates/js/translated/company.js:318 +msgid "All selected supplier parts will be deleted" +msgstr "删除所有选定的供应商商品" + +#: templates/js/translated/company.js:334 +msgid "Delete Supplier Parts" +msgstr "" + +#: templates/js/translated/company.js:443 +msgid "Add new Company" +msgstr "增加新的公司信息" + +#: templates/js/translated/company.js:514 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/translated/company.js:523 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/translated/company.js:538 +msgid "No company information found" +msgstr "未找到该公司信息" + +#: templates/js/translated/company.js:587 +#, fuzzy +#| msgid "Create new part" +msgid "Create New Contact" +msgstr "新建商品" + +#: templates/js/translated/company.js:603 +#: templates/js/translated/company.js:725 +#, fuzzy +#| msgid "Contact" +msgid "Edit Contact" +msgstr "联系人" + +#: templates/js/translated/company.js:639 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" +msgid "All selected contacts will be deleted" +msgstr "删除所有选定的供应商商品" + +#: templates/js/translated/company.js:645 +#: templates/js/translated/company.js:709 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:653 +#, fuzzy +#| msgid "Delete outputs" +msgid "Delete Contacts" +msgstr "删除输出" + +#: templates/js/translated/company.js:684 +#, fuzzy +#| msgid "No matching action found" +msgid "No contacts found" +msgstr "未找到指定操作" + +#: templates/js/translated/company.js:697 +#, fuzzy +#| msgid "Phone number" +msgid "Phone Number" +msgstr "电话号码" + +#: templates/js/translated/company.js:703 +#, fuzzy +#| msgid "Address" +msgid "Email Address" +msgstr "地址" + +#: templates/js/translated/company.js:729 +#, fuzzy +#| msgid "Delete part" +msgid "Delete Contact" +msgstr "删除商品" + +#: templates/js/translated/company.js:803 +msgid "All selected manufacturer parts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:818 +msgid "Delete Manufacturer Parts" +msgstr "删除制造商商品" + +#: templates/js/translated/company.js:852 +msgid "All selected parameters will be deleted" +msgstr "" + +#: templates/js/translated/company.js:866 +msgid "Delete Parameters" +msgstr "删除参数" + +#: templates/js/translated/company.js:902 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/translated/company.js:922 +#: templates/js/translated/company.js:1162 templates/js/translated/part.js:719 +#: templates/js/translated/part.js:1127 +msgid "Template part" +msgstr "" + +#: templates/js/translated/company.js:926 +#: templates/js/translated/company.js:1166 templates/js/translated/part.js:723 +#: templates/js/translated/part.js:1131 +msgid "Assembled part" +msgstr "" + +#: templates/js/translated/company.js:1046 templates/js/translated/part.js:1249 +msgid "No parameters found" +msgstr "无指定参数" + +#: templates/js/translated/company.js:1081 templates/js/translated/part.js:1290 +msgid "Edit parameter" +msgstr "编辑参数" + +#: templates/js/translated/company.js:1082 templates/js/translated/part.js:1291 +msgid "Delete parameter" +msgstr "删除参数" + +#: templates/js/translated/company.js:1099 templates/js/translated/part.js:1306 +msgid "Edit Parameter" +msgstr "编辑参数" + +#: templates/js/translated/company.js:1108 templates/js/translated/part.js:1316 +msgid "Delete Parameter" +msgstr "删除参数" + +#: templates/js/translated/company.js:1141 +msgid "No supplier parts found" +msgstr "未找到供应商商品" + +#: templates/js/translated/company.js:1282 +msgid "Availability" +msgstr "" + +#: templates/js/translated/company.js:1313 +msgid "Edit supplier part" +msgstr "编辑供应商商品" + +#: templates/js/translated/company.js:1314 +msgid "Delete supplier part" +msgstr "删除供应商商品" + +#: templates/js/translated/company.js:1367 +#: templates/js/translated/pricing.js:676 +msgid "Delete Price Break" +msgstr "" + +#: templates/js/translated/company.js:1377 +#: templates/js/translated/pricing.js:694 +msgid "Edit Price Break" +msgstr "" + +#: templates/js/translated/company.js:1392 +msgid "No price break information found" +msgstr "" + +#: templates/js/translated/company.js:1421 +msgid "Last updated" +msgstr "" + +#: templates/js/translated/company.js:1428 +msgid "Edit price break" +msgstr "" + +#: templates/js/translated/company.js:1429 +msgid "Delete price break" +msgstr "" + +#: templates/js/translated/filters.js:181 +#: templates/js/translated/filters.js:538 +msgid "true" +msgstr "" + +#: templates/js/translated/filters.js:185 +#: templates/js/translated/filters.js:539 +msgid "false" +msgstr "" + +#: templates/js/translated/filters.js:209 +msgid "Select filter" +msgstr "选择筛选项" + +#: templates/js/translated/filters.js:315 +#, fuzzy +#| msgid "Permission to delete items" +msgid "Print reports for selected items" +msgstr "删除项目权限" + +#: templates/js/translated/filters.js:324 +#, fuzzy +#| msgid "Allocate selected items" +msgid "Print labels for selected items" +msgstr "分配选定项目" + +#: templates/js/translated/filters.js:333 +#, fuzzy +#| msgid "Download Image" +msgid "Download table data" +msgstr "下载图片" + +#: templates/js/translated/filters.js:340 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:349 +msgid "Add new filter" +msgstr "" + +#: templates/js/translated/filters.js:357 +msgid "Clear all filters" +msgstr "" + +#: templates/js/translated/filters.js:447 +msgid "Create filter" +msgstr "" + +#: templates/js/translated/forms.js:362 templates/js/translated/forms.js:377 +#: templates/js/translated/forms.js:391 templates/js/translated/forms.js:405 +msgid "Action Prohibited" +msgstr "" + +#: templates/js/translated/forms.js:364 +msgid "Create operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:379 +msgid "Update operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:393 +msgid "Delete operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:407 +msgid "View operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:728 +msgid "Keep this form open" +msgstr "" + +#: templates/js/translated/forms.js:829 +msgid "Enter a valid number" +msgstr "" + +#: templates/js/translated/forms.js:1340 templates/modals.html:19 +#: templates/modals.html:43 +msgid "Form errors exist" +msgstr "" + +#: templates/js/translated/forms.js:1794 +msgid "No results found" +msgstr "" + +#: templates/js/translated/forms.js:2010 templates/js/translated/search.js:269 +msgid "Searching" +msgstr "" + +#: templates/js/translated/forms.js:2215 +msgid "Clear input" +msgstr "" + +#: templates/js/translated/forms.js:2671 +msgid "File Column" +msgstr "" + +#: templates/js/translated/forms.js:2671 +msgid "Field Name" +msgstr "" + +#: templates/js/translated/forms.js:2683 +msgid "Select Columns" +msgstr "" + +#: templates/js/translated/helpers.js:38 +msgid "YES" +msgstr "" + +#: templates/js/translated/helpers.js:41 +msgid "NO" +msgstr "" + +#: templates/js/translated/helpers.js:466 +msgid "Notes updated" +msgstr "" + +#: templates/js/translated/label.js:55 +msgid "Select Printer" +msgstr "" + +#: templates/js/translated/label.js:59 +msgid "Export to PDF" +msgstr "" + +#: templates/js/translated/label.js:102 +msgid "stock items selected" +msgstr "已选择库存项" + +#: templates/js/translated/label.js:110 templates/js/translated/label.js:127 +msgid "Select Label Template" +msgstr "选择标签模板" + +#: templates/js/translated/label.js:166 templates/js/translated/report.js:123 +#, fuzzy +#| msgid "Select Stock Items" +msgid "Select Items" +msgstr "选择库存项" + +#: templates/js/translated/label.js:167 +#, fuzzy +#| msgid "Stock item(s) must be selected before printing labels" +msgid "No items selected for printing" +msgstr "打印标签前必须选择库存项目" + +#: templates/js/translated/label.js:183 +msgid "No Labels Found" +msgstr "未找到标签" + +#: templates/js/translated/label.js:184 +#, fuzzy +#| msgid "No labels found which match the selected part(s)" +msgid "No label templates found which match the selected items" +msgstr "没有找到与所选商品相匹配的标签" + +#: templates/js/translated/label.js:203 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:53 templates/js/translated/modals.js:150 +#: templates/js/translated/modals.js:663 +msgid "Cancel" +msgstr "取消" + +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:149 +#: templates/js/translated/modals.js:731 templates/js/translated/modals.js:1039 +#: templates/modals.html:28 templates/modals.html:51 +msgid "Submit" +msgstr "" + +#: templates/js/translated/modals.js:148 +msgid "Form Title" +msgstr "" + +#: templates/js/translated/modals.js:429 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/translated/modals.js:576 +msgid "Show Error Information" +msgstr "" + +#: templates/js/translated/modals.js:662 +msgid "Accept" +msgstr "" + +#: templates/js/translated/modals.js:720 +msgid "Loading Data" +msgstr "" + +#: templates/js/translated/modals.js:991 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/translated/modals.js:991 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/translated/modals.js:1003 +msgid "Error posting form data" +msgstr "" + +#: templates/js/translated/modals.js:1100 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/translated/modals.js:1115 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/translated/modals.js:1116 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/translated/modals.js:1139 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/translated/news.js:24 +msgid "No news found" +msgstr "" + +#: templates/js/translated/notification.js:42 +msgid "Age" +msgstr "" + +#: templates/js/translated/notification.js:55 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:207 +msgid "Mark as unread" +msgstr "" + +#: templates/js/translated/notification.js:211 +msgid "Mark as read" +msgstr "" + +#: templates/js/translated/notification.js:236 +msgid "No unread notifications" +msgstr "" + +#: templates/js/translated/notification.js:278 templates/notifications.html:10 +msgid "Notifications will load here" +msgstr "" + +#: templates/js/translated/order.js:72 +msgid "Add Extra Line Item" +msgstr "" + +#: templates/js/translated/order.js:109 +msgid "Export Order" +msgstr "" + +#: templates/js/translated/order.js:222 +msgid "Duplicate Line" +msgstr "" + +#: templates/js/translated/order.js:236 +msgid "Edit Line" +msgstr "" + +#: templates/js/translated/order.js:249 +msgid "Delete Line" +msgstr "" + +#: templates/js/translated/order.js:262 +#: templates/js/translated/purchase_order.js:1895 +msgid "No line items found" +msgstr "" + +#: templates/js/translated/order.js:344 +msgid "Duplicate line" +msgstr "" + +#: templates/js/translated/order.js:345 +msgid "Edit line" +msgstr "" + +#: templates/js/translated/order.js:349 +msgid "Delete line" +msgstr "" + +#: templates/js/translated/part.js:56 +msgid "Part Attributes" +msgstr "商品属性" + +#: templates/js/translated/part.js:60 +msgid "Part Creation Options" +msgstr "商品创建选项" + +#: templates/js/translated/part.js:64 +msgid "Part Duplication Options" +msgstr "商品重复选项" + +#: templates/js/translated/part.js:87 +msgid "Add Part Category" +msgstr "增加商品类别" + +#: templates/js/translated/part.js:259 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:275 templates/js/translated/stock.js:120 +msgid "Icon (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/part.js:291 +msgid "Edit Part Category" +msgstr "编辑商品类别" + +#: templates/js/translated/part.js:304 +msgid "Are you sure you want to delete this part category?" +msgstr "" + +#: templates/js/translated/part.js:309 +msgid "Move to parent category" +msgstr "" + +#: templates/js/translated/part.js:318 +msgid "Delete Part Category" +msgstr "删除商品类别" + +#: templates/js/translated/part.js:322 +msgid "Action for parts in this category" +msgstr "" + +#: templates/js/translated/part.js:327 +msgid "Action for child categories" +msgstr "" + +#: templates/js/translated/part.js:351 +msgid "Create Part" +msgstr "创建商品" + +#: templates/js/translated/part.js:353 +msgid "Create another part after this one" +msgstr "" + +#: templates/js/translated/part.js:354 +msgid "Part created successfully" +msgstr "" + +#: templates/js/translated/part.js:382 +msgid "Edit Part" +msgstr "编辑商品" + +#: templates/js/translated/part.js:384 +msgid "Part edited" +msgstr "" + +#: templates/js/translated/part.js:395 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:452 +msgid "Active Part" +msgstr "" + +#: templates/js/translated/part.js:453 +msgid "Part cannot be deleted as it is currently active" +msgstr "" + +#: templates/js/translated/part.js:467 +msgid "Deleting this part cannot be reversed" +msgstr "" + +#: templates/js/translated/part.js:469 +msgid "Any stock items for this part will be deleted" +msgstr "" + +#: templates/js/translated/part.js:470 +msgid "This part will be removed from any Bills of Material" +msgstr "" + +#: templates/js/translated/part.js:471 +msgid "All manufacturer and supplier information for this part will be deleted" +msgstr "" + +#: templates/js/translated/part.js:478 +msgid "Delete Part" +msgstr "" + +#: templates/js/translated/part.js:514 +msgid "You are subscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:516 +msgid "You have subscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:521 +msgid "Subscribe to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:523 +msgid "You have unsubscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:540 +msgid "Validating the BOM will mark each line item as valid" +msgstr "" + +#: templates/js/translated/part.js:550 +msgid "Validate Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:553 +msgid "Validated Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:578 +msgid "Copy Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:606 +#: templates/js/translated/table_filters.js:555 +msgid "Low stock" +msgstr "" + +#: templates/js/translated/part.js:609 +msgid "No stock available" +msgstr "" + +#: templates/js/translated/part.js:669 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:692 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:711 templates/js/translated/part.js:1119 +msgid "Trackable part" +msgstr "可追溯商品" + +#: templates/js/translated/part.js:715 templates/js/translated/part.js:1123 +msgid "Virtual part" +msgstr "虚拟商品" + +#: templates/js/translated/part.js:727 +msgid "Subscribed part" +msgstr "" + +#: templates/js/translated/part.js:731 +msgid "Salable part" +msgstr "可销售商品" + +#: templates/js/translated/part.js:806 +msgid "Schedule generation of a new stocktake report." +msgstr "" + +#: templates/js/translated/part.js:806 +msgid "Once complete, the stocktake report will be available for download." +msgstr "" + +#: templates/js/translated/part.js:814 +msgid "Generate Stocktake Report" +msgstr "" + +#: templates/js/translated/part.js:818 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:967 +msgid "No stocktake information available" +msgstr "" + +#: templates/js/translated/part.js:1025 templates/js/translated/part.js:1061 +msgid "Edit Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1029 templates/js/translated/part.js:1071 +msgid "Delete Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1198 +msgid "No variants found" +msgstr "" + +#: templates/js/translated/part.js:1351 +#: templates/js/translated/purchase_order.js:1567 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1495 +#: templates/js/translated/purchase_order.js:2058 +#: templates/js/translated/return_order.js:698 +#: templates/js/translated/sales_order.js:1767 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1541 +#: templates/js/translated/purchase_order.js:2125 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1608 +msgid "Delete part relationship" +msgstr "" + +#: templates/js/translated/part.js:1630 +msgid "Delete Part Relationship" +msgstr "" + +#: templates/js/translated/part.js:1695 templates/js/translated/part.js:1982 +msgid "No parts found" +msgstr "" + +#: templates/js/translated/part.js:1892 +msgid "No category" +msgstr "没有分类" + +#: templates/js/translated/part.js:2006 templates/js/translated/part.js:2224 +#: templates/js/translated/stock.js:2472 +msgid "Display as list" +msgstr "" + +#: templates/js/translated/part.js:2022 +msgid "Display as grid" +msgstr "" + +#: templates/js/translated/part.js:2088 +msgid "Set the part category for the selected parts" +msgstr "" + +#: templates/js/translated/part.js:2093 +msgid "Set Part Category" +msgstr "设置商品类别" + +#: templates/js/translated/part.js:2098 +msgid "Select Part Category" +msgstr "" + +#: templates/js/translated/part.js:2111 +msgid "Category is required" +msgstr "" + +#: templates/js/translated/part.js:2244 templates/js/translated/stock.js:2492 +msgid "Display as tree" +msgstr "" + +#: templates/js/translated/part.js:2324 +msgid "Load Subcategories" +msgstr "" + +#: templates/js/translated/part.js:2340 +msgid "Subscribed category" +msgstr "" + +#: templates/js/translated/part.js:2420 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/translated/part.js:2471 templates/js/translated/stock.js:1359 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/part.js:2472 templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1622 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/part.js:2476 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/translated/part.js:2492 +msgid "Edit Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:2506 +msgid "Delete Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:2585 templates/js/translated/part.js:2586 +msgid "No date specified" +msgstr "" + +#: templates/js/translated/part.js:2588 +msgid "Specified date is in the past" +msgstr "" + +#: templates/js/translated/part.js:2594 +msgid "Speculative" +msgstr "" + +#: templates/js/translated/part.js:2644 +msgid "No scheduling information available for this part" +msgstr "" + +#: templates/js/translated/part.js:2650 +msgid "Error fetching scheduling information for this part" +msgstr "" + +#: templates/js/translated/part.js:2746 +msgid "Scheduled Stock Quantities" +msgstr "" + +#: templates/js/translated/part.js:2762 +msgid "Maximum Quantity" +msgstr "" + +#: templates/js/translated/part.js:2807 +msgid "Minimum Stock Level" +msgstr "" + +#: templates/js/translated/plugin.js:23 +msgid "The Plugin was installed" +msgstr "" + +#: templates/js/translated/pricing.js:141 +msgid "Error fetching currency data" +msgstr "" + +#: templates/js/translated/pricing.js:303 +msgid "No BOM data available" +msgstr "" + +#: templates/js/translated/pricing.js:445 +msgid "No supplier pricing data available" +msgstr "" + +#: templates/js/translated/pricing.js:554 +msgid "No price break data available" +msgstr "" + +#: templates/js/translated/pricing.js:737 +msgid "No purchase history data available" +msgstr "" + +#: templates/js/translated/pricing.js:759 +msgid "Purchase Price History" +msgstr "" + +#: templates/js/translated/pricing.js:859 +msgid "No sales history data available" +msgstr "" + +#: templates/js/translated/pricing.js:881 +msgid "Sale Price History" +msgstr "" + +#: templates/js/translated/pricing.js:970 +msgid "No variant data available" +msgstr "" + +#: templates/js/translated/pricing.js:1010 +msgid "Variant Part" +msgstr "" + +#: templates/js/translated/purchase_order.js:109 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:116 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:117 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:124 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:125 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:142 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:159 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:387 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:404 +#: templates/js/translated/return_order.js:165 +#: templates/js/translated/sales_order.js:435 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:410 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:415 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:416 +#: templates/js/translated/sales_order.js:449 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:439 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:444 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:450 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:471 +#: templates/js/translated/return_order.js:119 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:476 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:568 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:593 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:602 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:620 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:652 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:796 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:815 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:994 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:995 +#: templates/js/translated/return_order.js:438 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1023 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1034 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1110 +#: templates/js/translated/stock.js:2273 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1124 +#, fuzzy +#| msgid "Barcode" +msgid "Add barcode" +msgstr "条形码" + +#: templates/js/translated/purchase_order.js:1125 +#, fuzzy +#| msgid "Remove row" +msgid "Remove barcode" +msgstr "移除行" + +#: templates/js/translated/purchase_order.js:1128 +#, fuzzy +#| msgid "Edit location" +msgid "Specify location" +msgstr "编辑仓储地" + +#: templates/js/translated/purchase_order.js:1136 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1147 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1199 +#, fuzzy +#| msgid "Serial Numbers" +msgid "Serials" +msgstr "序列号" + +#: templates/js/translated/purchase_order.js:1224 +msgid "Order Code" +msgstr "订单编码" + +#: templates/js/translated/purchase_order.js:1226 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1248 +#: templates/js/translated/return_order.js:503 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1249 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1317 +#, fuzzy +#| msgid "Scan Barcode" +msgid "Scan Item Barcode" +msgstr "扫描条形码" + +#: templates/js/translated/purchase_order.js:1318 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1332 +#, fuzzy +#| msgid "Enter barcode data" +msgid "Invalid barcode data" +msgstr "输入条形码数据" + +#: templates/js/translated/purchase_order.js:1594 +#: templates/js/translated/return_order.js:244 +#: templates/js/translated/sales_order.js:712 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1644 +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:777 +#: templates/js/translated/sales_order.js:919 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1743 +#, fuzzy +#| msgid "All selected supplier parts will be deleted" +msgid "All selected Line items will be deleted" +msgstr "删除所有选定的供应商商品" + +#: templates/js/translated/purchase_order.js:1761 +#, fuzzy +#| msgid "Allocate selected items" +msgid "Delete selected Line items?" +msgstr "分配选定项目" + +#: templates/js/translated/purchase_order.js:1821 +#: templates/js/translated/sales_order.js:1959 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1836 +#: templates/js/translated/return_order.js:422 +#: templates/js/translated/return_order.js:611 +#: templates/js/translated/sales_order.js:1972 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1847 +#: templates/js/translated/return_order.js:624 +#: templates/js/translated/sales_order.js:1983 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2129 +#: templates/js/translated/sales_order.js:1913 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2130 +#: templates/js/translated/return_order.js:743 +#: templates/js/translated/sales_order.js:1914 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2131 +#: templates/js/translated/return_order.js:747 +#: templates/js/translated/sales_order.js:1920 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "没有找到报表" + +#: templates/js/translated/report.js:141 +#, fuzzy +#| msgid "No labels found which match the selected part(s)" +msgid "No report templates found which match the selected items" +msgstr "没有找到与所选商品相匹配的标签" + +#: templates/js/translated/return_order.js:40 +#: templates/js/translated/sales_order.js:53 +msgid "Add Customer" +msgstr "" + +#: templates/js/translated/return_order.js:89 +#, fuzzy +#| msgid "Create Purchase Order" +msgid "Create Return Order" +msgstr "创建采购订单" + +#: templates/js/translated/return_order.js:104 +msgid "Edit Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:124 +msgid "Issue Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:141 +#, fuzzy +#| msgid "Are you sure you wish to cancel this build?" +msgid "Are you sure you wish to cancel this Return Order?" +msgstr "是否确定取消生产?" + +#: templates/js/translated/return_order.js:148 +#, fuzzy +#| msgid "Cancel order" +msgid "Cancel Return Order" +msgstr "取消订单" + +#: templates/js/translated/return_order.js:173 +#, fuzzy +#| msgid "Complete Build Order" +msgid "Complete Return Order" +msgstr "生产订单完成" + +#: templates/js/translated/return_order.js:221 +#, fuzzy +#| msgid "No parameters found" +msgid "No return orders found" +msgstr "无指定参数" + +#: templates/js/translated/return_order.js:258 +#: templates/js/translated/sales_order.js:726 +msgid "Invalid Customer" +msgstr "" + +#: templates/js/translated/return_order.js:504 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:635 +#: templates/js/translated/sales_order.js:2119 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:740 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:103 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:118 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:230 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:235 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:275 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:295 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:351 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:355 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:365 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:387 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:448 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:470 +#, fuzzy +#| msgid "New Sales Order" +msgid "Issue this Sales Order?" +msgstr "新建销售订单" + +#: templates/js/translated/sales_order.js:475 +#, fuzzy +#| msgid "New Sales Order" +msgid "Issue Sales Order" +msgstr "新建销售订单" + +#: templates/js/translated/sales_order.js:494 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:499 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:553 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:663 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:831 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:834 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:839 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:856 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:871 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:904 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:914 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:938 +#: templates/js/translated/sales_order.js:1424 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1116 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1167 +msgid "Confirm stock allocation" +msgstr "确认库存分配" + +#: templates/js/translated/sales_order.js:1168 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1372 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1464 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1478 +msgid "Confirm Delete Operation" +msgstr "确认删除操作" + +#: templates/js/translated/sales_order.js:1479 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1521 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/stock.js:1664 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1617 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:1897 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:1901 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/sales_order.js:2097 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:1924 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1927 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:1998 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2105 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:300 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:322 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:372 +msgid "results" +msgstr "" + +#: templates/js/translated/search.js:382 +msgid "Minimize results" +msgstr "" + +#: templates/js/translated/search.js:385 +msgid "Remove results" +msgstr "" + +#: templates/js/translated/stock.js:71 +msgid "Serialize Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:102 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:111 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:146 +msgid "Edit Stock Location" +msgstr "编辑仓储地点" + +#: templates/js/translated/stock.js:161 +msgid "New Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:175 +msgid "Are you sure you want to delete this stock location?" +msgstr "确实要删除此仓储地点吗?" + +#: templates/js/translated/stock.js:182 +msgid "Move to parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:191 +msgid "Delete Stock Location" +msgstr "删除仓储地点" + +#: templates/js/translated/stock.js:195 +msgid "Action for stock items in this stock location" +msgstr "" + +#: templates/js/translated/stock.js:200 +msgid "Action for sub-locations" +msgstr "" + +#: templates/js/translated/stock.js:254 +msgid "This part cannot be serialized" +msgstr "" + +#: templates/js/translated/stock.js:296 +msgid "Enter initial quantity for this stock item" +msgstr "" + +#: templates/js/translated/stock.js:302 +msgid "Enter serial numbers for new stock (or leave blank)" +msgstr "" + +#: templates/js/translated/stock.js:373 +msgid "Stock item duplicated" +msgstr "" + +#: templates/js/translated/stock.js:393 +msgid "Duplicate Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:409 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: templates/js/translated/stock.js:414 +msgid "Delete Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:435 +msgid "Edit Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:485 +msgid "Created new stock item" +msgstr "" + +#: templates/js/translated/stock.js:498 +msgid "Created multiple stock items" +msgstr "" + +#: templates/js/translated/stock.js:523 +msgid "Find Serial Number" +msgstr "" + +#: templates/js/translated/stock.js:527 templates/js/translated/stock.js:528 +msgid "Enter serial number" +msgstr "" + +#: templates/js/translated/stock.js:544 +msgid "Enter a serial number" +msgstr "" + +#: templates/js/translated/stock.js:564 +msgid "No matching serial number" +msgstr "" + +#: templates/js/translated/stock.js:573 +msgid "More than one matching result found" +msgstr "" + +#: templates/js/translated/stock.js:697 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:698 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:775 +msgid "Warning: Merge operation cannot be reversed" +msgstr "" + +#: templates/js/translated/stock.js:776 +msgid "Some information will be lost when merging stock items" +msgstr "" + +#: templates/js/translated/stock.js:778 +msgid "Stock transaction history will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:779 +msgid "Supplier part information will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:870 +msgid "Confirm stock item merge" +msgstr "" + +#: templates/js/translated/stock.js:871 +msgid "Merge Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:966 +msgid "Transfer Stock" +msgstr "" + +#: templates/js/translated/stock.js:967 +msgid "Move" +msgstr "" + +#: templates/js/translated/stock.js:973 +msgid "Count Stock" +msgstr "" + +#: templates/js/translated/stock.js:974 +msgid "Count" +msgstr "" + +#: templates/js/translated/stock.js:978 +msgid "Remove Stock" +msgstr "" + +#: templates/js/translated/stock.js:979 +msgid "Take" +msgstr "" + +#: templates/js/translated/stock.js:983 +msgid "Add Stock" +msgstr "" + +#: templates/js/translated/stock.js:984 users/models.py:239 +msgid "Add" +msgstr "添加" + +#: templates/js/translated/stock.js:988 +msgid "Delete Stock" +msgstr "" + +#: templates/js/translated/stock.js:1085 +msgid "Quantity cannot be adjusted for serialized stock" +msgstr "" + +#: templates/js/translated/stock.js:1085 +msgid "Specify stock quantity" +msgstr "" + +#: templates/js/translated/stock.js:1119 +msgid "Select Stock Items" +msgstr "选择库存项" + +#: templates/js/translated/stock.js:1120 +msgid "You must select at least one available stock item" +msgstr "" + +#: templates/js/translated/stock.js:1147 +msgid "Confirm stock adjustment" +msgstr "" + +#: templates/js/translated/stock.js:1283 +msgid "PASS" +msgstr "" + +#: templates/js/translated/stock.js:1285 +msgid "FAIL" +msgstr "" + +#: templates/js/translated/stock.js:1290 +msgid "NO RESULT" +msgstr "" + +#: templates/js/translated/stock.js:1352 +msgid "Pass test" +msgstr "" + +#: templates/js/translated/stock.js:1355 +msgid "Add test result" +msgstr "" + +#: templates/js/translated/stock.js:1379 +msgid "No test results found" +msgstr "" + +#: templates/js/translated/stock.js:1443 +msgid "Test Date" +msgstr "" + +#: templates/js/translated/stock.js:1605 +msgid "Edit Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1627 +msgid "Delete Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1656 +msgid "In production" +msgstr "正在生产" + +#: templates/js/translated/stock.js:1660 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:1668 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/translated/stock.js:1674 +msgid "No stock location set" +msgstr "未设置仓储地点" + +#: templates/js/translated/stock.js:1824 +msgid "Stock item is in production" +msgstr "库存品正在生产" + +#: templates/js/translated/stock.js:1829 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/translated/stock.js:1832 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/translated/stock.js:1835 +msgid "Serialized stock item has been allocated" +msgstr "" + +#: templates/js/translated/stock.js:1837 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1839 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1842 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:1846 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/translated/stock.js:1848 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/translated/stock.js:1855 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/translated/stock.js:1857 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/translated/stock.js:1859 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/translated/stock.js:1863 +#: templates/js/translated/table_filters.js:248 +msgid "Depleted" +msgstr "" + +#: templates/js/translated/stock.js:2005 +msgid "Supplier part not specified" +msgstr "" + +#: templates/js/translated/stock.js:2052 +#, fuzzy +#| msgid "Stock Source" +msgid "Stock Value" +msgstr "库存来源" + +#: templates/js/translated/stock.js:2140 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/translated/stock.js:2288 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/translated/stock.js:2302 +msgid "Select Status Code" +msgstr "" + +#: templates/js/translated/stock.js:2303 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/translated/stock.js:2531 +msgid "Load Subloactions" +msgstr "" + +#: templates/js/translated/stock.js:2638 +msgid "Details" +msgstr "详情" + +#: templates/js/translated/stock.js:2654 +msgid "Part information unavailable" +msgstr "" + +#: templates/js/translated/stock.js:2676 +msgid "Location no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2695 +msgid "Purchase order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2712 +#, fuzzy +#| msgid "Sales Order Settings" +msgid "Sales Order no longer exists" +msgstr "销售订单设置" + +#: templates/js/translated/stock.js:2729 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2748 +msgid "Customer no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2766 +msgid "Stock item no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2784 +msgid "Added" +msgstr "" + +#: templates/js/translated/stock.js:2792 +msgid "Removed" +msgstr "" + +#: templates/js/translated/stock.js:2868 +msgid "No installed items" +msgstr "" + +#: templates/js/translated/stock.js:2918 templates/js/translated/stock.js:2953 +msgid "Uninstall Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:2971 +msgid "Select stock item to uninstall" +msgstr "" + +#: templates/js/translated/stock.js:2992 +msgid "Install another stock item into this item" +msgstr "" + +#: templates/js/translated/stock.js:2993 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: templates/js/translated/stock.js:2995 +msgid "The Stock Item links to a Part which is the BOM for this Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:2996 +msgid "The Stock Item is currently available in stock" +msgstr "" + +#: templates/js/translated/stock.js:2997 +msgid "The Stock Item is not already installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:2998 +msgid "The Stock Item is tracked by either a batch code or serial number" +msgstr "" + +#: templates/js/translated/stock.js:3011 +msgid "Select part to install" +msgstr "" + +#: templates/js/translated/table_filters.js:25 +#: templates/js/translated/table_filters.js:424 +#: templates/js/translated/table_filters.js:435 +#: templates/js/translated/table_filters.js:465 +msgid "Order status" +msgstr "" + +#: templates/js/translated/table_filters.js:30 +#: templates/js/translated/table_filters.js:440 +#: templates/js/translated/table_filters.js:457 +#: templates/js/translated/table_filters.js:470 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:38 +#: templates/js/translated/table_filters.js:388 +#: templates/js/translated/table_filters.js:448 +#: templates/js/translated/table_filters.js:478 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:84 +msgid "Trackable Part" +msgstr "可追溯商品" + +#: templates/js/translated/table_filters.js:88 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:92 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:108 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:587 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +#: templates/js/translated/table_filters.js:243 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:159 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:177 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:524 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:567 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:196 +#: templates/js/translated/table_filters.js:278 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:285 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:200 +#: templates/js/translated/table_filters.js:286 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:289 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:290 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:207 +#: templates/js/translated/table_filters.js:208 +#: templates/js/translated/table_filters.js:281 +#: templates/js/translated/table_filters.js:282 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:212 +#: templates/js/translated/table_filters.js:303 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:496 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:224 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:229 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:233 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:239 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:244 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:249 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:254 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:258 +msgid "In Production" +msgstr "正在生产" + +#: templates/js/translated/table_filters.js:259 +msgid "Show items which are in production" +msgstr "显示正在生产的项目" + +#: templates/js/translated/table_filters.js:263 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:264 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:268 +msgid "Installed" +msgstr "" + +#: templates/js/translated/table_filters.js:269 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:274 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:294 +#: templates/js/translated/table_filters.js:295 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +msgid "Tracked" +msgstr "" + +#: templates/js/translated/table_filters.js:307 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:312 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:313 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:317 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:321 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:334 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:340 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:352 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:375 +msgid "Build status" +msgstr "生产状态" + +#: templates/js/translated/table_filters.js:525 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:530 +msgid "Show active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:538 +msgid "Available stock" +msgstr "" + +#: templates/js/translated/table_filters.js:546 +msgid "Has IPN" +msgstr "" + +#: templates/js/translated/table_filters.js:547 +msgid "Part has internal part number" +msgstr "商品有内部编号" + +#: templates/js/translated/table_filters.js:551 +msgid "In stock" +msgstr "" + +#: templates/js/translated/table_filters.js:559 +msgid "Purchasable" +msgstr "" + +#: templates/js/translated/table_filters.js:571 +msgid "Has stocktake entries" +msgstr "" + +#: templates/js/translated/tables.js:86 +msgid "Display calendar view" +msgstr "显示日历" + +#: templates/js/translated/tables.js:96 +msgid "Display list view" +msgstr "列表视图" + +#: templates/js/translated/tables.js:106 +msgid "Display tree view" +msgstr "" + +#: templates/js/translated/tables.js:124 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:180 +msgid "Export Table Data" +msgstr "" + +#: templates/js/translated/tables.js:184 +msgid "Select File Format" +msgstr "" + +#: templates/js/translated/tables.js:549 +msgid "Loading data" +msgstr "" + +#: templates/js/translated/tables.js:552 +msgid "rows per page" +msgstr "" + +#: templates/js/translated/tables.js:557 +msgid "Showing all rows" +msgstr "" + +#: templates/js/translated/tables.js:559 +msgid "Showing" +msgstr "" + +#: templates/js/translated/tables.js:559 +msgid "to" +msgstr "" + +#: templates/js/translated/tables.js:559 +msgid "of" +msgstr "" + +#: templates/js/translated/tables.js:559 +msgid "rows" +msgstr "" + +#: templates/js/translated/tables.js:566 +msgid "No matching results" +msgstr "" + +#: templates/js/translated/tables.js:569 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/translated/tables.js:575 +msgid "Toggle" +msgstr "" + +#: templates/js/translated/tables.js:578 +msgid "Columns" +msgstr "" + +#: templates/js/translated/tables.js:581 +msgid "All" +msgstr "" + +#: templates/navbar.html:45 +msgid "Buy" +msgstr "采购" + +#: templates/navbar.html:57 +msgid "Sell" +msgstr "销售" + +#: templates/navbar.html:121 +msgid "Show Notifications" +msgstr "" + +#: templates/navbar.html:124 +msgid "New Notifications" +msgstr "" + +#: templates/navbar.html:142 users/models.py:36 +msgid "Admin" +msgstr "管理员" + +#: templates/navbar.html:145 +msgid "Logout" +msgstr "" + +#: templates/notes_buttons.html:6 templates/notes_buttons.html:7 +msgid "Save" +msgstr "" + +#: templates/notifications.html:13 +msgid "Show all notifications and history" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:6 +msgid "You were logged out successfully." +msgstr "" + +#: templates/registration/logged_out.html:8 +msgid "Log in again" +msgstr "" + +#: templates/search.html:9 +msgid "Show full search results" +msgstr "" + +#: templates/search.html:12 +msgid "Clear search" +msgstr "" + +#: templates/search.html:15 +msgid "Close search menu" +msgstr "" + +#: templates/socialaccount/authentication_error.html:5 +msgid "Social Network Login Failure" +msgstr "" + +#: templates/socialaccount/authentication_error.html:8 +msgid "Account Login Failure" +msgstr "" + +#: templates/socialaccount/authentication_error.html:11 +msgid "An error occurred while attempting to login via your social network account." +msgstr "" + +#: templates/socialaccount/authentication_error.html:13 +msgid "Contact your system administrator for further information." +msgstr "" + +#: templates/socialaccount/login.html:8 +#, python-format +msgid "Connect %(provider)s" +msgstr "" + +#: templates/socialaccount/login.html:10 +#, python-format +msgid "You are about to connect a new third party account from %(provider)s." +msgstr "" + +#: templates/socialaccount/login.html:12 +#, python-format +msgid "Sign In Via %(provider)s" +msgstr "" + +#: templates/socialaccount/login.html:14 +#, python-format +msgid "You are about to sign in using a third party account from %(provider)s." +msgstr "" + +#: templates/socialaccount/login.html:19 +msgid "Continue" +msgstr "" + +#: templates/socialaccount/signup.html:10 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to\n" +"%(site_name)s.
As a final step, please complete the following form:" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:18 +msgid "Database" +msgstr "" + +#: templates/stats.html:26 +msgid "Server is running in debug mode" +msgstr "" + +#: templates/stats.html:33 +msgid "Docker Mode" +msgstr "" + +#: templates/stats.html:34 +msgid "Server is deployed using docker" +msgstr "" + +#: templates/stats.html:39 +msgid "Plugin Support" +msgstr "" + +#: templates/stats.html:43 +msgid "Plugin support enabled" +msgstr "" + +#: templates/stats.html:45 +msgid "Plugin support disabled" +msgstr "" + +#: templates/stats.html:52 +msgid "Server status" +msgstr "" + +#: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:75 +msgid "Email Settings" +msgstr "电子邮件设置" + +#: templates/stats.html:78 +msgid "Email settings not configured" +msgstr "电子邮件设置未配置" + +#: templates/stock_table.html:17 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:28 +msgid "Stock Options" +msgstr "" + +#: templates/stock_table.html:33 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:34 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:35 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:36 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:37 +msgid "Merge selected stock items" +msgstr "" + +#: templates/stock_table.html:37 +msgid "Merge stock" +msgstr "" + +#: templates/stock_table.html:38 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:40 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:40 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Delete stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "确定" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "取消" + +#: users/admin.py:61 +msgid "Users" +msgstr "用户" + +#: users/admin.py:62 +msgid "Select which users are assigned to this group" +msgstr "选择分配给该组的用户" + +#: users/admin.py:199 +msgid "The following users are members of multiple groups:" +msgstr "以下用户是多个群组的成员:" + +#: users/admin.py:222 +msgid "Personal info" +msgstr "个人资料" + +#: users/admin.py:223 +msgid "Permissions" +msgstr "权限" + +#: users/admin.py:226 +msgid "Important dates" +msgstr "重要日期" + +#: users/models.py:226 +msgid "Permission set" +msgstr "权限设置" + +#: users/models.py:234 +msgid "Group" +msgstr "群组" + +#: users/models.py:237 +msgid "View" +msgstr "视图" + +#: users/models.py:237 +msgid "Permission to view items" +msgstr "查看项目权限" + +#: users/models.py:239 +msgid "Permission to add items" +msgstr "添加项目权限" + +#: users/models.py:241 +msgid "Change" +msgstr "更改" + +#: users/models.py:241 +msgid "Permissions to edit items" +msgstr "编辑项目权限" + +#: users/models.py:243 +msgid "Permission to delete items" +msgstr "删除项目权限" + +#, python-format +#~ msgid "This Build Order is allocated to Sales Order %(link)s" +#~ msgstr "此构建订单已分配给销售订单 %(link)s" + +#~ msgid "Part description" +#~ msgstr "商品描述" + +#~ msgid "Printing Actions" +#~ msgstr "打印操作" + +#~ msgid "Print labels" +#~ msgstr "打印标签" + +#~ msgid "Print Order Reports" +#~ msgstr "打印订单报表" + +#~ msgid "Print Labels" +#~ msgstr "打印标签" + +#~ msgid "No labels found which match selected stock item(s)" +#~ msgstr "没有找到与选定的库存项匹配的标签" + +#~ msgid "Select Stock Locations" +#~ msgstr "选择仓储地点" + +#~ msgid "Stock location(s) must be selected before printing labels" +#~ msgstr "打印标签前必须选择仓储地点" + +#~ msgid "No labels found which match selected stock location(s)" +#~ msgstr "没有找到匹配选定库存地点的标签" + +#~ msgid "Part(s) must be selected before printing labels" +#~ msgstr "打印标签前必须选择商品" + +#~ msgid "Company ID" +#~ msgstr "公司ID" + +#~ msgid "Manufacturer Part ID" +#~ msgstr "制造商商品ID" + +#~ msgid "Stock item(s) must be selected before printing reports" +#~ msgstr "在打印报表之前必须选择库存项目" + +#~ msgid "Build(s) must be selected before printing reports" +#~ msgstr "打印报表前必须选择Build(s)" + +#~ msgid "Part(s) must be selected before printing reports" +#~ msgstr "打印报表前必须选择商品" + +#~ msgid "Print test reports" +#~ msgstr "打印测试报表" diff --git a/InvenTree/order/admin.py b/InvenTree/order/admin.py index aa24c095f6..c1123bd5c4 100644 --- a/InvenTree/order/admin.py +++ b/InvenTree/order/admin.py @@ -6,13 +6,9 @@ import import_export.widgets as widgets from import_export.admin import ImportExportModelAdmin from import_export.fields import Field +import order.models as models from InvenTree.admin import InvenTreeResource -from .models import (PurchaseOrder, PurchaseOrderExtraLine, - PurchaseOrderLineItem, SalesOrder, SalesOrderAllocation, - SalesOrderExtraLine, SalesOrderLineItem, - SalesOrderShipment) - # region general classes class GeneralExtraLineAdmin: @@ -42,7 +38,7 @@ class GeneralExtraLineMeta: class PurchaseOrderLineItemInlineAdmin(admin.StackedInline): """Inline admin class for the PurchaseOrderLineItem model""" - model = PurchaseOrderLineItem + model = models.PurchaseOrderLineItem extra = 0 @@ -101,25 +97,32 @@ class SalesOrderAdmin(ImportExportModelAdmin): class PurchaseOrderResource(InvenTreeResource): """Class for managing import / export of PurchaseOrder data.""" - # Add number of line items - line_items = Field(attribute='line_count', widget=widgets.IntegerWidget(), readonly=True) - - # Is this order overdue? - overdue = Field(attribute='is_overdue', widget=widgets.BooleanWidget(), readonly=True) - class Meta: """Metaclass""" - model = PurchaseOrder + model = models.PurchaseOrder skip_unchanged = True clean_model_instances = True exclude = [ 'metadata', ] + # Add number of line items + line_items = Field(attribute='line_count', widget=widgets.IntegerWidget(), readonly=True) + + # Is this order overdue? + overdue = Field(attribute='is_overdue', widget=widgets.BooleanWidget(), readonly=True) + class PurchaseOrderLineItemResource(InvenTreeResource): """Class for managing import / export of PurchaseOrderLineItem data.""" + class Meta: + """Metaclass""" + model = models.PurchaseOrderLineItem + skip_unchanged = True + report_skipped = False + clean_model_instances = True + part_name = Field(attribute='part__part__name', readonly=True) manufacturer = Field(attribute='part__manufacturer', readonly=True) @@ -128,13 +131,6 @@ class PurchaseOrderLineItemResource(InvenTreeResource): SKU = Field(attribute='part__SKU', readonly=True) - class Meta: - """Metaclass""" - model = PurchaseOrderLineItem - skip_unchanged = True - report_skipped = False - clean_model_instances = True - class PurchaseOrderExtraLineResource(InvenTreeResource): """Class for managing import / export of PurchaseOrderExtraLine data.""" @@ -142,31 +138,38 @@ class PurchaseOrderExtraLineResource(InvenTreeResource): class Meta(GeneralExtraLineMeta): """Metaclass options.""" - model = PurchaseOrderExtraLine + model = models.PurchaseOrderExtraLine class SalesOrderResource(InvenTreeResource): """Class for managing import / export of SalesOrder data.""" + class Meta: + """Metaclass options""" + model = models.SalesOrder + skip_unchanged = True + clean_model_instances = True + exclude = [ + 'metadata', + ] + # Add number of line items line_items = Field(attribute='line_count', widget=widgets.IntegerWidget(), readonly=True) # Is this order overdue? overdue = Field(attribute='is_overdue', widget=widgets.BooleanWidget(), readonly=True) - class Meta: - """Metaclass options""" - model = SalesOrder - skip_unchanged = True - clean_model_instances = True - exclude = [ - 'metadata', - ] - class SalesOrderLineItemResource(InvenTreeResource): """Class for managing import / export of SalesOrderLineItem data.""" + class Meta: + """Metaclass options""" + model = models.SalesOrderLineItem + skip_unchanged = True + report_skipped = False + clean_model_instances = True + part_name = Field(attribute='part__name', readonly=True) IPN = Field(attribute='part__IPN', readonly=True) @@ -185,21 +188,13 @@ class SalesOrderLineItemResource(InvenTreeResource): else: return '' - class Meta: - """Metaclass options""" - model = SalesOrderLineItem - skip_unchanged = True - report_skipped = False - clean_model_instances = True - class SalesOrderExtraLineResource(InvenTreeResource): """Class for managing import / export of SalesOrderExtraLine data.""" class Meta(GeneralExtraLineMeta): """Metaclass options.""" - - model = SalesOrderExtraLine + model = models.SalesOrderExtraLine class PurchaseOrderLineItemAdmin(ImportExportModelAdmin): @@ -281,13 +276,92 @@ class SalesOrderAllocationAdmin(ImportExportModelAdmin): autocomplete_fields = ('line', 'shipment', 'item',) -admin.site.register(PurchaseOrder, PurchaseOrderAdmin) -admin.site.register(PurchaseOrderLineItem, PurchaseOrderLineItemAdmin) -admin.site.register(PurchaseOrderExtraLine, PurchaseOrderExtraLineAdmin) +class ReturnOrderResource(InvenTreeResource): + """Class for managing import / export of ReturnOrder data""" -admin.site.register(SalesOrder, SalesOrderAdmin) -admin.site.register(SalesOrderLineItem, SalesOrderLineItemAdmin) -admin.site.register(SalesOrderExtraLine, SalesOrderExtraLineAdmin) + class Meta: + """Metaclass options""" + model = models.ReturnOrder + skip_unchanged = True + clean_model_instances = True + exclude = [ + 'metadata', + ] -admin.site.register(SalesOrderShipment, SalesOrderShipmentAdmin) -admin.site.register(SalesOrderAllocation, SalesOrderAllocationAdmin) + +class ReturnOrderAdmin(ImportExportModelAdmin): + """Admin class for the ReturnOrder model""" + + exclude = [ + 'reference_int', + ] + + list_display = [ + 'reference', + 'customer', + 'status', + ] + + search_fields = [ + 'reference', + 'customer__name', + 'description', + ] + + autocomplete_fields = [ + 'customer', + ] + + +class ReturnOrderLineItemResource(InvenTreeResource): + """Class for managing import / export of ReturnOrderLineItem data""" + + class Meta: + """Metaclass options""" + model = models.ReturnOrderLineItem + skip_unchanged = True + report_skipped = False + clean_model_instances = True + + +class ReturnOrderLineItemAdmin(ImportExportModelAdmin): + """Admin class for ReturnOrderLine model""" + + resource_class = ReturnOrderLineItemResource + + list_display = [ + 'order', + 'item', + 'reference', + ] + + +class ReturnOrderExtraLineClass(InvenTreeResource): + """Class for managing import/export of ReturnOrderExtraLine data""" + + class Meta(GeneralExtraLineMeta): + """Metaclass options""" + model = models.ReturnOrderExtraLine + + +class ReturnOrdeerExtraLineAdmin(GeneralExtraLineAdmin, ImportExportModelAdmin): + """Admin class for the ReturnOrderExtraLine model""" + resource_class = ReturnOrderExtraLineClass + + +# Purchase Order models +admin.site.register(models.PurchaseOrder, PurchaseOrderAdmin) +admin.site.register(models.PurchaseOrderLineItem, PurchaseOrderLineItemAdmin) +admin.site.register(models.PurchaseOrderExtraLine, PurchaseOrderExtraLineAdmin) + +# Sales Order models +admin.site.register(models.SalesOrder, SalesOrderAdmin) +admin.site.register(models.SalesOrderLineItem, SalesOrderLineItemAdmin) +admin.site.register(models.SalesOrderExtraLine, SalesOrderExtraLineAdmin) +admin.site.register(models.SalesOrderShipment, SalesOrderShipmentAdmin) +admin.site.register(models.SalesOrderAllocation, SalesOrderAllocationAdmin) + +# Return Order models +admin.site.register(models.ReturnOrder, ReturnOrderAdmin) +admin.site.register(models.ReturnOrderLineItem, ReturnOrderLineItemAdmin) +admin.site.register(models.ReturnOrderExtraLine, ReturnOrdeerExtraLineAdmin) diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index f4c155e241..5769101799 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -10,7 +10,7 @@ from django.utils.translation import gettext_lazy as _ from django_filters import rest_framework as rest_filters from django_ical.views import ICalFeed -from rest_framework import filters, status +from rest_framework import status from rest_framework.exceptions import ValidationError from rest_framework.response import Response @@ -20,26 +20,28 @@ from common.models import InvenTreeSetting from common.settings import settings from company.models import SupplierPart from InvenTree.api import (APIDownloadMixin, AttachmentMixin, - ListCreateDestroyAPIView) -from InvenTree.filters import InvenTreeOrderingFilter + ListCreateDestroyAPIView, MetadataView, StatusView) +from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS from InvenTree.helpers import DownloadFile, str2bool from InvenTree.mixins import (CreateAPI, ListAPI, ListCreateAPI, - RetrieveUpdateAPI, RetrieveUpdateDestroyAPI) -from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus -from order.admin import (PurchaseOrderLineItemResource, PurchaseOrderResource, - SalesOrderResource) + RetrieveUpdateDestroyAPI) +from InvenTree.status_codes import (PurchaseOrderStatus, ReturnOrderLineStatus, + ReturnOrderStatus, SalesOrderStatus) +from order.admin import (PurchaseOrderExtraLineResource, + PurchaseOrderLineItemResource, PurchaseOrderResource, + ReturnOrderResource, SalesOrderExtraLineResource, + SalesOrderLineItemResource, SalesOrderResource) from part.models import Part -from plugin.serializers import MetadataSerializer from users.models import Owner -class GeneralExtraLineList: +class GeneralExtraLineList(APIDownloadMixin): """General template for ExtraLine API classes.""" def get_serializer(self, *args, **kwargs): """Return the serializer instance for this endpoint""" try: - params = self.request.query_params + params = self.request.query_params3 kwargs['order_detail'] = str2bool(params.get('order_detail', False)) except AttributeError: @@ -59,11 +61,7 @@ class GeneralExtraLineList: return queryset - filter_backends = [ - rest_filters.DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter - ] + filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'title', @@ -87,6 +85,14 @@ class GeneralExtraLineList: class OrderFilter(rest_filters.FilterSet): """Base class for custom API filters for the OrderList endpoint.""" + # Filter against order status + status = rest_filters.NumberFilter(label="Order Status", method='filter_status') + + def filter_status(self, queryset, name, value): + """Filter by integer status code""" + + return queryset.filter(status=value) + # Exact match for reference reference = rest_filters.CharFilter( label='Filter by exact reference', @@ -98,21 +104,60 @@ class OrderFilter(rest_filters.FilterSet): def filter_assigned_to_me(self, queryset, name, value): """Filter by orders which are assigned to the current user.""" - value = str2bool(value) # Work out who "me" is! owners = Owner.get_owners_matching_user(self.request.user) - if value: - queryset = queryset.filter(responsible__in=owners) + if str2bool(value): + return queryset.filter(responsible__in=owners) else: - queryset = queryset.exclude(responsible__in=owners) + return queryset.exclude(responsible__in=owners) - return queryset + overdue = rest_filters.BooleanFilter(label='overdue', method='filter_overdue') + + def filter_overdue(self, queryset, name, value): + """Generic filter for determining if an order is 'overdue'. + + Note that the overdue_filter() classmethod must be defined for the model + """ + + if str2bool(value): + return queryset.filter(self.Meta.model.overdue_filter()) + else: + return queryset.exclude(self.Meta.model.overdue_filter()) + + outstanding = rest_filters.BooleanFilter(label='outstanding', method='filter_outstanding') + + def filter_outstanding(self, queryset, name, value): + """Generic filter for determining if an order is 'outstanding'""" + + if str2bool(value): + return queryset.filter(status__in=self.Meta.model.get_status_class().OPEN) + else: + return queryset.exclude(status__in=self.Meta.model.get_status_class().OPEN) + + +class LineItemFilter(rest_filters.FilterSet): + """Base class for custom API filters for order line item list(s)""" + + # Filter by order status + order_status = rest_filters.NumberFilter(label='order_status', field_name='order__status') + + has_pricing = rest_filters.BooleanFilter(label="Has Pricing", method='filter_has_pricing') + + def filter_has_pricing(self, queryset, name, value): + """Filter by whether or not the line item has pricing information""" + filters = {self.Meta.price_field: None} + + if str2bool(value): + return queryset.exclude(**filters) + else: + return queryset.filter(**filters) class PurchaseOrderFilter(OrderFilter): """Custom API filters for the PurchaseOrderList endpoint.""" + class Meta: """Metaclass options.""" @@ -122,26 +167,45 @@ class PurchaseOrderFilter(OrderFilter): ] -class SalesOrderFilter(OrderFilter): - """Custom API filters for the SalesOrderList endpoint.""" - class Meta: - """Metaclass options.""" +class PurchaseOrderMixin: + """Mixin class for PurchaseOrder endpoints""" - model = models.SalesOrder - fields = [ - 'customer', - ] + queryset = models.PurchaseOrder.objects.all() + serializer_class = serializers.PurchaseOrderSerializer + + def get_serializer(self, *args, **kwargs): + """Return the serializer instance for this endpoint""" + try: + kwargs['supplier_detail'] = str2bool(self.request.query_params.get('supplier_detail', False)) + except AttributeError: + pass + + # Ensure the request context is passed through + kwargs['context'] = self.get_serializer_context() + + return self.serializer_class(*args, **kwargs) + + def get_queryset(self, *args, **kwargs): + """Return the annotated queryset for this endpoint""" + queryset = super().get_queryset(*args, **kwargs) + + queryset = queryset.prefetch_related( + 'supplier', + 'lines', + ) + + queryset = serializers.PurchaseOrderSerializer.annotate_queryset(queryset) + + return queryset -class PurchaseOrderList(APIDownloadMixin, ListCreateAPI): +class PurchaseOrderList(PurchaseOrderMixin, APIDownloadMixin, ListCreateAPI): """API endpoint for accessing a list of PurchaseOrder objects. - GET: Return list of PurchaseOrder objects (with filters) - POST: Create a new PurchaseOrder object """ - queryset = models.PurchaseOrder.objects.all() - serializer_class = serializers.PurchaseOrderSerializer filterset_class = PurchaseOrderFilter def create(self, request, *args, **kwargs): @@ -192,31 +256,6 @@ class PurchaseOrderList(APIDownloadMixin, ListCreateAPI): headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - def get_serializer(self, *args, **kwargs): - """Return the serializer instance for this endpoint""" - try: - kwargs['supplier_detail'] = str2bool(self.request.query_params.get('supplier_detail', False)) - except AttributeError: - pass - - # Ensure the request context is passed through - kwargs['context'] = self.get_serializer_context() - - return self.serializer_class(*args, **kwargs) - - def get_queryset(self, *args, **kwargs): - """Return the annotated queryset for this endpoint""" - queryset = super().get_queryset(*args, **kwargs) - - queryset = queryset.prefetch_related( - 'supplier', - 'lines', - ) - - queryset = serializers.PurchaseOrderSerializer.annotate_queryset(queryset) - - return queryset - def download_queryset(self, queryset, export_format): """Download the filtered queryset as a file""" @@ -235,35 +274,6 @@ class PurchaseOrderList(APIDownloadMixin, ListCreateAPI): params = self.request.query_params - # Filter by 'outstanding' status - outstanding = params.get('outstanding', None) - - if outstanding is not None: - outstanding = str2bool(outstanding) - - if outstanding: - queryset = queryset.filter(status__in=PurchaseOrderStatus.OPEN) - else: - queryset = queryset.exclude(status__in=PurchaseOrderStatus.OPEN) - - # Filter by 'overdue' status - overdue = params.get('overdue', None) - - if overdue is not None: - overdue = str2bool(overdue) - - if overdue: - queryset = queryset.filter(models.PurchaseOrder.OVERDUE_FILTER) - else: - queryset = queryset.exclude(models.PurchaseOrder.OVERDUE_FILTER) - - # Special filtering for 'status' field - status = params.get('status', None) - - if status is not None: - # First attempt to filter by integer value - queryset = queryset.filter(status=status) - # Attempt to filter by part part = params.get('part', None) @@ -293,11 +303,7 @@ class PurchaseOrderList(APIDownloadMixin, ListCreateAPI): return queryset - filter_backends = [ - rest_filters.DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { 'reference': ['reference_int', 'reference'], @@ -317,46 +323,23 @@ class PurchaseOrderList(APIDownloadMixin, ListCreateAPI): 'target_date', 'line_items', 'status', + 'responsible', + 'total_price', ] ordering = '-reference' -class PurchaseOrderDetail(RetrieveUpdateDestroyAPI): +class PurchaseOrderDetail(PurchaseOrderMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a PurchaseOrder object.""" - - queryset = models.PurchaseOrder.objects.all() - serializer_class = serializers.PurchaseOrderSerializer - - def get_serializer(self, *args, **kwargs): - """Return serializer instance for this endpoint""" - try: - kwargs['supplier_detail'] = str2bool(self.request.query_params.get('supplier_detail', False)) - except AttributeError: - pass - - # Ensure the request context is passed through - kwargs['context'] = self.get_serializer_context() - - return self.serializer_class(*args, **kwargs) - - def get_queryset(self, *args, **kwargs): - """Return annotated queryset for this endpoint""" - queryset = super().get_queryset(*args, **kwargs) - - queryset = queryset.prefetch_related( - 'supplier', - 'lines', - ) - - queryset = serializers.PurchaseOrderSerializer.annotate_queryset(queryset) - - return queryset + pass class PurchaseOrderContextMixin: """Mixin to add purchase order object as serializer context variable.""" + queryset = models.PurchaseOrder.objects.all() + def get_serializer_context(self): """Add the PurchaseOrder object to the serializer context.""" context = super().get_serializer_context() @@ -378,39 +361,23 @@ class PurchaseOrderCancel(PurchaseOrderContextMixin, CreateAPI): The purchase order must be in a state which can be cancelled """ - queryset = models.PurchaseOrder.objects.all() - serializer_class = serializers.PurchaseOrderCancelSerializer class PurchaseOrderComplete(PurchaseOrderContextMixin, CreateAPI): """API endpoint to 'complete' a purchase order.""" - queryset = models.PurchaseOrder.objects.all() - serializer_class = serializers.PurchaseOrderCompleteSerializer class PurchaseOrderIssue(PurchaseOrderContextMixin, CreateAPI): - """API endpoint to 'issue' (send) a purchase order.""" - - queryset = models.PurchaseOrder.objects.all() + """API endpoint to 'issue' (place) a PurchaseOrder.""" serializer_class = serializers.PurchaseOrderIssueSerializer -class PurchaseOrderMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating PurchaseOrder metadata.""" - - def get_serializer(self, *args, **kwargs): - """Return MetadataSerializer instance for a PurchaseOrder""" - return MetadataSerializer(models.PurchaseOrder, *args, **kwargs) - - queryset = models.PurchaseOrder.objects.all() - - class PurchaseOrderReceive(PurchaseOrderContextMixin, CreateAPI): - """API endpoint to receive stock items against a purchase order. + """API endpoint to receive stock items against a PurchaseOrder. - The purchase order is specified in the URL. - Items to receive are specified as a list called "items" with the following options: @@ -429,12 +396,12 @@ class PurchaseOrderReceive(PurchaseOrderContextMixin, CreateAPI): serializer_class = serializers.PurchaseOrderReceiveSerializer -class PurchaseOrderLineItemFilter(rest_filters.FilterSet): +class PurchaseOrderLineItemFilter(LineItemFilter): """Custom filters for the PurchaseOrderLineItemList endpoint.""" class Meta: """Metaclass options.""" - + price_field = 'purchase_price' model = models.PurchaseOrderLineItem fields = [ 'order', @@ -445,16 +412,11 @@ class PurchaseOrderLineItemFilter(rest_filters.FilterSet): def filter_pending(self, queryset, name, value): """Filter by "pending" status (order status = pending)""" - value = str2bool(value) - if value: - queryset = queryset.filter(order__status__in=PurchaseOrderStatus.OPEN) + if str2bool(value): + return queryset.filter(order__status__in=PurchaseOrderStatus.OPEN) else: - queryset = queryset.exclude(order__status__in=PurchaseOrderStatus.OPEN) - - return queryset - - order_status = rest_filters.NumberFilter(label='order_status', field_name='order__status') + return queryset.exclude(order__status__in=PurchaseOrderStatus.OPEN) received = rest_filters.BooleanFilter(label='received', method='filter_received') @@ -463,42 +425,20 @@ class PurchaseOrderLineItemFilter(rest_filters.FilterSet): A line is considered "received" when received >= quantity """ - value = str2bool(value) - q = Q(received__gte=F('quantity')) - if value: - queryset = queryset.filter(q) + if str2bool(value): + return queryset.filter(q) else: # Only count "pending" orders - queryset = queryset.exclude(q).filter(order__status__in=PurchaseOrderStatus.OPEN) - - return queryset - - has_pricing = rest_filters.BooleanFilter(label="Has Pricing", method='filter_has_pricing') - - def filter_has_pricing(self, queryset, name, value): - """Filter by whether or not the line item has pricing information""" - value = str2bool(value) - - if value: - queryset = queryset.exclude(purchase_price=None) - else: - queryset = queryset.filter(purchase_price=None) - - return queryset + return queryset.exclude(q).filter(order__status__in=PurchaseOrderStatus.OPEN) -class PurchaseOrderLineItemList(APIDownloadMixin, ListCreateAPI): - """API endpoint for accessing a list of PurchaseOrderLineItem objects. - - - GET: Return a list of PurchaseOrder Line Item objects - - POST: Create a new PurchaseOrderLineItem object - """ +class PurchaseOrderLineItemMixin: + """Mixin class for PurchaseOrderLineItem endpoints""" queryset = models.PurchaseOrderLineItem.objects.all() serializer_class = serializers.PurchaseOrderLineItemSerializer - filterset_class = PurchaseOrderLineItemFilter def get_queryset(self, *args, **kwargs): """Return annotated queryset for this endpoint""" @@ -520,6 +460,16 @@ class PurchaseOrderLineItemList(APIDownloadMixin, ListCreateAPI): return self.serializer_class(*args, **kwargs) + +class PurchaseOrderLineItemList(PurchaseOrderLineItemMixin, APIDownloadMixin, ListCreateDestroyAPIView): + """API endpoint for accessing a list of PurchaseOrderLineItem objects. + + - GET: Return a list of PurchaseOrder Line Item objects + - POST: Create a new PurchaseOrderLineItem object + """ + + filterset_class = PurchaseOrderLineItemFilter + def filter_queryset(self, queryset): """Additional filtering options.""" params = self.request.query_params @@ -550,11 +500,7 @@ class PurchaseOrderLineItemList(APIDownloadMixin, ListCreateAPI): return DownloadFile(filedata, filename) - filter_backends = [ - rest_filters.DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { 'MPN': 'part__manufacturer_part__MPN', @@ -583,19 +529,9 @@ class PurchaseOrderLineItemList(APIDownloadMixin, ListCreateAPI): ] -class PurchaseOrderLineItemDetail(RetrieveUpdateDestroyAPI): +class PurchaseOrderLineItemDetail(PurchaseOrderLineItemMixin, RetrieveUpdateDestroyAPI): """Detail API endpoint for PurchaseOrderLineItem object.""" - - queryset = models.PurchaseOrderLineItem.objects.all() - serializer_class = serializers.PurchaseOrderLineItemSerializer - - def get_queryset(self): - """Return annotated queryset for this endpoint""" - queryset = super().get_queryset() - - queryset = serializers.PurchaseOrderLineItemSerializer.annotate_queryset(queryset) - - return queryset + pass class PurchaseOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): @@ -604,6 +540,15 @@ class PurchaseOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): queryset = models.PurchaseOrderExtraLine.objects.all() serializer_class = serializers.PurchaseOrderExtraLineSerializer + def download_queryset(self, queryset, export_format): + """Download this queryset as a file""" + + dataset = PurchaseOrderExtraLineResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f"InvenTree_ExtraPurchaseOrderLines.{export_format}" + + return DownloadFile(filedata, filename) + class PurchaseOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a PurchaseOrderExtraLine object.""" @@ -634,28 +579,23 @@ class SalesOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): serializer_class = serializers.SalesOrderAttachmentSerializer -class SalesOrderList(APIDownloadMixin, ListCreateAPI): - """API endpoint for accessing a list of SalesOrder objects. +class SalesOrderFilter(OrderFilter): + """Custom API filters for the SalesOrderList endpoint.""" - - GET: Return list of SalesOrder objects (with filters) - - POST: Create a new SalesOrder - """ + class Meta: + """Metaclass options.""" + + model = models.SalesOrder + fields = [ + 'customer', + ] + + +class SalesOrderMixin: + """Mixin class for SalesOrder endpoints""" queryset = models.SalesOrder.objects.all() serializer_class = serializers.SalesOrderSerializer - filterset_class = SalesOrderFilter - - def create(self, request, *args, **kwargs): - """Save user information on create.""" - serializer = self.get_serializer(data=self.clean_data(request.data)) - serializer.is_valid(raise_exception=True) - - item = serializer.save() - item.created_by = request.user - item.save() - - headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) def get_serializer(self, *args, **kwargs): """Return serializer instance for this endpoint""" @@ -682,8 +622,31 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI): return queryset + +class SalesOrderList(SalesOrderMixin, APIDownloadMixin, ListCreateAPI): + """API endpoint for accessing a list of SalesOrder objects. + + - GET: Return list of SalesOrder objects (with filters) + - POST: Create a new SalesOrder + """ + + filterset_class = SalesOrderFilter + + def create(self, request, *args, **kwargs): + """Save user information on create.""" + serializer = self.get_serializer(data=self.clean_data(request.data)) + serializer.is_valid(raise_exception=True) + + item = serializer.save() + item.created_by = request.user + item.save() + + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + def download_queryset(self, queryset, export_format): """Download this queryset as a file""" + dataset = SalesOrderResource().export(queryset=queryset) filedata = dataset.export(export_format) @@ -698,33 +661,6 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI): params = self.request.query_params - # Filter by 'outstanding' status - outstanding = params.get('outstanding', None) - - if outstanding is not None: - outstanding = str2bool(outstanding) - - if outstanding: - queryset = queryset.filter(status__in=SalesOrderStatus.OPEN) - else: - queryset = queryset.exclude(status__in=SalesOrderStatus.OPEN) - - # Filter by 'overdue' status - overdue = params.get('overdue', None) - - if overdue is not None: - overdue = str2bool(overdue) - - if overdue: - queryset = queryset.filter(models.SalesOrder.OVERDUE_FILTER) - else: - queryset = queryset.exclude(models.SalesOrder.OVERDUE_FILTER) - - status = params.get('status', None) - - if status is not None: - queryset = queryset.filter(status=status) - # Filter by "Part" # Only return SalesOrder which have LineItem referencing the part part = params.get('part', None) @@ -745,11 +681,7 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI): return queryset - filter_backends = [ - rest_filters.DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { 'reference': ['reference_int', 'reference'], @@ -768,6 +700,7 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI): 'target_date', 'line_items', 'shipment_date', + 'total_price', ] search_fields = [ @@ -780,62 +713,23 @@ class SalesOrderList(APIDownloadMixin, ListCreateAPI): ordering = '-reference' -class SalesOrderDetail(RetrieveUpdateDestroyAPI): +class SalesOrderDetail(SalesOrderMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a SalesOrder object.""" - - queryset = models.SalesOrder.objects.all() - serializer_class = serializers.SalesOrderSerializer - - def get_serializer(self, *args, **kwargs): - """Return the serializer instance for this endpoint""" - try: - kwargs['customer_detail'] = str2bool(self.request.query_params.get('customer_detail', False)) - except AttributeError: - pass - - kwargs['context'] = self.get_serializer_context() - - return self.serializer_class(*args, **kwargs) - - def get_queryset(self, *args, **kwargs): - """Return the annotated queryset for this serializer""" - queryset = super().get_queryset(*args, **kwargs) - - queryset = queryset.prefetch_related('customer', 'lines') - - queryset = serializers.SalesOrderSerializer.annotate_queryset(queryset) - - return queryset + pass -class SalesOrderLineItemFilter(rest_filters.FilterSet): +class SalesOrderLineItemFilter(LineItemFilter): """Custom filters for SalesOrderLineItemList endpoint.""" class Meta: """Metaclass options.""" - + price_field = 'sale_price' model = models.SalesOrderLineItem fields = [ 'order', 'part', ] - has_pricing = rest_filters.BooleanFilter(label="Has Pricing", method='filter_has_pricing') - - def filter_has_pricing(self, queryset, name, value): - """Filter by whether or not the line item has pricing information""" - - value = str2bool(value) - - if value: - queryset = queryset.exclude(sale_price=None) - else: - queryset = queryset.filter(sale_price=None) - - return queryset - - order_status = rest_filters.NumberFilter(label='Order Status', field_name='order__status') - completed = rest_filters.BooleanFilter(label='completed', method='filter_completed') def filter_completed(self, queryset, name, value): @@ -843,24 +737,19 @@ class SalesOrderLineItemFilter(rest_filters.FilterSet): A line is completed when shipped >= quantity """ - value = str2bool(value) - q = Q(shipped__gte=F('quantity')) - if value: - queryset = queryset.filter(q) + if str2bool(value): + return queryset.filter(q) else: - queryset = queryset.exclude(q) - - return queryset + return queryset.exclude(q) -class SalesOrderLineItemList(ListCreateAPI): - """API endpoint for accessing a list of SalesOrderLineItem objects.""" +class SalesOrderLineItemMixin: + """Mixin class for SalesOrderLineItem endpoints""" queryset = models.SalesOrderLineItem.objects.all() serializer_class = serializers.SalesOrderLineItemSerializer - filterset_class = SalesOrderLineItemFilter def get_serializer(self, *args, **kwargs): """Return serializer for this endpoint with extra data as requested""" @@ -896,11 +785,23 @@ class SalesOrderLineItemList(ListCreateAPI): return queryset - filter_backends = [ - rest_filters.DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter - ] + +class SalesOrderLineItemList(SalesOrderLineItemMixin, APIDownloadMixin, ListCreateAPI): + """API endpoint for accessing a list of SalesOrderLineItem objects.""" + + filterset_class = SalesOrderLineItemFilter + + def download_queryset(self, queryset, export_format): + """Download the requested queryset as a file""" + + dataset = SalesOrderLineItemResource().export(queryset=queryset) + filedata = dataset.export(export_format) + + filename = f"InvenTree_SalesOrderItems.{export_format}" + + return DownloadFile(filedata, filename) + + filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'part__name', @@ -916,12 +817,26 @@ class SalesOrderLineItemList(ListCreateAPI): ] +class SalesOrderLineItemDetail(SalesOrderLineItemMixin, RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a SalesOrderLineItem object.""" + pass + + class SalesOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): """API endpoint for accessing a list of SalesOrderExtraLine objects.""" queryset = models.SalesOrderExtraLine.objects.all() serializer_class = serializers.SalesOrderExtraLineSerializer + def download_queryset(self, queryset, export_format): + """Download this queryset as a file""" + + dataset = SalesOrderExtraLineResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f"InvenTree_ExtraSalesOrderLines.{export_format}" + + return DownloadFile(filedata, filename) + class SalesOrderExtraLineDetail(RetrieveUpdateDestroyAPI): """API endpoint for detail view of a SalesOrderExtraLine object.""" @@ -930,24 +845,11 @@ class SalesOrderExtraLineDetail(RetrieveUpdateDestroyAPI): serializer_class = serializers.SalesOrderExtraLineSerializer -class SalesOrderLineItemDetail(RetrieveUpdateDestroyAPI): - """API endpoint for detail view of a SalesOrderLineItem object.""" - - queryset = models.SalesOrderLineItem.objects.all() - serializer_class = serializers.SalesOrderLineItemSerializer - - def get_queryset(self, *args, **kwargs): - """Return annotated queryset for this endpoint""" - queryset = super().get_queryset(*args, **kwargs) - - queryset = serializers.SalesOrderLineItemSerializer.annotate_queryset(queryset) - - return queryset - - class SalesOrderContextMixin: """Mixin to add sales order object as serializer context variable.""" + queryset = models.SalesOrder.objects.all() + def get_serializer_context(self): """Add the 'order' reference to the serializer context for any classes which inherit this mixin""" ctx = super().get_serializer_context() @@ -964,28 +866,20 @@ class SalesOrderContextMixin: class SalesOrderCancel(SalesOrderContextMixin, CreateAPI): """API endpoint to cancel a SalesOrder""" - - queryset = models.SalesOrder.objects.all() serializer_class = serializers.SalesOrderCancelSerializer +class SalesOrderIssue(SalesOrderContextMixin, CreateAPI): + """API endpoint to issue a SalesOrder""" + serializer_class = serializers.SalesOrderIssueSerializer + + class SalesOrderComplete(SalesOrderContextMixin, CreateAPI): """API endpoint for manually marking a SalesOrder as "complete".""" - queryset = models.SalesOrder.objects.all() serializer_class = serializers.SalesOrderCompleteSerializer -class SalesOrderMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating SalesOrder metadata.""" - - def get_serializer(self, *args, **kwargs): - """Return a metadata serializer for the SalesOrder model""" - return MetadataSerializer(models.SalesOrder, *args, **kwargs) - - queryset = models.SalesOrder.objects.all() - - class SalesOrderAllocateSerials(SalesOrderContextMixin, CreateAPI): """API endpoint to allocation stock items against a SalesOrder, by specifying serial numbers.""" @@ -1085,27 +979,10 @@ class SalesOrderAllocationList(ListAPI): rest_filters.DjangoFilterBackend, ] - # Default filterable fields - filterset_fields = [ - ] - class SalesOrderShipmentFilter(rest_filters.FilterSet): """Custom filterset for the SalesOrderShipmentList endpoint.""" - shipped = rest_filters.BooleanFilter(label='shipped', method='filter_shipped') - - def filter_shipped(self, queryset, name, value): - """Filter SalesOrder list by 'shipped' status (boolean)""" - value = str2bool(value) - - if value: - queryset = queryset.exclude(shipment_date=None) - else: - queryset = queryset.filter(shipment_date=None) - - return queryset - class Meta: """Metaclass options.""" @@ -1114,6 +991,15 @@ class SalesOrderShipmentFilter(rest_filters.FilterSet): 'order', ] + shipped = rest_filters.BooleanFilter(label='shipped', method='filter_shipped') + + def filter_shipped(self, queryset, name, value): + """Filter SalesOrder list by 'shipped' status (boolean)""" + if str2bool(value): + return queryset.exclude(shipment_date=None) + else: + return queryset.filter(shipment_date=None) + class SalesOrderShipmentList(ListCreateAPI): """API list endpoint for SalesOrderShipment model.""" @@ -1177,6 +1063,283 @@ class PurchaseOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): serializer_class = serializers.PurchaseOrderAttachmentSerializer +class ReturnOrderFilter(OrderFilter): + """Custom API filters for the ReturnOrderList endpoint""" + + class Meta: + """Metaclass options""" + + model = models.ReturnOrder + fields = [ + 'customer', + ] + + +class ReturnOrderMixin: + """Mixin class for ReturnOrder endpoints""" + + queryset = models.ReturnOrder.objects.all() + serializer_class = serializers.ReturnOrderSerializer + + def get_serializer(self, *args, **kwargs): + """Return serializer instance for this endpoint""" + try: + kwargs['customer_detail'] = str2bool( + self.request.query_params.get('customer_detail', False) + ) + except AttributeError: + pass + + # Ensure the context is passed through to the serializer + kwargs['context'] = self.get_serializer_context() + + return self.serializer_class(*args, **kwargs) + + def get_queryset(self, *args, **kwargs): + """Return annotated queryset for this endpoint""" + queryset = super().get_queryset(*args, **kwargs) + + queryset = queryset.prefetch_related( + 'customer', + ) + + queryset = serializers.ReturnOrderSerializer.annotate_queryset(queryset) + + return queryset + + +class ReturnOrderList(ReturnOrderMixin, APIDownloadMixin, ListCreateAPI): + """API endpoint for accessing a list of ReturnOrder objects""" + + filterset_class = ReturnOrderFilter + + def create(self, request, *args, **kwargs): + """Save user information on create.""" + serializer = self.get_serializer(data=self.clean_data(request.data)) + serializer.is_valid(raise_exception=True) + + item = serializer.save() + item.created_by = request.user + item.save() + + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + + def download_queryset(self, queryset, export_format): + """Download this queryset as a file""" + + dataset = ReturnOrderResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f"InvenTree_ReturnOrders.{export_format}" + + return DownloadFile(filedata, filename) + + filter_backends = SEARCH_ORDER_FILTER_ALIAS + + ordering_field_aliases = { + 'reference': ['reference_int', 'reference'], + } + + ordering_fields = [ + 'creation_date', + 'reference', + 'customer__name', + 'customer_reference', + 'line_items', + 'status', + 'target_date', + ] + + search_fields = [ + 'customer__name', + 'reference', + 'description', + 'customer_reference', + ] + + ordering = '-reference' + + +class ReturnOrderDetail(ReturnOrderMixin, RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a single ReturnOrder object""" + pass + + +class ReturnOrderContextMixin: + """Simple mixin class to add a ReturnOrder to the serializer context""" + + queryset = models.ReturnOrder.objects.all() + + def get_serializer_context(self): + """Add the PurchaseOrder object to the serializer context.""" + context = super().get_serializer_context() + + # Pass the ReturnOrder instance through to the serializer for validation + try: + context['order'] = models.ReturnOrder.objects.get(pk=self.kwargs.get('pk', None)) + except Exception: + pass + + context['request'] = self.request + + return context + + +class ReturnOrderCancel(ReturnOrderContextMixin, CreateAPI): + """API endpoint to cancel a ReturnOrder""" + serializer_class = serializers.ReturnOrderCancelSerializer + + +class ReturnOrderComplete(ReturnOrderContextMixin, CreateAPI): + """API endpoint to complete a ReturnOrder""" + serializer_class = serializers.ReturnOrderCompleteSerializer + + +class ReturnOrderIssue(ReturnOrderContextMixin, CreateAPI): + """API endpoint to issue (place) a ReturnOrder""" + serializer_class = serializers.ReturnOrderIssueSerializer + + +class ReturnOrderReceive(ReturnOrderContextMixin, CreateAPI): + """API endpoint to receive items against a ReturnOrder""" + + queryset = models.ReturnOrder.objects.none() + serializer_class = serializers.ReturnOrderReceiveSerializer + + +class ReturnOrderLineItemFilter(LineItemFilter): + """Custom filters for the ReturnOrderLineItemList endpoint""" + + class Meta: + """Metaclass options""" + price_field = 'price' + model = models.ReturnOrderLineItem + fields = [ + 'order', + 'item', + ] + + outcome = rest_filters.NumberFilter(label='outcome') + + received = rest_filters.BooleanFilter(label='received', method='filter_received') + + def filter_received(self, queryset, name, value): + """Filter by 'received' field""" + + if str2bool(value): + return queryset.exclude(received_date=None) + else: + return queryset.filter(received_date=None) + + +class ReturnOrderLineItemMixin: + """Mixin class for ReturnOrderLineItem endpoints""" + + queryset = models.ReturnOrderLineItem.objects.all() + serializer_class = serializers.ReturnOrderLineItemSerializer + + def get_serializer(self, *args, **kwargs): + """Return serializer for this endpoint with extra data as requested""" + + try: + params = self.request.query_params + + kwargs['order_detail'] = str2bool(params.get('order_detail', False)) + kwargs['item_detail'] = str2bool(params.get('item_detail', True)) + kwargs['part_detail'] = str2bool(params.get('part_detail', False)) + except AttributeError: + pass + + kwargs['context'] = self.get_serializer_context() + + return self.serializer_class(*args, **kwargs) + + def get_queryset(self, *args, **kwargs): + """Return annotated queryset for this endpoint""" + + queryset = super().get_queryset(*args, **kwargs) + + queryset = queryset.prefetch_related( + 'order', + 'item', + 'item__part', + ) + + return queryset + + +class ReturnOrderLineItemList(ReturnOrderLineItemMixin, APIDownloadMixin, ListCreateAPI): + """API endpoint for accessing a list of ReturnOrderLineItemList objects""" + + filterset_class = ReturnOrderLineItemFilter + + def download_queryset(self, queryset, export_format): + """Download the requested queryset as a file""" + + raise NotImplementedError("download_queryset not yet implemented for this endpoint") + + filter_backends = SEARCH_ORDER_FILTER + + ordering_fields = [ + 'reference', + 'target_date', + 'received_date', + ] + + search_fields = [ + 'item_serial', + 'item__part__name', + 'item__part__description', + 'reference', + ] + + +class ReturnOrderLineItemDetail(ReturnOrderLineItemMixin, RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a ReturnOrderLineItem object""" + pass + + +class ReturnOrderExtraLineList(GeneralExtraLineList, ListCreateAPI): + """API endpoint for accessing a list of ReturnOrderExtraLine objects""" + + queryset = models.ReturnOrderExtraLine.objects.all() + serializer_class = serializers.ReturnOrderExtraLineSerializer + + def download_queryset(self, queryset, export_format): + """Download this queryset as a file""" + + raise NotImplementedError("download_queryset not yet implemented") + + +class ReturnOrderExtraLineDetail(RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a ReturnOrderExtraLine object""" + + queryset = models.ReturnOrderExtraLine.objects.all() + serializer_class = serializers.ReturnOrderExtraLineSerializer + + +class ReturnOrderAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): + """API endpoint for listing (and creating) a ReturnOrderAttachment (file upload)""" + + queryset = models.ReturnOrderAttachment.objects.all() + serializer_class = serializers.ReturnOrderAttachmentSerializer + + filter_backends = [ + rest_filters.DjangoFilterBackend, + ] + + filterset_fields = [ + 'order', + ] + + +class ReturnOrderAttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): + """Detail endpoint for the ReturnOrderAttachment model""" + + queryset = models.ReturnOrderAttachment.objects.all() + serializer_class = serializers.ReturnOrderAttachmentSerializer + + class OrderCalendarExport(ICalFeed): """Calendar export for Purchase/Sales Orders @@ -1338,30 +1501,39 @@ order_api_urls = [ ])), # Individual purchase order detail URLs - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^cancel/', PurchaseOrderCancel.as_view(), name='api-po-cancel'), re_path(r'^complete/', PurchaseOrderComplete.as_view(), name='api-po-complete'), re_path(r'^issue/', PurchaseOrderIssue.as_view(), name='api-po-issue'), - re_path(r'^metadata/', PurchaseOrderMetadata.as_view(), name='api-po-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.PurchaseOrder}, name='api-po-metadata'), re_path(r'^receive/', PurchaseOrderReceive.as_view(), name='api-po-receive'), # PurchaseOrder detail API endpoint re_path(r'.*$', PurchaseOrderDetail.as_view(), name='api-po-detail'), ])), + # Purchase order status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: PurchaseOrderStatus}, name='api-po-status-codes'), + # Purchase order list re_path(r'^.*$', PurchaseOrderList.as_view(), name='api-po-list'), ])), # API endpoints for purchase order line items re_path(r'^po-line/', include([ - path('/', PurchaseOrderLineItemDetail.as_view(), name='api-po-line-detail'), + path('/', include([ + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.PurchaseOrderLineItem}, name='api-po-line-metadata'), + re_path(r'^.*$', PurchaseOrderLineItemDetail.as_view(), name='api-po-line-detail'), + ])), re_path(r'^.*$', PurchaseOrderLineItemList.as_view(), name='api-po-line-list'), ])), # API endpoints for purchase order extra line re_path(r'^po-extra-line/', include([ - path('/', PurchaseOrderExtraLineDetail.as_view(), name='api-po-extra-line-detail'), + path('/', include([ + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.PurchaseOrderExtraLine}, name='api-po-extra-line-metadata'), + re_path(r'^.*$', PurchaseOrderExtraLineDetail.as_view(), name='api-po-extra-line-detail'), + ])), path('', PurchaseOrderExtraLineList.as_view(), name='api-po-extra-line-list'), ])), @@ -1373,38 +1545,49 @@ order_api_urls = [ ])), re_path(r'^shipment/', include([ - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ path('ship/', SalesOrderShipmentComplete.as_view(), name='api-so-shipment-ship'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrderShipment}, name='api-so-shipment-metadata'), re_path(r'^.*$', SalesOrderShipmentDetail.as_view(), name='api-so-shipment-detail'), ])), re_path(r'^.*$', SalesOrderShipmentList.as_view(), name='api-so-shipment-list'), ])), # Sales order detail view - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^allocate/', SalesOrderAllocate.as_view(), name='api-so-allocate'), re_path(r'^allocate-serials/', SalesOrderAllocateSerials.as_view(), name='api-so-allocate-serials'), re_path(r'^cancel/', SalesOrderCancel.as_view(), name='api-so-cancel'), + re_path(r'^issue/', SalesOrderIssue.as_view(), name='api-so-issue'), re_path(r'^complete/', SalesOrderComplete.as_view(), name='api-so-complete'), - re_path(r'^metadata/', SalesOrderMetadata.as_view(), name='api-so-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrder}, name='api-so-metadata'), # SalesOrder detail endpoint re_path(r'^.*$', SalesOrderDetail.as_view(), name='api-so-detail'), ])), + # Sales order status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: SalesOrderStatus}, name='api-so-status-codes'), + # Sales order list view re_path(r'^.*$', SalesOrderList.as_view(), name='api-so-list'), ])), # API endpoints for sales order line items re_path(r'^so-line/', include([ - path('/', SalesOrderLineItemDetail.as_view(), name='api-so-line-detail'), + path('/', include([ + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrderLineItem}, name='api-so-line-metadata'), + re_path(r'^.*$', SalesOrderLineItemDetail.as_view(), name='api-so-line-detail'), + ])), path('', SalesOrderLineItemList.as_view(), name='api-so-line-list'), ])), # API endpoints for sales order extra line re_path(r'^so-extra-line/', include([ - path('/', SalesOrderExtraLineDetail.as_view(), name='api-so-extra-line-detail'), + path('/', include([ + re_path(r'^metadata/', MetadataView.as_view(), {'model': models.SalesOrderExtraLine}, name='api-so-extra-line-metadata'), + re_path(r'^.*$', SalesOrderExtraLineDetail.as_view(), name='api-so-extra-line-detail'), + ])), path('', SalesOrderExtraLineList.as_view(), name='api-so-extra-line-list'), ])), @@ -1414,6 +1597,46 @@ order_api_urls = [ re_path(r'^.*$', SalesOrderAllocationList.as_view(), name='api-so-allocation-list'), ])), + # API endpoints for return orders + re_path(r'^ro/', include([ + + re_path(r'^attachment/', include([ + path('/', ReturnOrderAttachmentDetail.as_view(), name='api-return-order-attachment-detail'), + re_path(r'^.*$', ReturnOrderAttachmentList.as_view(), name='api-return-order-attachment-list'), + ])), + + # Return Order detail endpoints + path('/', include([ + re_path(r'cancel/', ReturnOrderCancel.as_view(), name='api-return-order-cancel'), + re_path(r'complete/', ReturnOrderComplete.as_view(), name='api-return-order-complete'), + re_path(r'issue/', ReturnOrderIssue.as_view(), name='api-return-order-issue'), + re_path(r'receive/', ReturnOrderReceive.as_view(), name='api-return-order-receive'), + re_path(r'.*$', ReturnOrderDetail.as_view(), name='api-return-order-detail'), + ])), + + # Return order status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: ReturnOrderStatus}, name='api-return-order-status-codes'), + + # Return Order list + re_path(r'^.*$', ReturnOrderList.as_view(), name='api-return-order-list'), + ])), + + # API endpoints for reutrn order lines + re_path(r'^ro-line/', include([ + path('/', ReturnOrderLineItemDetail.as_view(), name='api-return-order-line-detail'), + + # Return order line item status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: ReturnOrderLineStatus}, name='api-return-order-line-status-codes'), + + path('', ReturnOrderLineItemList.as_view(), name='api-return-order-line-list'), + ])), + + # API endpoints for return order extra line + re_path(r'^ro-extra-line/', include([ + path('/', ReturnOrderExtraLineDetail.as_view(), name='api-return-order-extra-line-detail'), + path('', ReturnOrderExtraLineList.as_view(), name='api-return-order-extra-line-list'), + ])), + # API endpoint for subscribing to ICS calendar of purchase/sales orders re_path(r'^calendar/(?Ppurchase-order|sales-order)/calendar.ics', OrderCalendarExport(), name='api-po-so-calendar'), ] diff --git a/InvenTree/order/fixtures/order.yaml b/InvenTree/order/fixtures/order.yaml index fc0dc070fc..abf0958b85 100644 --- a/InvenTree/order/fixtures/order.yaml +++ b/InvenTree/order/fixtures/order.yaml @@ -110,3 +110,11 @@ order: 1 part: 5 quantity: 1 + +# An extra line item +- model: order.purchaseorderextraline + pk: 1 + fields: + order: 7 + reference: 'Freight cost' + quantity: 1 diff --git a/InvenTree/order/fixtures/return_order.yaml b/InvenTree/order/fixtures/return_order.yaml new file mode 100644 index 0000000000..1f96ea1e2c --- /dev/null +++ b/InvenTree/order/fixtures/return_order.yaml @@ -0,0 +1,53 @@ +- model: order.returnorder + pk: 1 + fields: + reference: 'RMA-001' + reference_int: 1 + description: 'RMA from a customer' + customer: 4 + status: 10 # Pending + +- model: order.returnorder + pk: 2 + fields: + reference: 'RMA-002' + reference_int: 2 + description: 'RMA from a customer' + customer: 4 + status: 20 # In Progress + +- model: order.returnorder + pk: 3 + fields: + reference: 'RMA-003' + reference_int: 3 + description: 'RMA from a customer' + customer: 4 + status: 30 # Complete + +- model: order.returnorder + pk: 4 + fields: + reference: 'RMA-004' + reference_int: 4 + description: 'RMA from a customer' + customer: 5 + status: 40 # Cancelled + +- model: order.returnorder + pk: 5 + fields: + reference: 'RMA-005' + reference_int: 5 + description: 'RMA from a customer' + customer: 5 + status: 20 # In progress + +- model: order.returnorder + pk: 6 + fields: + reference: 'RMA-006' + reference_int: 6 + description: 'RMA from a customer' + customer: 5 + status: 10 # Pending diff --git a/InvenTree/order/migrations/0078_auto_20230304_0721.py b/InvenTree/order/migrations/0078_auto_20230304_0721.py new file mode 100644 index 0000000000..3c06a60017 --- /dev/null +++ b/InvenTree/order/migrations/0078_auto_20230304_0721.py @@ -0,0 +1,36 @@ +# Generated by Django 3.2.18 on 2023-03-04 07:21 + +import InvenTree.fields +from django.db import migrations +import djmoney.models.fields +import djmoney.models.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0077_auto_20230129_0154'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorder', + name='total_price', + field=InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Total price for this order', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Total Price'), + ), + migrations.AddField( + model_name='purchaseorder', + name='total_price_currency', + field=djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3), + ), + migrations.AddField( + model_name='salesorder', + name='total_price', + field=InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Total price for this order', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Total Price'), + ), + migrations.AddField( + model_name='salesorder', + name='total_price_currency', + field=djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3), + ), + ] diff --git a/InvenTree/order/migrations/0079_auto_20230304_0904.py b/InvenTree/order/migrations/0079_auto_20230304_0904.py new file mode 100644 index 0000000000..85eb9f2b62 --- /dev/null +++ b/InvenTree/order/migrations/0079_auto_20230304_0904.py @@ -0,0 +1,131 @@ +# Generated by Django 3.2.18 on 2023-03-04 09:04 + +import logging + +from django.db import migrations + +from djmoney.contrib.exchange.exceptions import MissingRate +from djmoney.contrib.exchange.models import convert_money +from djmoney.money import Money + +from common.settings import currency_code_default + + +logger = logging.getLogger('inventree') + + +def update_purchase_order_price(apps, schema_editor): + """Calculate 'total_price' field for each PurchaseOrder""" + + PurchaseOrder = apps.get_model('order', 'purchaseorder') + + currency = currency_code_default() + + valid_count = 0 + invalid_count = 0 + + for order in PurchaseOrder.objects.all(): + + valid = True + + total_price = Money(0, currency) + + for line in order.lines.all(): + if line.purchase_price: + try: + total_price += convert_money(line.purchase_price, currency) * line.quantity + except MissingRate: + valid = False + break + + for line in order.extra_lines.all(): + if line.price: + try: + total_price += convert_money(line.price, currency) * line.quantity + except MissingRate: + valid = False + break + + if valid: + order.total_price = total_price + order.save() + + valid_count += 1 + else: + invalid_count +=1 + + if valid_count > 0: + logger.info(f"Updated 'total_price' field for {valid_count} PurchaseOrder instances") + + if invalid_count > 0: + logger.info(f"'total_price' field could not be updated for {invalid_count} PurchaseOrder instances") + + +def update_sales_order_price(apps, schema_editor): + """Calculate 'total_price' field for each SalesOrder""" + + SalesOrder = apps.get_model('order', 'salesorder') + + currency = currency_code_default() + + valid_count = 0 + invalid_count = 0 + + for order in SalesOrder.objects.all(): + + valid = True + + total_price = Money(0, currency) + + for line in order.lines.all(): + if line.sale_price: + try: + total_price += convert_money(line.sale_price, currency) * line.quantity + except MissingRate: + valid = False + break + + for line in order.extra_lines.all(): + if line.price: + try: + total_price += convert_money(line.price, currency) * line.quantity + except MissingRate: + valid = False + break + + if valid: + order.total_price = total_price + order.save() + + valid_count += 1 + else: + invalid_count +=1 + + if valid_count > 0: + logger.info(f"Updated 'total_price' field for {valid_count} SalesOrder instances") + + if invalid_count > 0: + logger.info(f"'total_price' field could not be updated for {invalid_count} SalesOrder instances") + + +def reverse(apps, schema_editor): + """Reverse migration (does nothing)""" + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0078_auto_20230304_0721'), + ] + + operations = [ + migrations.RunPython( + update_purchase_order_price, + reverse_code=reverse + ), + migrations.RunPython( + update_sales_order_price, + reverse_code=reverse, + ) + ] diff --git a/InvenTree/order/migrations/0080_auto_20230317_0816.py b/InvenTree/order/migrations/0080_auto_20230317_0816.py new file mode 100644 index 0000000000..1ea1c4c95e --- /dev/null +++ b/InvenTree/order/migrations/0080_auto_20230317_0816.py @@ -0,0 +1,38 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0079_auto_20230304_0904'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorderextraline', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='purchaseorderlineitem', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='salesorderextraline', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='salesorderlineitem', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='salesordershipment', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/order/migrations/0081_auto_20230314_0725.py b/InvenTree/order/migrations/0081_auto_20230314_0725.py new file mode 100644 index 0000000000..719a7a5037 --- /dev/null +++ b/InvenTree/order/migrations/0081_auto_20230314_0725.py @@ -0,0 +1,64 @@ +# Generated by Django 3.2.18 on 2023-03-14 07:25 + +import InvenTree.fields +import InvenTree.models +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import order.validators + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('company', '0054_companyattachment'), + ('users', '0006_alter_ruleset_name'), + ('order', '0080_auto_20230317_0816'), + ] + + operations = [ + migrations.CreateModel( + name='ReturnOrder', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('metadata', models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata')), + ('reference_int', models.BigIntegerField(default=0)), + ('description', models.CharField(help_text='Order description', max_length=250, verbose_name='Description')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link')), + ('creation_date', models.DateField(blank=True, null=True, verbose_name='Creation Date')), + ('notes', InvenTree.fields.InvenTreeNotesField(blank=True, help_text='Order notes', max_length=50000, null=True, verbose_name='Notes')), + ('reference', models.CharField(default=order.validators.generate_next_return_order_reference, help_text='Return Order reference', max_length=64, unique=True, validators=[order.validators.validate_return_order_reference], verbose_name='Reference')), + ('status', models.PositiveIntegerField(choices=[(10, 'Pending'), (30, 'Complete'), (40, 'Cancelled')], default=10, help_text='Return order status', verbose_name='Status')), + ('customer_reference', models.CharField(blank=True, help_text='Customer order reference code', max_length=64, verbose_name='Customer Reference ')), + ('issue_date', models.DateField(blank=True, help_text='Date order was issued', null=True, verbose_name='Issue Date')), + ('complete_date', models.DateField(blank=True, help_text='Date order was completed', null=True, verbose_name='Completion Date')), + ('created_by', 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')), + ('customer', models.ForeignKey(help_text='Company from which items are being returned', 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')), + ('responsible', models.ForeignKey(blank=True, help_text='User or group responsible for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='users.owner', verbose_name='Responsible')), + ], + options={ + 'abstract': False, + }, + ), + 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='return_orders', to='company.company', verbose_name='Customer'), + ), + migrations.CreateModel( + name='ReturnOrderAttachment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('attachment', models.FileField(blank=True, help_text='Select file to attach', null=True, upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external URL', null=True, verbose_name='Link')), + ('comment', models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment')), + ('upload_date', models.DateField(auto_now_add=True, null=True, verbose_name='upload date')), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='order.returnorder')), + ('user', 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')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/order/migrations/0082_auto_20230314_1259.py b/InvenTree/order/migrations/0082_auto_20230314_1259.py new file mode 100644 index 0000000000..8a9061406c --- /dev/null +++ b/InvenTree/order/migrations/0082_auto_20230314_1259.py @@ -0,0 +1,30 @@ +# Generated by Django 3.2.18 on 2023-03-14 12:59 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0054_companyattachment'), + ('order', '0081_auto_20230314_0725'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorder', + name='contact', + field=models.ForeignKey(blank=True, help_text='Point of contact for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='company.contact', verbose_name='Contact'), + ), + migrations.AddField( + model_name='returnorder', + name='contact', + field=models.ForeignKey(blank=True, help_text='Point of contact for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='company.contact', verbose_name='Contact'), + ), + migrations.AddField( + model_name='salesorder', + name='contact', + field=models.ForeignKey(blank=True, help_text='Point of contact for this order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='company.contact', verbose_name='Contact'), + ), + ] diff --git a/InvenTree/order/migrations/0083_returnorderextraline.py b/InvenTree/order/migrations/0083_returnorderextraline.py new file mode 100644 index 0000000000..ba1d8c2812 --- /dev/null +++ b/InvenTree/order/migrations/0083_returnorderextraline.py @@ -0,0 +1,35 @@ +# Generated by Django 3.2.18 on 2023-03-16 02:52 + +import InvenTree.fields +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import djmoney.models.fields +import djmoney.models.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0082_auto_20230314_1259'), + ] + + operations = [ + migrations.CreateModel( + name='ReturnOrderExtraLine', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Item quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity')), + ('reference', models.CharField(blank=True, help_text='Line item reference', max_length=100, verbose_name='Reference')), + ('notes', models.CharField(blank=True, help_text='Line item notes', max_length=500, verbose_name='Notes')), + ('target_date', models.DateField(blank=True, help_text='Target date for this line item (leave blank to use the target date from the order)', null=True, verbose_name='Target Date')), + ('context', models.JSONField(blank=True, help_text='Additional context for this line', null=True, verbose_name='Context')), + ('price_currency', djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3)), + ('price', InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Unit price', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Price')), + ('order', models.ForeignKey(help_text='Return Order', on_delete=django.db.models.deletion.CASCADE, related_name='extra_lines', to='order.returnorder', verbose_name='Order')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/order/migrations/0084_auto_20230321_1111.py b/InvenTree/order/migrations/0084_auto_20230321_1111.py new file mode 100644 index 0000000000..aa96291e33 --- /dev/null +++ b/InvenTree/order/migrations/0084_auto_20230321_1111.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.18 on 2023-03-21 11:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0083_returnorderextraline'), + ] + + operations = [ + migrations.AddField( + model_name='returnorder', + name='target_date', + field=models.DateField(blank=True, help_text='Expected date for order delivery. Order will be overdue after this date.', null=True, verbose_name='Target Date'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='target_date', + field=models.DateField(blank=True, help_text='Expected date for order delivery. Order will be overdue after this date.', null=True, verbose_name='Target Date'), + ), + migrations.AlterField( + model_name='returnorder', + name='status', + field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'In Progress'), (30, 'Complete'), (40, 'Cancelled')], default=10, help_text='Return order status', verbose_name='Status'), + ), + migrations.AlterField( + model_name='salesorder', + name='target_date', + field=models.DateField(blank=True, help_text='Expected date for order delivery. Order will be overdue after this date.', null=True, verbose_name='Target Date'), + ), + ] diff --git a/InvenTree/order/migrations/0085_auto_20230322_1056.py b/InvenTree/order/migrations/0085_auto_20230322_1056.py new file mode 100644 index 0000000000..9a5f4a652f --- /dev/null +++ b/InvenTree/order/migrations/0085_auto_20230322_1056.py @@ -0,0 +1,49 @@ +# Generated by Django 3.2.18 on 2023-03-22 10:56 + +import InvenTree.fields +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import djmoney.models.fields +import djmoney.models.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0095_stocklocation_external'), + ('order', '0084_auto_20230321_1111'), + ] + + operations = [ + migrations.AddField( + model_name='returnorder', + name='total_price', + field=InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Total price for this order', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Total Price'), + ), + migrations.AddField( + model_name='returnorder', + name='total_price_currency', + field=djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3), + ), + migrations.CreateModel( + name='ReturnOrderLineItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Item quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity')), + ('reference', models.CharField(blank=True, help_text='Line item reference', max_length=100, verbose_name='Reference')), + ('notes', models.CharField(blank=True, help_text='Line item notes', max_length=500, verbose_name='Notes')), + ('target_date', models.DateField(blank=True, help_text='Target date for this line item (leave blank to use the target date from the order)', null=True, verbose_name='Target Date')), + ('received_date', models.DateField(blank=True, help_text='The date this this return item was received', null=True, verbose_name='Received Date')), + ('outcome', models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'Return'), (30, 'Repair'), (50, 'Refund'), (40, 'Replace'), (60, 'Reject')], default=10, help_text='Outcome for this line item', verbose_name='Outcome')), + ('price_currency', djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3)), + ('price', InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Cost associated with return or repair for this line item', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Price')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link')), + ('item', models.ForeignKey(help_text='Select item to return from customer', on_delete=django.db.models.deletion.CASCADE, related_name='return_order_lines', to='stock.stockitem', verbose_name='Item')), + ('order', models.ForeignKey(help_text='Return Order', on_delete=django.db.models.deletion.CASCADE, related_name='lines', to='order.returnorder', verbose_name='Order')), + ], + options={ + 'unique_together': {('order', 'item')}, + }, + ), + ] diff --git a/InvenTree/order/migrations/0086_auto_20230323_1108.py b/InvenTree/order/migrations/0086_auto_20230323_1108.py new file mode 100644 index 0000000000..3cfcd2f629 --- /dev/null +++ b/InvenTree/order/migrations/0086_auto_20230323_1108.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-03-23 11:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0085_auto_20230322_1056'), + ] + + operations = [ + migrations.AddField( + model_name='returnorderextraline', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='returnorderlineitem', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/order/migrations/0087_alter_salesorder_status.py b/InvenTree/order/migrations/0087_alter_salesorder_status.py new file mode 100644 index 0000000000..eaf4029917 --- /dev/null +++ b/InvenTree/order/migrations/0087_alter_salesorder_status.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-03-30 11:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0086_auto_20230323_1108'), + ] + + operations = [ + migrations.AlterField( + model_name='salesorder', + name='status', + field=models.PositiveIntegerField(choices=[(10, 'Pending'), (15, 'In Progress'), (20, 'Shipped'), (40, 'Cancelled'), (50, 'Lost'), (60, 'Returned')], default=10, help_text='Purchase order status', verbose_name='Status'), + ), + ] diff --git a/InvenTree/order/migrations/0088_auto_20230403_1402.py b/InvenTree/order/migrations/0088_auto_20230403_1402.py new file mode 100644 index 0000000000..ae30fb4278 --- /dev/null +++ b/InvenTree/order/migrations/0088_auto_20230403_1402.py @@ -0,0 +1,39 @@ +# Generated by Django 3.2.18 on 2023-04-03 14:02 + +import InvenTree.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0087_alter_salesorder_status'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorderextraline', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AddField( + model_name='purchaseorderlineitem', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AddField( + model_name='returnorderextraline', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AddField( + model_name='salesorderextraline', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AddField( + model_name='salesorderlineitem', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + ] diff --git a/InvenTree/order/migrations/0089_auto_20230404_0030.py b/InvenTree/order/migrations/0089_auto_20230404_0030.py new file mode 100644 index 0000000000..a28439003b --- /dev/null +++ b/InvenTree/order/migrations/0089_auto_20230404_0030.py @@ -0,0 +1,43 @@ +# Generated by Django 3.2.18 on 2023-04-04 00:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0088_auto_20230403_1402'), + ] + + operations = [ + migrations.AddField( + model_name='purchaseorder', + name='barcode_data', + field=models.CharField(blank=True, help_text='Third party barcode data', max_length=500, verbose_name='Barcode Data'), + ), + migrations.AddField( + model_name='purchaseorder', + name='barcode_hash', + field=models.CharField(blank=True, help_text='Unique hash of barcode data', max_length=128, verbose_name='Barcode Hash'), + ), + migrations.AddField( + model_name='returnorder', + name='barcode_data', + field=models.CharField(blank=True, help_text='Third party barcode data', max_length=500, verbose_name='Barcode Data'), + ), + migrations.AddField( + model_name='returnorder', + name='barcode_hash', + field=models.CharField(blank=True, help_text='Unique hash of barcode data', max_length=128, verbose_name='Barcode Hash'), + ), + migrations.AddField( + model_name='salesorder', + name='barcode_data', + field=models.CharField(blank=True, help_text='Third party barcode data', max_length=500, verbose_name='Barcode Data'), + ), + migrations.AddField( + model_name='salesorder', + name='barcode_hash', + field=models.CharField(blank=True, help_text='Unique hash of barcode data', max_length=128, verbose_name='Barcode Hash'), + ), + ] diff --git a/InvenTree/order/migrations/0090_auto_20230412_1752.py b/InvenTree/order/migrations/0090_auto_20230412_1752.py new file mode 100644 index 0000000000..e337d6c949 --- /dev/null +++ b/InvenTree/order/migrations/0090_auto_20230412_1752.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.18 on 2023-04-12 17:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0089_auto_20230404_0030'), + ] + + operations = [ + migrations.AlterField( + model_name='purchaseorder', + name='description', + field=models.CharField(blank=True, help_text='Order description (optional)', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='returnorder', + name='description', + field=models.CharField(blank=True, help_text='Order description (optional)', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='salesorder', + name='description', + field=models.CharField(blank=True, help_text='Order description (optional)', max_length=250, verbose_name='Description'), + ), + ] diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 430632f9b6..51d3cae0b9 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -26,31 +26,118 @@ import InvenTree.helpers import InvenTree.ready import InvenTree.tasks import order.validators +import stock.models +import users.models as UserModels from common.notifications import InvenTreeNotificationBodies from common.settings import currency_code_default -from company.models import Company, SupplierPart +from company.models import Company, Contact, SupplierPart from InvenTree.exceptions import log_error from InvenTree.fields import (InvenTreeModelMoneyField, InvenTreeNotesField, InvenTreeURLField, RoundingDecimalField) from InvenTree.helpers import decimal2string, getSetting, notify_responsible -from InvenTree.models import InvenTreeAttachment, ReferenceIndexingMixin -from InvenTree.status_codes import (PurchaseOrderStatus, SalesOrderStatus, +from InvenTree.models import (InvenTreeAttachment, InvenTreeBarcodeMixin, + ReferenceIndexingMixin) +from InvenTree.status_codes import (PurchaseOrderStatus, ReturnOrderLineStatus, + ReturnOrderStatus, SalesOrderStatus, StockHistoryCode, StockStatus) from part import models as PartModels from plugin.events import trigger_event from plugin.models import MetadataMixin -from stock import models as stock_models -from users import models as UserModels logger = logging.getLogger('inventree') -class Order(MetadataMixin, ReferenceIndexingMixin): +class TotalPriceMixin(models.Model): + """Mixin which provides 'total_price' field for an order""" + + class Meta: + """Meta for MetadataMixin.""" + abstract = True + + def save(self, *args, **kwargs): + """Update the total_price field when saved""" + + # Recalculate total_price for this order + self.update_total_price(commit=False) + super().save(*args, **kwargs) + + total_price = InvenTreeModelMoneyField( + null=True, blank=True, + allow_negative=False, + verbose_name=_('Total Price'), + help_text=_('Total price for this order') + ) + + def update_total_price(self, commit=True): + """Recalculate and save the total_price for this order""" + + self.total_price = self.calculate_total_price() + + if commit: + self.save() + + def calculate_total_price(self, target_currency=None): + """Calculates the total price of all order lines, and converts to the specified target currency. + + If not specified, the default system currency is used. + + If currency conversion fails (e.g. there are no valid conversion rates), + then we simply return zero, rather than attempting some other calculation. + """ + # Set default - see B008 + if target_currency is None: + target_currency = currency_code_default() + + total = Money(0, target_currency) + + # order items + for line in self.lines.all(): + + if not line.price: + continue + + try: + total += line.quantity * convert_money(line.price, target_currency) + except MissingRate: + # Record the error, try to press on + kind, info, data = sys.exc_info() + + log_error('order.calculate_total_price') + logger.error(f"Missing exchange rate for '{target_currency}'") + + # Return None to indicate the calculated price is invalid + return None + + # extra items + for line in self.extra_lines.all(): + + if not line.price: + continue + + try: + total += line.quantity * convert_money(line.price, target_currency) + except MissingRate: + # Record the error, try to press on + + log_error('order.calculate_total_price') + logger.error(f"Missing exchange rate for '{target_currency}'") + + # Return None to indicate the calculated price is invalid + return None + + # set decimal-places + total.decimal_places = 4 + + return total + + +class Order(InvenTreeBarcodeMixin, MetadataMixin, ReferenceIndexingMixin): """Abstract model for an order. Instances of this class: - PuchaseOrder + - SalesOrder Attributes: reference: Unique order number / reference / code @@ -63,6 +150,10 @@ class Order(MetadataMixin, ReferenceIndexingMixin): responsible: User (or group) responsible for managing the order """ + class Meta: + """Metaclass options. Abstract ensures no database table is created.""" + abstract = True + def save(self, *args, **kwargs): """Custom save method for the order models: @@ -75,15 +166,47 @@ class Order(MetadataMixin, ReferenceIndexingMixin): super().save(*args, **kwargs) - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" + def clean(self): + """Custom clean method for the generic order class""" - abstract = True + super().clean() - description = models.CharField(max_length=250, verbose_name=_('Description'), help_text=_('Order description')) + # Check that the referenced 'contact' matches the correct 'company' + if self.company and self.contact: + if self.contact.company != self.company: + raise ValidationError({ + "contact": _("Contact does not match selected company") + }) + + @classmethod + def overdue_filter(cls): + """A generic implementation of an 'overdue' filter for the Model class + + It requires any subclasses to implement the get_status_class() class method + """ + + today = datetime.now().date() + return Q(status__in=cls.get_status_class().OPEN) & ~Q(target_date=None) & Q(target_date__lt=today) + + @property + def is_overdue(self): + """Method to determine if this order is overdue. + + Makes use of the overdue_filter() method to avoid code duplication + """ + + return self.__class__.objects.filter(pk=self.pk).filter(self.__class__.overdue_filter()).exists() + + description = models.CharField(max_length=250, blank=True, verbose_name=_('Description'), help_text=_('Order description (optional)')) link = InvenTreeURLField(blank=True, verbose_name=_('Link'), help_text=_('Link to external page')) + target_date = models.DateField( + blank=True, null=True, + verbose_name=_('Target Date'), + help_text=_('Expected date for order delivery. Order will be overdue after this date.'), + ) + creation_date = models.DateField(blank=True, null=True, verbose_name=_('Creation Date')) created_by = models.ForeignKey(User, @@ -102,69 +225,25 @@ class Order(MetadataMixin, ReferenceIndexingMixin): related_name='+', ) + contact = models.ForeignKey( + Contact, + on_delete=models.SET_NULL, + blank=True, null=True, + verbose_name=_('Contact'), + help_text=_('Point of contact for this order'), + related_name='+', + ) + notes = InvenTreeNotesField(help_text=_('Order notes')) - def get_total_price(self, target_currency=None): - """Calculates the total price of all order lines, and converts to the specified target currency. + @classmethod + def get_status_class(cls): + """Return the enumeration class which represents the 'status' field for this model""" - If not specified, the default system currency is used. - - If currency conversion fails (e.g. there are no valid conversion rates), - then we simply return zero, rather than attempting some other calculation. - """ - # Set default - see B008 - if target_currency is None: - target_currency = currency_code_default() - - total = Money(0, target_currency) - - # gather name reference - price_ref_tag = 'sale_price' if isinstance(self, SalesOrder) else 'purchase_price' - - # order items - for line in self.lines.all(): - - price_ref = getattr(line, price_ref_tag) - - if not price_ref: - continue - - try: - total += line.quantity * convert_money(price_ref, target_currency) - except MissingRate: - # Record the error, try to press on - kind, info, data = sys.exc_info() - - log_error('order.get_total_price') - logger.error(f"Missing exchange rate for '{target_currency}'") - - # Return None to indicate the calculated price is invalid - return None - - # extra items - for line in self.extra_lines.all(): - - if not line.price: - continue - - try: - total += line.quantity * convert_money(line.price, target_currency) - except MissingRate: - # Record the error, try to press on - - log_error('order.get_total_price') - logger.error(f"Missing exchange rate for '{target_currency}'") - - # Return None to indicate the calculated price is invalid - return None - - # set decimal-places - total.decimal_places = 4 - - return total + raise NotImplementedError(f"get_status_class() not implemented for {__class__}") -class PurchaseOrder(Order): +class PurchaseOrder(TotalPriceMixin, Order): """A PurchaseOrder represents goods shipped inwards from an external supplier. Attributes: @@ -174,14 +253,23 @@ class PurchaseOrder(Order): target_date: Expected delivery target date for PurchaseOrder completion (optional) """ + def get_absolute_url(self): + """Get the 'web' URL for this order""" + return reverse('po-detail', kwargs={'pk': self.pk}) + @staticmethod def get_api_url(): """Return the API URL associated with the PurchaseOrder model""" return reverse('api-po-list') + @classmethod + def get_status_class(cls): + """Return the PurchasOrderStatus class""" + return PurchaseOrderStatus + @classmethod def api_defaults(cls, request): - """Return default values for thsi model when issuing an API OPTIONS request""" + """Return default values for this model when issuing an API OPTIONS request""" defaults = { 'reference': order.validators.generate_next_purchase_order_reference(), @@ -189,8 +277,6 @@ class PurchaseOrder(Order): return defaults - OVERDUE_FILTER = Q(status__in=PurchaseOrderStatus.OPEN) & ~Q(target_date=None) & Q(target_date__lte=datetime.now().date()) - # Global setting for specifying reference pattern REFERENCE_PATTERN_SETTING = 'PURCHASEORDER_REFERENCE_PATTERN' @@ -265,6 +351,11 @@ class PurchaseOrder(Order): help_text=_('Company from which the items are being ordered') ) + @property + def company(self): + """Accessor helper for Order base class""" + return self.supplier + supplier_reference = models.CharField(max_length=64, blank=True, verbose_name=_('Supplier Reference'), help_text=_("Supplier order reference code")) received_by = models.ForeignKey( @@ -281,22 +372,12 @@ class PurchaseOrder(Order): help_text=_('Date order was issued') ) - target_date = models.DateField( - blank=True, null=True, - verbose_name=_('Target Delivery Date'), - help_text=_('Expected date for order delivery. Order will be overdue after this date.'), - ) - complete_date = models.DateField( blank=True, null=True, verbose_name=_('Completion Date'), help_text=_('Date order was completed') ) - def get_absolute_url(self): - """Return the web URL of the detail view for this order""" - return reverse('po-detail', kwargs={'pk': self.id}) - @transaction.atomic def add_line_item(self, supplier_part, quantity, group: bool = True, reference: str = '', purchase_price=None): """Add a new line item to this purchase order. @@ -390,7 +471,7 @@ class PurchaseOrder(Order): # Schedule pricing update for any referenced parts for line in self.lines.all(): if line.part and line.part.part: - line.part.part.schedule_pricing_update() + line.part.part.schedule_pricing_update(create=True) trigger_event('purchaseorder.completed', id=self.pk) @@ -400,15 +481,9 @@ class PurchaseOrder(Order): return self.status == PurchaseOrderStatus.PENDING @property - def is_overdue(self): - """Returns True if this PurchaseOrder is "overdue". - - Makes use of the OVERDUE_FILTER to avoid code duplication. - """ - query = PurchaseOrder.objects.filter(pk=self.pk) - query = query.filter(PurchaseOrder.OVERDUE_FILTER) - - return query.exists() + def is_open(self): + """Return True if the PurchaseOrder is 'open'""" + return self.status in PurchaseOrderStatus.OPEN def can_cancel(self): """A PurchaseOrder can only be cancelled under the following circumstances. @@ -474,11 +549,11 @@ class PurchaseOrder(Order): notes = kwargs.get('notes', '') # Extract optional barcode field - barcode_hash = kwargs.get('barcode', None) + barcode = kwargs.get('barcode', None) # Prevent null values for barcode - if barcode_hash is None: - barcode_hash = '' + if barcode is None: + barcode = '' if self.status != PurchaseOrderStatus.PLACED: raise ValidationError( @@ -502,6 +577,11 @@ class PurchaseOrder(Order): # Take the 'pack_size' of the SupplierPart into account pack_quantity = Decimal(quantity) * Decimal(line.part.pack_size) + if line.purchase_price: + unit_purchase_price = line.purchase_price / line.part.pack_size + else: + unit_purchase_price = None + # Determine if we should individually serialize the items, or not if type(serials) is list and len(serials) > 0: serialize = True @@ -511,7 +591,7 @@ class PurchaseOrder(Order): for sn in serials: - stock = stock_models.StockItem( + item = stock.models.StockItem( part=line.part.part, supplier_part=line.part, location=location, @@ -520,18 +600,24 @@ class PurchaseOrder(Order): status=status, batch=batch_code, serial=sn, - purchase_price=line.purchase_price, - barcode_hash=barcode_hash + purchase_price=unit_purchase_price ) - stock.save(add_note=False) + # Assign the provided barcode + if barcode: + item.assign_barcode( + barcode_data=barcode, + save=False + ) + + item.save(add_note=False) tracking_info = { 'status': status, 'purchaseorder': self.pk, } - stock.add_tracking_entry( + item.add_tracking_entry( StockHistoryCode.RECEIVED_AGAINST_PURCHASE_ORDER, user, notes=notes, @@ -572,20 +658,23 @@ def after_save_purchase_order(sender, instance: PurchaseOrder, created: bool, ** notify_responsible(instance, sender, exclude=instance.created_by) -class SalesOrder(Order): - """A SalesOrder represents a list of goods shipped outwards to a customer. +class SalesOrder(TotalPriceMixin, Order): + """A SalesOrder represents a list of goods shipped outwards to a customer.""" - Attributes: - customer: Reference to the company receiving the goods in the order - customer_reference: Optional field for customer order reference code - target_date: Target date for SalesOrder completion (optional) - """ + def get_absolute_url(self): + """Get the 'web' URL for this order""" + return reverse('so-detail', kwargs={'pk': self.pk}) @staticmethod def get_api_url(): """Return the API URL associated with the SalesOrder model""" return reverse('api-so-list') + @classmethod + def get_status_class(cls): + """Return the SalesOrderStatus class""" + return SalesOrderStatus + @classmethod def api_defaults(cls, request): """Return default values for this model when issuing an API OPTIONS request""" @@ -595,8 +684,6 @@ class SalesOrder(Order): return defaults - OVERDUE_FILTER = Q(status__in=SalesOrderStatus.OPEN) & ~Q(target_date=None) & Q(target_date__lte=datetime.now().date()) - # Global setting for specifying reference pattern REFERENCE_PATTERN_SETTING = 'SALESORDER_REFERENCE_PATTERN' @@ -640,10 +727,6 @@ class SalesOrder(Order): return f"{self.reference} - {self.customer.name if self.customer else _('deleted')}" - def get_absolute_url(self): - """Return the web URL for the detail view of this order""" - return reverse('so-detail', kwargs={'pk': self.id}) - reference = models.CharField( unique=True, max_length=64, @@ -661,13 +744,21 @@ class SalesOrder(Order): on_delete=models.SET_NULL, null=True, limit_choices_to={'is_customer': True}, - related_name='sales_orders', + related_name='return_orders', verbose_name=_('Customer'), help_text=_("Company to which the items are being sold"), ) - status = models.PositiveIntegerField(default=SalesOrderStatus.PENDING, choices=SalesOrderStatus.items(), - verbose_name=_('Status'), help_text=_('Purchase order status')) + @property + def company(self): + """Accessor helper for Order base""" + return self.customer + + status = models.PositiveIntegerField( + default=SalesOrderStatus.PENDING, + choices=SalesOrderStatus.items(), + verbose_name=_('Status'), help_text=_('Purchase order status') + ) @property def status_text(self): @@ -676,12 +767,6 @@ class SalesOrder(Order): 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, - verbose_name=_('Target completion date'), - help_text=_('Target date for order completion. Order will be overdue after this date.') - ) - shipment_date = models.DateField(blank=True, null=True, verbose_name=_('Shipment Date')) shipped_by = models.ForeignKey( @@ -692,22 +777,16 @@ class SalesOrder(Order): verbose_name=_('shipped by') ) - @property - def is_overdue(self): - """Returns true if this SalesOrder is "overdue". - - Makes use of the OVERDUE_FILTER to avoid code duplication. - """ - query = SalesOrder.objects.filter(pk=self.pk) - query = query.filter(SalesOrder.OVERDUE_FILTER) - - return query.exists() - @property def is_pending(self): """Return True if this order is 'pending'""" return self.status == SalesOrderStatus.PENDING + @property + def is_open(self): + """Return True if this order is 'open' (either 'pending' or 'in_progress')""" + return self.status in SalesOrderStatus.OPEN + @property def stock_allocations(self): """Return a queryset containing all allocations for this order.""" @@ -746,9 +825,9 @@ class SalesOrder(Order): if self.lines.count() == 0: raise ValidationError(_('Order cannot be completed as no parts have been assigned')) - # Only a PENDING order can be marked as SHIPPED - elif self.status != SalesOrderStatus.PENDING: - raise ValidationError(_('Only a pending order can be marked as complete')) + # Only an open order can be marked as shipped + elif not self.is_open: + raise ValidationError(_('Only an open order can be marked as complete')) elif self.pending_shipment_count > 0: raise ValidationError(_("Order cannot be completed as there are incomplete shipments")) @@ -765,6 +844,21 @@ class SalesOrder(Order): return True + def place_order(self): + """Deprecated version of 'issue_order'""" + self.issue_order() + + @transaction.atomic + def issue_order(self): + """Change this order from 'PENDING' to 'IN_PROGRESS'""" + + if self.status == SalesOrderStatus.PENDING: + self.status = SalesOrderStatus.IN_PROGRESS + self.issue_date = datetime.now().date() + self.save() + + trigger_event('salesorder.issued', id=self.pk) + def complete_order(self, user, **kwargs): """Mark this order as "complete.""" if not self.can_complete(**kwargs): @@ -778,7 +872,7 @@ class SalesOrder(Order): # Schedule pricing update for any referenced parts for line in self.lines.all(): - line.part.schedule_pricing_update() + line.part.schedule_pricing_update(create=True) trigger_event('salesorder.completed', id=self.pk) @@ -786,14 +880,11 @@ class SalesOrder(Order): def can_cancel(self): """Return True if this order can be cancelled.""" - if self.status != SalesOrderStatus.PENDING: - return False - - return True + return self.is_open @transaction.atomic def cancel_order(self): - """Cancel this order (only if it is "pending"). + """Cancel this order (only if it is "open"). Executes: - Mark the order as 'cancelled' @@ -915,7 +1006,7 @@ class SalesOrderAttachment(InvenTreeAttachment): order = models.ForeignKey(SalesOrder, on_delete=models.CASCADE, related_name='attachments') -class OrderLineItem(models.Model): +class OrderLineItem(MetadataMixin, models.Model): """Abstract model for an order line item. Attributes: @@ -927,9 +1018,26 @@ class OrderLineItem(models.Model): class Meta: """Metaclass options. Abstract ensures no database table is created.""" - abstract = True + def save(self, *args, **kwargs): + """Custom save method for the OrderLineItem model + + Calls save method on the linked order + """ + + super().save(*args, **kwargs) + self.order.save() + + def delete(self, *args, **kwargs): + """Custom delete method for the OrderLineItem model + + Calls save method on the linked order + """ + + super().delete(*args, **kwargs) + self.order.save() + quantity = RoundingDecimalField( verbose_name=_('Quantity'), help_text=_('Item quantity'), @@ -938,10 +1046,23 @@ class OrderLineItem(models.Model): validators=[MinValueValidator(0)], ) + @property + def total_line_price(self): + """Return the total price for this line item""" + + if self.price: + return self.quantity * self.price + reference = models.CharField(max_length=100, blank=True, verbose_name=_('Reference'), help_text=_('Line item reference')) notes = models.CharField(max_length=500, blank=True, verbose_name=_('Notes'), help_text=_('Line item notes')) + link = InvenTreeURLField( + blank=True, + verbose_name=_('Link'), + help_text=_('Link to external page') + ) + target_date = models.DateField( blank=True, null=True, verbose_name=_('Target Date'), @@ -958,7 +1079,6 @@ class OrderExtraLine(OrderLineItem): class Meta: """Metaclass options. Abstract ensures no database table is created.""" - abstract = True context = models.JSONField( @@ -1055,6 +1175,11 @@ class PurchaseOrderLineItem(OrderLineItem): help_text=_('Unit purchase price'), ) + @property + def price(self): + """Return the 'purchase_price' field as 'price'""" + return self.purchase_price + destination = TreeForeignKey( 'stock.StockLocation', on_delete=models.SET_NULL, verbose_name=_('Destination'), @@ -1070,9 +1195,9 @@ class PurchaseOrderLineItem(OrderLineItem): stock items location will be reported as the location for the entire line. """ - for stock in stock_models.StockItem.objects.filter(supplier_part=self.part, purchase_order=self.order): - if stock.location: - return stock.location + for item in stock.models.StockItem.objects.filter(supplier_part=self.part, purchase_order=self.order): + if item.location: + return item.location if self.destination: return self.destination if self.part and self.part.part and self.part.part.default_location: @@ -1161,6 +1286,11 @@ class SalesOrderLineItem(OrderLineItem): help_text=_('Unit sale price'), ) + @property + def price(self): + """Return the 'sale_price' field as 'price'""" + return self.sale_price + shipped = RoundingDecimalField( verbose_name=_('Shipped'), help_text=_('Shipped quantity'), @@ -1200,7 +1330,7 @@ class SalesOrderLineItem(OrderLineItem): return self.shipped >= self.quantity -class SalesOrderShipment(models.Model): +class SalesOrderShipment(MetadataMixin, models.Model): """The SalesOrderShipment model represents a physical shipment made against a SalesOrder. - Points to a single SalesOrder object @@ -1364,7 +1494,11 @@ class SalesOrderExtraLine(OrderExtraLine): """Return the API URL associated with the SalesOrderExtraLine model""" return reverse('api-so-extra-line-list') - order = models.ForeignKey(SalesOrder, on_delete=models.CASCADE, related_name='extra_lines', verbose_name=_('Order'), help_text=_('Sales Order')) + order = models.ForeignKey( + SalesOrder, on_delete=models.CASCADE, + related_name='extra_lines', + verbose_name=_('Order'), help_text=_('Sales Order') + ) class SalesOrderAllocation(models.Model): @@ -1399,7 +1533,7 @@ class SalesOrderAllocation(models.Model): try: if not self.item: raise ValidationError({'item': _('Stock item has not been assigned')}) - except stock_models.StockItem.DoesNotExist: + except stock.models.StockItem.DoesNotExist: raise ValidationError({'item': _('Stock item has not been assigned')}) try: @@ -1491,3 +1625,301 @@ class SalesOrderAllocation(models.Model): # (It may have changed if the stock was split) self.item = item self.save() + + +class ReturnOrder(TotalPriceMixin, Order): + """A ReturnOrder represents goods returned from a customer, e.g. an RMA or warranty + + Attributes: + customer: Reference to the customer + sales_order: Reference to an existing SalesOrder (optional) + status: The status of the order (refer to status_codes.ReturnOrderStatus) + """ + + def get_absolute_url(self): + """Get the 'web' URL for this order""" + return reverse('return-order-detail', kwargs={'pk': self.pk}) + + @staticmethod + def get_api_url(): + """Return the API URL associated with the ReturnOrder model""" + return reverse('api-return-order-list') + + @classmethod + def get_status_class(cls): + """Return the ReturnOrderStatus class""" + return ReturnOrderStatus + + @classmethod + def api_defaults(cls, request): + """Return default values for this model when issuing an API OPTIONS request""" + defaults = { + 'reference': order.validators.generate_next_return_order_reference(), + } + + return defaults + + REFERENCE_PATTERN_SETTING = 'RETURNORDER_REFERENCE_PATTERN' + + def __str__(self): + """Render a string representation of this ReturnOrder""" + + return f"{self.reference} - {self.customer.name if self.customer else _('no customer')}" + + reference = models.CharField( + unique=True, + max_length=64, + blank=False, + verbose_name=_('Reference'), + help_text=_('Return Order reference'), + default=order.validators.generate_next_return_order_reference, + validators=[ + order.validators.validate_return_order_reference, + ] + ) + + customer = models.ForeignKey( + Company, + on_delete=models.SET_NULL, + null=True, + limit_choices_to={'is_customer': True}, + related_name='sales_orders', + verbose_name=_('Customer'), + help_text=_("Company from which items are being returned"), + ) + + @property + def company(self): + """Accessor helper for Order base class""" + return self.customer + + status = models.PositiveIntegerField( + default=ReturnOrderStatus.PENDING, + choices=ReturnOrderStatus.items(), + verbose_name=_('Status'), help_text=_('Return order status') + ) + + customer_reference = models.CharField( + max_length=64, blank=True, + verbose_name=_('Customer Reference '), + help_text=_("Customer order reference code") + ) + + issue_date = models.DateField( + blank=True, null=True, + verbose_name=_('Issue Date'), + help_text=_('Date order was issued') + ) + + complete_date = models.DateField( + blank=True, null=True, + verbose_name=_('Completion Date'), + help_text=_('Date order was completed') + ) + + @property + def is_pending(self): + """Return True if this order is pending""" + return self.status == ReturnOrderStatus.PENDING + + @property + def is_open(self): + """Return True if this order is outstanding""" + return self.status in ReturnOrderStatus.OPEN + + @property + def is_received(self): + """Return True if this order is fully received""" + return not self.lines.filter(received_date=None).exists() + + @transaction.atomic + def cancel_order(self): + """Cancel this ReturnOrder (if not already cancelled)""" + if self.status != ReturnOrderStatus.CANCELLED: + self.status = ReturnOrderStatus.CANCELLED + self.save() + + trigger_event('returnorder.cancelled', id=self.pk) + + @transaction.atomic + def complete_order(self): + """Complete this ReturnOrder (if not already completed)""" + + if self.status == ReturnOrderStatus.IN_PROGRESS: + self.status = ReturnOrderStatus.COMPLETE + self.complete_date = datetime.now().date() + self.save() + + trigger_event('returnorder.completed', id=self.pk) + + def place_order(self): + """Deprecated version of 'issue_order""" + self.issue_order() + + @transaction.atomic + def issue_order(self): + """Issue this ReturnOrder (if currently pending)""" + + if self.status == ReturnOrderStatus.PENDING: + self.status = ReturnOrderStatus.IN_PROGRESS + self.issue_date = datetime.now().date() + self.save() + + trigger_event('returnorder.issued', id=self.pk) + + @transaction.atomic + def receive_line_item(self, line, location, user, note=''): + """Receive a line item against this ReturnOrder: + + - Transfers the StockItem to the specified location + - Marks the StockItem as "quarantined" + - Adds a tracking entry to the StockItem + - Removes the 'customer' reference from the StockItem + """ + + # Prevent an item from being "received" multiple times + if line.received_date is not None: + logger.warning("receive_line_item called with item already returned") + return + + stock_item = line.item + + deltas = { + 'status': StockStatus.QUARANTINED, + 'returnorder': self.pk, + 'location': location.pk, + } + + if stock_item.customer: + deltas['customer'] = stock_item.customer.pk + + # Update the StockItem + stock_item.status = StockStatus.QUARANTINED + stock_item.location = location + stock_item.customer = None + stock_item.sales_order = None + stock_item.save(add_note=False) + + # Add a tracking entry to the StockItem + stock_item.add_tracking_entry( + StockHistoryCode.RETURNED_AGAINST_RETURN_ORDER, + user, + notes=note, + deltas=deltas, + location=location, + returnorder=self, + ) + + # Update the LineItem + line.received_date = datetime.now().date() + line.save() + + trigger_event('returnorder.received', id=self.pk) + + # Notify responsible users + notify_responsible( + self, + ReturnOrder, + exclude=user, + content=InvenTreeNotificationBodies.ReturnOrderItemsReceived, + ) + + +class ReturnOrderLineItem(OrderLineItem): + """Model for a single LineItem in a ReturnOrder""" + + class Meta: + """Metaclass options for this model""" + + unique_together = [ + ('order', 'item'), + ] + + @staticmethod + def get_api_url(): + """Return the API URL associated with this model""" + return reverse('api-return-order-line-list') + + def clean(self): + """Perform extra validation steps for the ReturnOrderLineItem model""" + + super().clean() + + if self.item and not self.item.serialized: + raise ValidationError({ + 'item': _("Only serialized items can be assigned to a Return Order"), + }) + + order = models.ForeignKey( + ReturnOrder, + on_delete=models.CASCADE, + related_name='lines', + verbose_name=_('Order'), + help_text=_('Return Order'), + ) + + item = models.ForeignKey( + stock.models.StockItem, + on_delete=models.CASCADE, + related_name='return_order_lines', + verbose_name=_('Item'), + help_text=_('Select item to return from customer') + ) + + received_date = models.DateField( + null=True, blank=True, + verbose_name=_('Received Date'), + help_text=_('The date this this return item was received'), + ) + + @property + def received(self): + """Return True if this item has been received""" + return self.received_date is not None + + outcome = models.PositiveIntegerField( + default=ReturnOrderLineStatus.PENDING, + choices=ReturnOrderLineStatus.items(), + verbose_name=_('Outcome'), help_text=_('Outcome for this line item') + ) + + price = InvenTreeModelMoneyField( + null=True, blank=True, + verbose_name=_('Price'), + help_text=_('Cost associated with return or repair for this line item'), + ) + + +class ReturnOrderExtraLine(OrderExtraLine): + """Model for a single ExtraLine in a ReturnOrder""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the ReturnOrderExtraLine model""" + return reverse('api-return-order-extra-line-list') + + order = models.ForeignKey( + ReturnOrder, on_delete=models.CASCADE, + related_name='extra_lines', + verbose_name=_('Order'), help_text=_('Return Order') + ) + + +class ReturnOrderAttachment(InvenTreeAttachment): + """Model for storing file attachments against a ReturnOrder object""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the ReturnOrderAttachment class""" + + return reverse('api-return-order-attachment-list') + + def getSubdir(self): + """Return the directory path where ReturnOrderAttachment files are located""" + return os.path.join('return_files', str(self.order.id)) + + order = models.ForeignKey( + ReturnOrder, + on_delete=models.CASCADE, + related_name='attachments', + ) diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index f240f29de1..9624394943 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -17,28 +17,97 @@ import order.models import part.filters import stock.models import stock.serializers -from common.settings import currency_code_mappings -from company.serializers import CompanyBriefSerializer, SupplierPartSerializer -from InvenTree.helpers import extract_serial_numbers, normalize, str2bool +from company.serializers import (CompanyBriefSerializer, ContactSerializer, + SupplierPartSerializer) +from InvenTree.helpers import (extract_serial_numbers, hash_barcode, normalize, + str2bool) from InvenTree.serializers import (InvenTreeAttachmentSerializer, + InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeModelSerializer, InvenTreeMoneySerializer) -from InvenTree.status_codes import (PurchaseOrderStatus, SalesOrderStatus, - StockStatus) +from InvenTree.status_codes import (PurchaseOrderStatus, ReturnOrderStatus, + SalesOrderStatus, StockStatus) from part.serializers import PartBriefSerializer from users.serializers import OwnerSerializer -class AbstractOrderSerializer(serializers.Serializer): - """Abstract field definitions for OrderSerializers.""" +class TotalPriceMixin(serializers.Serializer): + """Serializer mixin which provides total price fields""" total_price = InvenTreeMoneySerializer( - source='get_total_price', allow_null=True, read_only=True, ) + total_price_currency = InvenTreeCurrencySerializer(read_only=True) + + +class AbstractOrderSerializer(serializers.Serializer): + """Abstract serializer class which provides fields common to all order types""" + + # Number of line items in this order + line_items = serializers.IntegerField(read_only=True) + + # Human-readable status text (read-only) + status_text = serializers.CharField(source='get_status_display', read_only=True) + + # status field cannot be set directly + status = serializers.IntegerField(read_only=True) + + # Reference string is *required* + reference = serializers.CharField(required=True) + + # Detail for point-of-contact field + contact_detail = ContactSerializer(source='contact', many=False, read_only=True) + + # Detail for responsible field + responsible_detail = OwnerSerializer(source='responsible', read_only=True, many=False) + + # Boolean field indicating if this order is overdue (Note: must be annotated) + overdue = serializers.BooleanField(required=False, read_only=True) + + barcode_hash = serializers.CharField(read_only=True) + + def validate_reference(self, reference): + """Custom validation for the reference field""" + + self.Meta.model.validate_reference_field(reference) + return reference + + @staticmethod + def annotate_queryset(queryset): + """Add extra information to the queryset""" + + queryset = queryset.annotate( + line_items=SubqueryCount('lines') + ) + + return queryset + + @staticmethod + def order_fields(extra_fields): + """Construct a set of fields for this serializer""" + + return [ + 'pk', + 'creation_date', + 'target_date', + 'description', + 'line_items', + 'link', + 'reference', + 'responsible', + 'responsible_detail', + 'contact', + 'contact_detail', + 'status', + 'status_text', + 'notes', + 'barcode_hash', + 'overdue', + ] + extra_fields + class AbstractExtraLineSerializer(serializers.Serializer): """Abstract Serializer for a ExtraLine object.""" @@ -58,10 +127,7 @@ class AbstractExtraLineSerializer(serializers.Serializer): allow_null=True ) - price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - help_text=_('Price currency'), - ) + price_currency = InvenTreeCurrencySerializer() class AbstractExtraLineMeta: @@ -77,12 +143,34 @@ class AbstractExtraLineMeta: 'order_detail', 'price', 'price_currency', + 'link', ] -class PurchaseOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer): +class PurchaseOrderSerializer(TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer): """Serializer for a PurchaseOrder object.""" + class Meta: + """Metaclass options.""" + + model = order.models.PurchaseOrder + + fields = AbstractOrderSerializer.order_fields([ + 'issue_date', + 'complete_date', + 'supplier', + 'supplier_detail', + 'supplier_reference', + 'total_price', + 'total_price_currency', + ]) + + read_only_fields = [ + 'issue_date', + 'complete_date', + 'creation_date', + ] + def __init__(self, *args, **kwargs): """Initialization routine for the serializer""" supplier_detail = kwargs.pop('supplier_detail', False) @@ -99,14 +187,13 @@ class PurchaseOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer) - Number of lines in the PurchaseOrder - Overdue status of the PurchaseOrder """ - queryset = queryset.annotate( - line_items=SubqueryCount('lines') - ) + queryset = AbstractOrderSerializer.annotate_queryset(queryset) queryset = queryset.annotate( overdue=Case( When( - order.models.PurchaseOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), + order.models.PurchaseOrder.overdue_filter(), + then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()) ) @@ -116,58 +203,6 @@ class PurchaseOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer) supplier_detail = CompanyBriefSerializer(source='supplier', many=False, read_only=True) - line_items = serializers.IntegerField(read_only=True) - - status_text = serializers.CharField(source='get_status_display', read_only=True) - - overdue = serializers.BooleanField(required=False, read_only=True) - - reference = serializers.CharField(required=True) - - def validate_reference(self, reference): - """Custom validation for the reference field""" - - # Ensure that the reference matches the required pattern - order.models.PurchaseOrder.validate_reference_field(reference) - - return reference - - responsible_detail = OwnerSerializer(source='responsible', read_only=True, many=False) - - class Meta: - """Metaclass options.""" - - model = order.models.PurchaseOrder - - fields = [ - 'pk', - 'issue_date', - 'complete_date', - 'creation_date', - 'description', - 'line_items', - 'link', - 'overdue', - 'reference', - 'responsible', - 'responsible_detail', - 'supplier', - 'supplier_detail', - 'supplier_reference', - 'status', - 'status_text', - 'target_date', - 'notes', - 'total_price', - ] - - read_only_fields = [ - 'status' - 'issue_date', - 'complete_date', - 'creation_date', - ] - class PurchaseOrderCancelSerializer(serializers.Serializer): """Serializer for cancelling a PurchaseOrder.""" @@ -198,6 +233,11 @@ class PurchaseOrderCancelSerializer(serializers.Serializer): class PurchaseOrderCompleteSerializer(serializers.Serializer): """Serializer for completing a purchase order.""" + class Meta: + """Metaclass options.""" + + fields = [] + accept_incomplete = serializers.BooleanField( label=_('Accept Incomplete'), help_text=_('Allow order to be closed with incomplete line items'), @@ -215,11 +255,6 @@ class PurchaseOrderCompleteSerializer(serializers.Serializer): return value - class Meta: - """Metaclass options.""" - - fields = [] - def get_context_data(self): """Custom context information for this serializer.""" order = self.context['order'] @@ -250,6 +285,48 @@ class PurchaseOrderIssueSerializer(serializers.Serializer): class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): """Serializer class for the PurchaseOrderLineItem model""" + + class Meta: + """Metaclass options.""" + + model = order.models.PurchaseOrderLineItem + + fields = [ + 'pk', + 'quantity', + 'reference', + 'notes', + 'order', + 'order_detail', + 'overdue', + 'part', + 'part_detail', + 'supplier_part_detail', + 'received', + 'purchase_price', + 'purchase_price_currency', + 'destination', + 'destination_detail', + 'target_date', + 'total_price', + 'link', + ] + + def __init__(self, *args, **kwargs): + """Initialization routine for the serializer""" + part_detail = kwargs.pop('part_detail', False) + + order_detail = kwargs.pop('order_detail', False) + + super().__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + self.fields.pop('supplier_part_detail') + + if order_detail is not True: + self.fields.pop('order_detail') + @staticmethod def annotate_queryset(queryset): """Add some extra annotations to this queryset: @@ -267,7 +344,7 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): queryset = queryset.annotate( overdue=Case( When( - Q(order__status__in=PurchaseOrderStatus.OPEN) & order.models.PurchaseOrderLineItem.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()) + order.models.PurchaseOrderLineItem.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()) ), default=Value(False, output_field=BooleanField()), ) @@ -275,21 +352,6 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): return queryset - def __init__(self, *args, **kwargs): - """Initialization routine for the serializer""" - part_detail = kwargs.pop('part_detail', False) - - order_detail = kwargs.pop('order_detail', False) - - super().__init__(*args, **kwargs) - - if part_detail is not True: - self.fields.pop('part_detail') - self.fields.pop('supplier_part_detail') - - if order_detail is not True: - self.fields.pop('order_detail') - quantity = serializers.FloatField(min_value=0, required=True) def validate_quantity(self, quantity): @@ -316,16 +378,11 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): supplier_part_detail = SupplierPartSerializer(source='part', many=False, read_only=True) - purchase_price = InvenTreeMoneySerializer( - allow_null=True - ) + purchase_price = InvenTreeMoneySerializer(allow_null=True) destination_detail = stock.serializers.LocationBriefSerializer(source='get_destination', read_only=True) - purchase_price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - help_text=_('Purchase price currency'), - ) + purchase_price_currency = InvenTreeCurrencySerializer(help_text=_('Purchase price currency')) order_detail = PurchaseOrderSerializer(source='order', read_only=True, many=False) @@ -360,31 +417,6 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): return data - class Meta: - """Metaclass options.""" - - model = order.models.PurchaseOrderLineItem - - fields = [ - 'pk', - 'quantity', - 'reference', - 'notes', - 'order', - 'order_detail', - 'overdue', - 'part', - 'part_detail', - 'supplier_part_detail', - 'received', - 'purchase_price', - 'purchase_price_currency', - 'destination', - 'destination_detail', - 'target_date', - 'total_price', - ] - class PurchaseOrderExtraLineSerializer(AbstractExtraLineSerializer, InvenTreeModelSerializer): """Serializer for a PurchaseOrderExtraLine object.""" @@ -474,8 +506,8 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): ) barcode = serializers.CharField( - label=_('Barcode Hash'), - help_text=_('Unique identifier field'), + label=_('Barcode'), + help_text=_('Scanned barcode'), default='', required=False, allow_null=True, @@ -488,7 +520,9 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): if not barcode or barcode.strip() == '': return None - if stock.models.StockItem.objects.filter(barcode_hash=barcode).exists(): + barcode_hash = hash_barcode(barcode) + + if stock.models.StockItem.lookup_barcode(barcode_hash) is not None: raise ValidationError(_('Barcode is already in use')) return barcode @@ -536,7 +570,15 @@ class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): class PurchaseOrderReceiveSerializer(serializers.Serializer): - """Serializer for receiving items against a purchase order.""" + """Serializer for receiving items against a PurchaseOrder.""" + + class Meta: + """Metaclass options.""" + + fields = [ + 'items', + 'location', + ] items = PurchaseOrderLineItemReceiveSerializer(many=True) @@ -627,14 +669,6 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer): # Catch model errors and re-throw as DRF errors raise ValidationError(detail=serializers.as_serializer_error(exc)) - class Meta: - """Metaclass options.""" - - fields = [ - 'items', - 'location', - ] - class PurchaseOrderAttachmentSerializer(InvenTreeAttachmentSerializer): """Serializers for the PurchaseOrderAttachment model.""" @@ -644,26 +678,34 @@ class PurchaseOrderAttachmentSerializer(InvenTreeAttachmentSerializer): model = order.models.PurchaseOrderAttachment - fields = [ - 'pk', + fields = InvenTreeAttachmentSerializer.attachment_fields([ 'order', - 'attachment', - 'link', - 'filename', - 'comment', - 'upload_date', - 'user', - 'user_detail', - ] + ]) + + +class SalesOrderSerializer(TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer): + """Serializer for the SalesOrder model class""" + + class Meta: + """Metaclass options.""" + + model = order.models.SalesOrder + + fields = AbstractOrderSerializer.order_fields([ + 'customer', + 'customer_detail', + 'customer_reference', + 'shipment_date', + 'total_price', + 'total_price_currency', + ]) read_only_fields = [ - 'upload_date', + 'status', + 'creation_date', + 'shipment_date', ] - -class SalesOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer): - """Serializers for the SalesOrder object.""" - def __init__(self, *args, **kwargs): """Initialization routine for the serializer""" customer_detail = kwargs.pop('customer_detail', False) @@ -680,14 +722,13 @@ class SalesOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer): - Number of line items in the SalesOrder - Overdue status of the SalesOrder """ - queryset = queryset.annotate( - line_items=SubqueryCount('lines') - ) + queryset = AbstractOrderSerializer.annotate_queryset(queryset) queryset = queryset.annotate( overdue=Case( When( - order.models.SalesOrder.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()), + order.models.SalesOrder.overdue_filter(), + then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()) ) @@ -697,52 +738,18 @@ class SalesOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer): customer_detail = CompanyBriefSerializer(source='customer', many=False, read_only=True) - line_items = serializers.IntegerField(read_only=True) - status_text = serializers.CharField(source='get_status_display', read_only=True) - - overdue = serializers.BooleanField(required=False, read_only=True) - - reference = serializers.CharField(required=True) - - def validate_reference(self, reference): - """Custom validation for the reference field""" - - # Ensure that the reference matches the required pattern - order.models.SalesOrder.validate_reference_field(reference) - - return reference +class SalesOrderIssueSerializer(serializers.Serializer): + """Serializer for issuing a SalesOrder""" class Meta: - """Metaclass options.""" + """Metaclass options""" + fields = [] - model = order.models.SalesOrder - - fields = [ - 'pk', - 'creation_date', - 'customer', - 'customer_detail', - 'customer_reference', - 'description', - 'line_items', - 'link', - 'notes', - 'overdue', - 'reference', - 'responsible', - 'status', - 'status_text', - 'shipment_date', - 'target_date', - 'total_price', - ] - - read_only_fields = [ - 'status', - 'creation_date', - 'shipment_date', - ] + def save(self): + """Save the serializer to 'issue' the order""" + order = self.context['order'] + order.issue_order() class SalesOrderAllocationSerializer(InvenTreeModelSerializer): @@ -751,20 +758,28 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): This includes some fields from the related model objects. """ - part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) - order = serializers.PrimaryKeyRelatedField(source='line.order', many=False, read_only=True) - serial = serializers.CharField(source='get_serial', read_only=True) - quantity = serializers.FloatField(read_only=False) - location = serializers.PrimaryKeyRelatedField(source='item.location', many=False, read_only=True) + class Meta: + """Metaclass options.""" - # Extra detail fields - order_detail = SalesOrderSerializer(source='line.order', many=False, read_only=True) - part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True) - item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True) - location_detail = stock.serializers.LocationSerializer(source='item.location', many=False, read_only=True) - customer_detail = CompanyBriefSerializer(source='line.order.customer', many=False, read_only=True) + model = order.models.SalesOrderAllocation - shipment_date = serializers.DateField(source='shipment.shipment_date', read_only=True) + fields = [ + 'pk', + 'line', + 'customer_detail', + 'serial', + 'quantity', + 'location', + 'location_detail', + 'item', + 'item_detail', + 'order', + 'order_detail', + 'part', + 'part_detail', + 'shipment', + 'shipment_date', + ] def __init__(self, *args, **kwargs): """Initialization routine for the serializer""" @@ -791,33 +806,75 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): if not customer_detail: self.fields.pop('customer_detail') - class Meta: - """Metaclass options.""" + part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) + order = serializers.PrimaryKeyRelatedField(source='line.order', many=False, read_only=True) + serial = serializers.CharField(source='get_serial', read_only=True) + quantity = serializers.FloatField(read_only=False) + location = serializers.PrimaryKeyRelatedField(source='item.location', many=False, read_only=True) - model = order.models.SalesOrderAllocation + # Extra detail fields + order_detail = SalesOrderSerializer(source='line.order', many=False, read_only=True) + part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True) + item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True) + location_detail = stock.serializers.LocationSerializer(source='item.location', many=False, read_only=True) + customer_detail = CompanyBriefSerializer(source='line.order.customer', many=False, read_only=True) - fields = [ - 'pk', - 'line', - 'customer_detail', - 'serial', - 'quantity', - 'location', - 'location_detail', - 'item', - 'item_detail', - 'order', - 'order_detail', - 'part', - 'part_detail', - 'shipment', - 'shipment_date', - ] + shipment_date = serializers.DateField(source='shipment.shipment_date', read_only=True) class SalesOrderLineItemSerializer(InvenTreeModelSerializer): """Serializer for a SalesOrderLineItem object.""" + class Meta: + """Metaclass options.""" + + model = order.models.SalesOrderLineItem + + fields = [ + 'pk', + 'allocated', + 'allocations', + 'available_stock', + 'customer_detail', + 'quantity', + 'reference', + 'notes', + 'order', + 'order_detail', + 'overdue', + 'part', + 'part_detail', + 'sale_price', + 'sale_price_currency', + 'shipped', + 'target_date', + 'link', + ] + + def __init__(self, *args, **kwargs): + """Initializion routine for the serializer: + + - Add extra related serializer information if required + """ + part_detail = kwargs.pop('part_detail', False) + order_detail = kwargs.pop('order_detail', False) + allocations = kwargs.pop('allocations', False) + customer_detail = kwargs.pop('customer_detail', False) + + super().__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + + if order_detail is not True: + self.fields.pop('order_detail') + + if allocations is not True: + self.fields.pop('allocations') + + if customer_detail is not True: + self.fields.pop('customer_detail') + @staticmethod def annotate_queryset(queryset): """Add some extra annotations to this queryset: @@ -852,30 +909,6 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): return queryset - def __init__(self, *args, **kwargs): - """Initializion routine for the serializer: - - - Add extra related serializer information if required - """ - part_detail = kwargs.pop('part_detail', False) - order_detail = kwargs.pop('order_detail', False) - allocations = kwargs.pop('allocations', False) - customer_detail = kwargs.pop('customer_detail', False) - - super().__init__(*args, **kwargs) - - if part_detail is not True: - self.fields.pop('part_detail') - - if order_detail is not True: - self.fields.pop('order_detail') - - if allocations is not True: - self.fields.pop('allocations') - - if customer_detail is not True: - self.fields.pop('customer_detail') - customer_detail = CompanyBriefSerializer(source='order.customer', many=False, read_only=True) order_detail = SalesOrderSerializer(source='order', many=False, read_only=True) part_detail = PartBriefSerializer(source='part', many=False, read_only=True) @@ -891,48 +924,14 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): shipped = InvenTreeDecimalField(read_only=True) - sale_price = InvenTreeMoneySerializer( - allow_null=True - ) + sale_price = InvenTreeMoneySerializer(allow_null=True) - sale_price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - help_text=_('Sale price currency'), - ) - - class Meta: - """Metaclass options.""" - - model = order.models.SalesOrderLineItem - - fields = [ - 'pk', - 'allocated', - 'allocations', - 'available_stock', - 'customer_detail', - 'quantity', - 'reference', - 'notes', - 'order', - 'order_detail', - 'overdue', - 'part', - 'part_detail', - 'sale_price', - 'sale_price_currency', - 'shipped', - 'target_date', - ] + sale_price_currency = InvenTreeCurrencySerializer(help_text=_('Sale price currency')) class SalesOrderShipmentSerializer(InvenTreeModelSerializer): """Serializer for the SalesOrderShipment class.""" - allocations = SalesOrderAllocationSerializer(many=True, read_only=True, location_detail=True) - - order_detail = SalesOrderSerializer(source='order', read_only=True, many=False) - class Meta: """Metaclass options.""" @@ -952,6 +951,10 @@ class SalesOrderShipmentSerializer(InvenTreeModelSerializer): 'notes', ] + allocations = SalesOrderAllocationSerializer(many=True, read_only=True, location_detail=True) + + order_detail = SalesOrderSerializer(source='order', read_only=True, many=False) + class SalesOrderShipmentCompleteSerializer(serializers.ModelSerializer): """Serializer for completing (shipping) a SalesOrderShipment.""" @@ -1400,13 +1403,13 @@ class SalesOrderShipmentAllocationSerializer(serializers.Serializer): class SalesOrderExtraLineSerializer(AbstractExtraLineSerializer, InvenTreeModelSerializer): """Serializer for a SalesOrderExtraLine object.""" - order_detail = SalesOrderSerializer(source='order', many=False, read_only=True) - class Meta(AbstractExtraLineMeta): """Metaclass options.""" model = order.models.SalesOrderExtraLine + order_detail = SalesOrderSerializer(source='order', many=False, read_only=True) + class SalesOrderAttachmentSerializer(InvenTreeAttachmentSerializer): """Serializers for the SalesOrderAttachment model.""" @@ -1416,18 +1419,257 @@ class SalesOrderAttachmentSerializer(InvenTreeAttachmentSerializer): model = order.models.SalesOrderAttachment + fields = InvenTreeAttachmentSerializer.attachment_fields([ + 'order', + ]) + + +class ReturnOrderSerializer(AbstractOrderSerializer, InvenTreeModelSerializer): + """Serializer for the ReturnOrder model class""" + + class Meta: + """Metaclass options""" + + model = order.models.ReturnOrder + + fields = AbstractOrderSerializer.order_fields([ + 'customer', + 'customer_detail', + 'customer_reference', + ]) + + read_only_fields = [ + 'creation_date', + ] + + def __init__(self, *args, **kwargs): + """Initialization routine for the serializer""" + + customer_detail = kwargs.pop('customer_detail', False) + + super().__init__(*args, **kwargs) + + if customer_detail is not True: + self.fields.pop('customer_detail') + + @staticmethod + def annotate_queryset(queryset): + """Custom annotation for the serializer queryset""" + + queryset = AbstractOrderSerializer.annotate_queryset(queryset) + + queryset = queryset.annotate( + overdue=Case( + When( + order.models.ReturnOrder.overdue_filter(), + then=Value(True, output_field=BooleanField()), + ), + default=Value(False, output_field=BooleanField()) + ) + ) + + return queryset + + customer_detail = CompanyBriefSerializer(source='customer', many=False, read_only=True) + + +class ReturnOrderIssueSerializer(serializers.Serializer): + """Serializer for issuing a ReturnOrder""" + + class Meta: + """Metaclass options""" + fields = [] + + def save(self): + """Save the serializer to 'issue' the order""" + order = self.context['order'] + order.issue_order() + + +class ReturnOrderCancelSerializer(serializers.Serializer): + """Serializer for cancelling a ReturnOrder""" + + class Meta: + """Metaclass options""" + fields = [] + + def save(self): + """Save the serializer to 'cancel' the order""" + order = self.context['order'] + order.cancel_order() + + +class ReturnOrderCompleteSerializer(serializers.Serializer): + """Serializer for completing a ReturnOrder""" + + class Meta: + """Metaclass options""" + fields = [] + + def save(self): + """Save the serializer to 'complete' the order""" + order = self.context['order'] + order.complete_order() + + +class ReturnOrderLineItemReceiveSerializer(serializers.Serializer): + """Serializer for receiving a single line item against a ReturnOrder""" + + class Meta: + """Metaclass options""" + fields = [ + 'item', + ] + + item = serializers.PrimaryKeyRelatedField( + queryset=order.models.ReturnOrderLineItem.objects.all(), + many=False, + allow_null=False, + required=True, + label=_('Return order line item'), + ) + + def validate_line_item(self, item): + """Validation for a single line item""" + + if item.order != self.context['order']: + raise ValidationError(_("Line item does not match return order")) + + if item.received: + raise ValidationError(_("Line item has already been received")) + + return item + + +class ReturnOrderReceiveSerializer(serializers.Serializer): + """Serializer for receiving items against a ReturnOrder""" + + class Meta: + """Metaclass options""" + + fields = [ + 'items', + 'location', + ] + + items = ReturnOrderLineItemReceiveSerializer(many=True) + + location = serializers.PrimaryKeyRelatedField( + queryset=stock.models.StockLocation.objects.all(), + many=False, + allow_null=False, + required=True, + label=_('Location'), + help_text=_('Select destination location for received items'), + ) + + def validate(self, data): + """Perform data validation for this serializer""" + + order = self.context['order'] + if order.status != ReturnOrderStatus.IN_PROGRESS: + raise ValidationError(_("Items can only be received against orders which are in progress")) + + data = super().validate(data) + + items = data.get('items', []) + + if len(items) == 0: + raise ValidationError(_("Line items must be provided")) + + return data + + @transaction.atomic + def save(self): + """Saving this serializer marks the returned items as received""" + + order = self.context['order'] + request = self.context['request'] + + data = self.validated_data + items = data['items'] + location = data['location'] + + with transaction.atomic(): + for item in items: + line_item = item['item'] + order.receive_line_item( + line_item, + location, + request.user + ) + + +class ReturnOrderLineItemSerializer(InvenTreeModelSerializer): + """Serializer for a ReturnOrderLineItem object""" + + class Meta: + """Metaclass options""" + + model = order.models.ReturnOrderLineItem + fields = [ 'pk', 'order', - 'attachment', - 'filename', + 'order_detail', + 'item', + 'item_detail', + 'received_date', + 'outcome', + 'part_detail', + 'price', + 'price_currency', + 'link', + 'reference', + 'notes', + 'target_date', 'link', - 'comment', - 'upload_date', - 'user', - 'user_detail', ] - read_only_fields = [ - 'upload_date', - ] + def __init__(self, *args, **kwargs): + """Initialization routine for the serializer""" + + order_detail = kwargs.pop('order_detail', False) + item_detail = kwargs.pop('item_detail', False) + part_detail = kwargs.pop('part_detail', False) + + super().__init__(*args, **kwargs) + + if not order_detail: + self.fields.pop('order_detail') + + if not item_detail: + self.fields.pop('item_detail') + + if not part_detail: + self.fields.pop('part_detail') + + order_detail = ReturnOrderSerializer(source='order', many=False, read_only=True) + item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True) + part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True) + + price = InvenTreeMoneySerializer(allow_null=True) + price_currency = InvenTreeCurrencySerializer(help_text=_('Line price currency')) + + +class ReturnOrderExtraLineSerializer(AbstractExtraLineSerializer, InvenTreeModelSerializer): + """Serializer for a ReturnOrderExtraLine object""" + + class Meta(AbstractExtraLineMeta): + """Metaclass options""" + model = order.models.ReturnOrderExtraLine + + order_detail = ReturnOrderSerializer(source='order', many=False, read_only=True) + + +class ReturnOrderAttachmentSerializer(InvenTreeAttachmentSerializer): + """Serializer for the ReturnOrderAttachment model""" + + class Meta: + """Metaclass options""" + + model = order.models.ReturnOrderAttachment + + fields = InvenTreeAttachmentSerializer.attachment_fields([ + 'order', + ]) diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html index ff0a13f0d7..3160ade55c 100644 --- a/InvenTree/order/templates/order/order_base.html +++ b/InvenTree/order/templates/order/order_base.html @@ -7,22 +7,40 @@ {% block page_title %} {% inventree_title %} | {% trans "Purchase Order" %} -{% endblock %} +{% endblock page_title %} {% block breadcrumbs %} - + -{% endblock %} +{% endblock breadcrumbs %} {% block heading %} {% trans "Purchase Order" %}: {{ order.reference }} -{% endblock %} +{% endblock heading %} {% block actions %} {% if user.is_staff and roles.purchase_order.change %} {% url 'admin:order_purchaseorder_change' order.pk as url %} {% include "admin_button.html" with url=url %} {% endif %} +{% if barcodes %} + +
+ + +
+{% endif %}
-{% if order.status == PurchaseOrderStatus.PENDING %} - -{% elif order.status == PurchaseOrderStatus.PLACED %} +{% elif order.is_open %} {% endif %} {% endif %} @@ -82,7 +99,7 @@ src="{{ order.supplier.image.url }}" src="{% static 'img/blank_image.png' %}" {% endif %} /> -{% endblock %} +{% endblock thumbnail %} {% block details %} @@ -98,6 +115,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "Order Description" %} {{ order.description }}{% include "clip.html" %} + {% include "barcode_data.html" with instance=order %} {% trans "Order Status" %} @@ -111,7 +129,7 @@ src="{% static 'img/blank_image.png' %}" -{% endblock %} +{% endblock details %} {% block details_right %} @@ -169,7 +187,10 @@ src="{% static 'img/blank_image.png' %}" - + {% endif %} {% if order.status == PurchaseOrderStatus.COMPLETE %} @@ -179,6 +200,13 @@ src="{% static 'img/blank_image.png' %}" {% endif %} + {% if order.contact %} + + + + + + {% endif %} {% if order.responsible %} @@ -191,22 +219,21 @@ src="{% static 'img/blank_image.png' %}"
{% trans "Target Date" %}{% render_date order.target_date %} + {% render_date order.target_date %} + {% if order.is_overdue %}{% endif %} +
{% render_date order.complete_date %}{{ order.received_by }}
{% trans "Contact" %}{{ order.contact.name }}
{% trans "Total cost" %} - {% with order.get_total_price as tp %} + {% with order.total_price as tp %} {% if tp == None %} {% trans "Total cost could not be calculated" %} {% else %} - {% include "price_data.html" with price=tp %} + {% render_currency tp currency=order.supplier.currency %} {% endif %} {% endwith %}
-{% endblock %} +{% endblock details_right %} {% block js_ready %} {{ block.super }} - {% if order.status == PurchaseOrderStatus.PENDING %} $("#place-order").click(function() { @@ -222,7 +249,11 @@ $("#place-order").click(function() { {% if report_enabled %} $('#print-order-report').click(function() { - printPurchaseOrderReports([{{ order.pk }}]); + printReports({ + items: [{{ order.pk }}], + key: 'order', + url: '{% url "api-po-report-list" %}', + }); }); {% endif %} @@ -292,5 +323,33 @@ $("#export-order").click(function() { exportOrder('{% url "po-export" order.id %}'); }); +{% if barcodes %} + +$('#show-qr-code').click(function() { + showQRDialog( + '{% trans "Purchase Order QR Code" %}', + '{"purchaseorder": {{ order.pk }}}' + ); +}); -{% endblock %} +{% if roles.purchase_order.change %} +$("#barcode-link").click(function() { + linkBarcodeDialog( + { + purchaseorder: {{ order.pk }}, + }, + { + title: '{% trans "Link Barcode to Purchase Order" %}', + } + ); +}); + +$("#barcode-unlink").click(function() { + unlinkBarcode({ + purchaseorder: {{ order.pk }}, + }); +}); +{% endif %} +{% endif %} + +{% endblock js_ready %} diff --git a/InvenTree/order/templates/order/purchase_order_detail.html b/InvenTree/order/templates/order/purchase_order_detail.html index 914c97d6ab..4a2a095aa0 100644 --- a/InvenTree/order/templates/order/purchase_order_detail.html +++ b/InvenTree/order/templates/order/purchase_order_detail.html @@ -8,7 +8,7 @@ {% block sidebar %} {% include 'order/po_sidebar.html' %} -{% endblock %} +{% endblock sidebar %} {% block page_content %} {% settings_value "PURCHASEORDER_EDIT_COMPLETED_ORDERS" as allow_extra_editing %} @@ -20,16 +20,17 @@ {% include "spacer.html" %}
{% if roles.purchase_order.change %} - {% if order.is_pending or allow_extra_editing %} + {% if order.is_open or allow_extra_editing %} {% trans "Upload File" %} - {% elif order.status == PurchaseOrderStatus.PLACED %} - {% endif %} {% endif %} @@ -38,6 +39,22 @@
+ {% if roles.purchase_order.change %} + {% if order.is_open or allow_extra_editing %} + + {% endif %} + {% endif %} + {% include "filter_list.html" with id="purchase-order-lines" %}
@@ -51,7 +68,7 @@ {% include "spacer.html" %}
{% if roles.purchase_order.change %} - {% if order.is_pending or allow_extra_editing %} + {% if order.is_open or allow_extra_editing %} @@ -110,7 +127,7 @@
-{% endblock %} +{% endblock page_content %} {% block js_ready %} @@ -130,30 +147,18 @@ ); }); - enableDragAndDrop( - '#attachment-dropzone', - '{% url "api-po-attachment-list" %}', - { - data: { - order: {{ order.id }}, + onPanelLoad('order-attachments', function() { + loadAttachmentTable('{% url "api-po-attachment-list" %}', { + filters: { + order: {{ order.pk }}, }, - label: 'attachment', - success: function(data, status, xhr) { - $('#attachment-table').bootstrapTable('refresh'); + fields: { + order: { + value: {{ order.pk }}, + hidden: true, + } } - } - ); - - loadAttachmentTable('{% url "api-po-attachment-list" %}', { - filters: { - order: {{ order.pk }}, - }, - fields: { - order: { - value: {{ order.pk }}, - hidden: true, - } - } + }); }); loadStockTable($("#stock-table"), { @@ -188,7 +193,7 @@ $('#new-po-line').click(function() { {% elif order.status == PurchaseOrderStatus.PLACED %} $('#receive-selected-items').click(function() { - var items = getTableData('#po-line-table'); + let items = getTableData('#po-line-table'); receivePurchaseOrderItems( {{ order.id }}, @@ -203,59 +208,56 @@ $('#new-po-line').click(function() { {% endif %} -loadPurchaseOrderLineItemTable('#po-line-table', { - order: {{ order.pk }}, - {% if order.supplier %} - supplier: {{ order.supplier.pk }}, - {% endif %} - {% if roles.purchase_order.change %} - allow_edit: true, - {% else %} - allow_edit: false, - {% endif %} - {% if order.status == PurchaseOrderStatus.PENDING %} - pending: true, - {% endif %} - {% if order.status == PurchaseOrderStatus.PLACED and roles.purchase_order.change %} - allow_receive: true, - {% else %} - allow_receive: false, - {% endif %} -}); - -$("#new-po-extra-line").click(function() { - - var fields = extraLineFields({ +onPanelLoad('order-items', function() { + loadPurchaseOrderLineItemTable('#po-line-table', { order: {{ order.pk }}, - }); - - {% if order.supplier.currency %} - fields.price_currency.value = '{{ order.supplier.currency }}'; - {% endif %} - - constructForm('{% url "api-po-extra-line-list" %}', { - fields: fields, - method: 'POST', - title: '{% trans "Add Order Line" %}', - onSuccess: function() { - $("#po-extra-lines-table").bootstrapTable("refresh"); - }, - }); -}); - -loadPurchaseOrderExtraLineTable( - '#po-extra-lines-table', - { - order: {{ order.pk }}, - status: {{ order.status }}, - {% if order.is_pending %} - pending: true, + {% if order.supplier %} + supplier: {{ order.supplier.pk }}, {% endif %} {% if roles.purchase_order.change %} allow_edit: true, + {% else %} + allow_edit: false, {% endif %} - } -); + {% if order.status == PurchaseOrderStatus.PENDING %} + pending: true, + {% endif %} + {% if order.status == PurchaseOrderStatus.PLACED and roles.purchase_order.change %} + allow_receive: true, + {% else %} + allow_receive: false, + {% endif %} + }); + + $("#new-po-extra-line").click(function() { + + createExtraLineItem({ + order: {{ order.pk }}, + table: '#po-extra-lines-table', + url: '{% url "api-po-extra-line-list" %}', + {% if order.supplier.currency %} + currency: '{{ order.supplier.currency }}', + {% endif %} + }); + }); + + loadExtraLineTable({ + table: '#po-extra-lines-table', + order: {{ order.pk }}, + url: '{% url "api-po-extra-line-list" %}', + name: 'purchaseorderextraline', + filtertarget: '#filter-list-purchase-order-extra-lines', + {% settings_value "PURCHASEORDER_EDIT_COMPLETED_ORDERS" as allow_edit %} + {% if order.is_open or allow_edit %} + allow_edit: {% js_bool roles.purchase_order.change %}, + allow_delete: {% js_bool roles.purchase_order.delete %}, + {% else %} + allow_edit: false, + allow_delete: false, + {% endif %} + pricing: true, + }); +}); loadOrderTotal( '#poTotalPrice', diff --git a/InvenTree/order/templates/order/purchase_orders.html b/InvenTree/order/templates/order/purchase_orders.html index 7f91f01600..e60f015fa6 100644 --- a/InvenTree/order/templates/order/purchase_orders.html +++ b/InvenTree/order/templates/order/purchase_orders.html @@ -26,11 +26,6 @@
- {% if report_enabled %} - - {% endif %} {% include "filter_list.html" with id="purchaseorder" %}
@@ -53,20 +48,6 @@ {% block js_ready %} {{ block.super }} -{% if report_enabled %} -$("#order-print").click(function() { - var rows = getTableData('#purchase-order-table'); - - var orders = []; - - rows.forEach(function(row) { - orders.push(row.pk); - }); - - printPurchaseOrderReports(orders); -}) -{% endif %} - $("#po-create").click(function() { createPurchaseOrder(); }); diff --git a/InvenTree/order/templates/order/return_order_base.html b/InvenTree/order/templates/order/return_order_base.html new file mode 100644 index 0000000000..b6d1d11994 --- /dev/null +++ b/InvenTree/order/templates/order/return_order_base.html @@ -0,0 +1,285 @@ +{% extends "page_base.html" %} + +{% load i18n %} +{% load static %} +{% load inventree_extras %} +{% load status_codes %} + +{% block page_title %} +{% inventree_title %} | {% trans "Return Order" %} +{% endblock page_title %} + +{% block breadcrumbs %} + + +{% endblock breadcrumbs %} + +{% block thumbnail %} + +{% endblock thumbnail%} + +{% block heading %} +{% trans "Return Order" %} {{ order.reference }} +{% endblock heading %} + +{% block actions %} +{% if user.is_staff and roles.return_order.change %} +{% url 'admin:order_returnorder_change' order.pk as url %} +{% include "admin_button.html" with url=url %} +{% endif %} +{% if barcodes %} + +
+ + +
+{% endif %} + +
+ + +
+ +{% if roles.return_order.change %} + +
+ + + {% if order.status == ReturnOrderStatus.PENDING %} + + {% elif order.status == ReturnOrderStatus.IN_PROGRESS %} + + {% endif %} +
+{% endif %} + +{% endblock actions %} + +{% block details %} + + + + + + + + + + + + + + + {% include "barcode_data.html" with instance=order %} + + + + + + +
{% trans "Order Reference" %}{{ order.reference }}{% include "clip.html"%}
{% trans "Order Description" %}{{ order.description }}{% include "clip.html" %}
{% trans "Order Status" %} + {% return_order_status_label order.status %} + {% if order.is_overdue %} + {% trans "Overdue" %} + {% endif %} +
+ +{% endblock details %} + +{% block details_right %} + + + {% if order.customer %} + + + + + + {% endif %} + {% if order.customer_reference %} + + + + + + {% endif %} + {% if order.link %} + + + + + + {% endif %} + + + + + + {% if order.issue_date %} + + + + + + {% endif %} + {% if order.target_date %} + + + + + + {% endif %} + {% if order.contact %} + + + + + + {% endif %} + {% if order.responsible %} + + + + + + {% endif %} + + + + + + +
{% trans "Customer" %}{{ order.customer.name }}{% include "clip.html"%}
{% trans "Customer Reference" %}{{ order.customer_reference }}{% include "clip.html"%}
External Link{{ order.link }}{% include "clip.html"%}
{% trans "Created" %}{% render_date order.creation_date %}{{ order.created_by }}
{% trans "Issued" %}{% render_date order.issue_date %}
{% trans "Target Date" %} + {% render_date order.target_date %} + {% if order.is_overdue %}{% endif %} +
{% trans "Contact" %}{{ order.contact.name }}
{% trans "Responsible" %}{{ order.responsible }}
{% trans "Total Cost" %} + {% with order.total_price as tp %} + {% if tp == None %} + {% trans "Total cost could not be calculated" %} + {% else %} + {% render_currency tp currency=order.customer.currency %} + {% endif %} + {% endwith %} +
+{% endblock details_right %} + +{% block js_ready %} +{{ block.super }} + +{% if roles.return_order.change %} + +{% if order.status == ReturnOrderStatus.PENDING %} +$('#issue-order').click(function() { + issueReturnOrder({{ order.pk }}, { + reload: true, + }); +}); +{% elif order.status == ReturnOrderStatus.IN_PROGRESS %} +$('#complete-order').click(function() { + completeReturnOrder( + {{ order.pk }}, + { + reload: true, + } + ); +}) +{% endif %} + +$('#edit-order').click(function() { + editReturnOrder({{ order.pk }}, { + reload: true, + }); +}); + +{% if order.is_open %} +$('#cancel-order').click(function() { + cancelReturnOrder( + {{ order.pk }}, + { + reload: true + } + ); +}); +{% endif %} +{% endif %} + +{% if report_enabled %} +$('#print-order-report').click(function() { + printReports({ + items: [{{ order.pk }}], + key: 'order', + url: '{% url "api-return-order-report-list" %}', + }); +}); +{% endif %} + +{% if barcodes %} + +$('#show-qr-code').click(function() { + showQRDialog( + '{% trans "Return Order QR Code" %}', + '{"returnorder": {{ order.pk }}}' + ); +}); + +{% if roles.return_order.change %} +$("#barcode-link").click(function() { + linkBarcodeDialog( + { + returnorder: {{ order.pk }}, + }, + { + title: '{% trans "Link Barcode to Return Order" %}', + } + ); +}); + +$("#barcode-unlink").click(function() { + unlinkBarcode({ + returnorder: {{ order.pk }}, + }); +}); +{% endif %} +{% endif %} + + + +{% endblock js_ready %} diff --git a/InvenTree/order/templates/order/return_order_detail.html b/InvenTree/order/templates/order/return_order_detail.html new file mode 100644 index 0000000000..e57896ec41 --- /dev/null +++ b/InvenTree/order/templates/order/return_order_detail.html @@ -0,0 +1,209 @@ +{% extends "order/return_order_base.html" %} + +{% load inventree_extras %} +{% load status_codes %} +{% load i18n %} +{% load static %} + +{% block sidebar %} +{% include "order/return_order_sidebar.html" %} +{% endblock sidebar %} + +{% block page_content %} +{% settings_value "RETURNORDER_EDIT_COMPLETED_ORDERS" as allow_extra_editing %} + +
+
+
+

{% trans "Line Items" %}

+ {% include "spacer.html" %} +
+ {% if roles.return_order.add %} + {% if order.is_open or allow_extra_editing %} + + {% endif %} + {% if order.status == ReturnOrderStatus.IN_PROGRESS %} + + {% endif %} + {% endif %} +
+
+
+
+
+
+ {% include "filter_list.html" with id="returnorderlines" %} +
+
+ +
+
+
+
+

{% trans "Extra Lines" %}

+ {% include "spacer.html" %} +
+ {% if roles.return_order.add %} + {% if order.is_open or allow_extra_editing %} + + {% endif %} + {% endif %} +
+
+
+
+
+
+ {% include "filter_list.html" with id="return-order-extra-lines" %} +
+
+ +
+
+
+ +
+
+
+

{% trans "Attachments" %}

+ {% include "spacer.html" %} +
+ {% include "attachment_button.html" %} +
+
+
+
+ {% include "attachment_table.html" %} +
+
+ +
+
+
+

{% trans "Order Notes" %}

+ {% include "spacer.html" %} +
+ {% include "notes_buttons.html" %} +
+
+
+
+ +
+
+ +{% endblock page_content %} + +{% block js_ready %} +{{ block.super }} + +// Callback function when the 'details' panel is loaded +onPanelLoad('order-details', function() { + + {% if roles.return_order.add %} + + $('#receive-line-items').click(function() { + let items = getTableData('#return-order-lines-table'); + + receiveReturnOrderItems( + {{ order.pk }}, + items, + { + onSuccess: function() { + reloadBootstrapTable('#return-order-lines-table'); + } + } + ); + }); + + $('#new-return-order-line').click(function() { + createReturnOrderLineItem({ + order: {{ order.pk }}, + customer: {{ order.customer.pk }}, + onSuccess: function() { + reloadBootstrapTable('#return-order-lines-table'); + } + }); + }); + + $('#new-return-order-extra-line').click(function() { + + createExtraLineItem({ + order: {{ order.pk }}, + table: '#return-order-extra-lines-table', + url: '{% url "api-return-order-extra-line-list" %}', + {% if order.customer.currency %} + currency: '{{ order.customer.currency }}', + {% endif %} + }); + }); + + {% endif %} + + {% settings_value "RETURNORDER_EDIT_COMPLETED_ORDERS" as allow_extra_editing %} + + loadReturnOrderLineItemTable({ + table: '#return-order-lines-table', + order: {{ order.pk }}, + {% if order.status == ReturnOrderStatus.IN_PROGRESS %} + allow_receive: true, + {% endif %} + {% if order.is_open or allow_extra_editing %} + allow_edit: {% js_bool roles.return_order.change %}, + allow_delete: {% js_bool roles.return_order.delete %}, + {% endif %} + }); + + loadExtraLineTable({ + order: {{ order.pk }}, + url: '{% url "api-return-order-extra-line-list" %}', + table: "#return-order-extra-lines-table", + name: 'returnorderextralines', + filtertarget: '#filter-list-return-order-extra-lines', + {% if order.is_open or allow_extra_editing %} + allow_edit: {% js_bool roles.return_order.change %}, + allow_delete: {% js_bool roles.return_order.delete %}, + {% endif %} + }); +}); + +// Callback function when the 'notes' panel is loaded +onPanelLoad('order-notes', function() { + setupNotesField( + 'order-notes', + '{% url "api-return-order-detail" order.pk %}', + { + {% if roles.purchase_order.change %} + editable: true, + {% else %} + editable: false, + {% endif %} + } + ); +}); + +// Callback function when the 'attachments' panel is loaded +onPanelLoad('order-attachments', function() { + + loadAttachmentTable('{% url "api-return-order-attachment-list" %}', { + filters: { + order: {{ order.pk }}, + }, + fields: { + order: { + value: {{ order.pk }}, + hidden: true, + }, + } + }); +}); + +enableSidebar('returnorder'); + +{% endblock js_ready %} diff --git a/InvenTree/order/templates/order/return_order_sidebar.html b/InvenTree/order/templates/order/return_order_sidebar.html new file mode 100644 index 0000000000..a9a0519885 --- /dev/null +++ b/InvenTree/order/templates/order/return_order_sidebar.html @@ -0,0 +1,10 @@ +{% load i18n %} +{% load static %} +{% load inventree_extras %} + +{% trans "Order Details" as text %} +{% include "sidebar_item.html" with label='order-details' text=text icon="fa-info-circle" %} +{% trans "Attachments" as text %} +{% include "sidebar_item.html" with label='order-attachments' text=text icon="fa-paperclip" %} +{% trans "Notes" as text %} +{% include "sidebar_item.html" with label='order-notes' text=text icon="fa-clipboard" %} diff --git a/InvenTree/order/templates/order/return_orders.html b/InvenTree/order/templates/order/return_orders.html new file mode 100644 index 0000000000..e364214c85 --- /dev/null +++ b/InvenTree/order/templates/order/return_orders.html @@ -0,0 +1,55 @@ +{% extends "page_base.html" %} + +{% load inventree_extras %} +{% load static %} +{% load i18n %} + +{% block page_title %} +{% inventree_title %} | {% trans "Return Orders" %} +{% endblock %} + +{% block breadcrumb_list %} +{% endblock %} + +{% block heading %} +{% trans "Return Orders" %} +{% endblock %} + + +{% block actions %} +{% if roles.return_order.add %} + +{% endif %} +{% endblock actions %} + +{% block page_info %} + +
+
+
+
+ {% include "filter_list.html" with id="returnorder" %} +
+
+
+ + +
+ +
+
+ +{% endblock page_info %} + +{% block js_ready %} +{{ block.super }} + +loadReturnOrderTable('#return-order-table', {}); + +$('#return-order-create').click(function() { + createReturnOrder(); +}); + +{% endblock js_ready %} diff --git a/InvenTree/order/templates/order/sales_order_base.html b/InvenTree/order/templates/order/sales_order_base.html index b0ab15be67..a2fe28b813 100644 --- a/InvenTree/order/templates/order/sales_order_base.html +++ b/InvenTree/order/templates/order/sales_order_base.html @@ -10,7 +10,7 @@ {% endblock %} {% block breadcrumbs %} - + {% endblock %} @@ -33,6 +33,24 @@ src="{% static 'img/blank_image.png' %}" {% url 'admin:order_salesorder_change' order.pk as url %} {% include "admin_button.html" with url=url %} {% endif %} +{% if barcodes %} + +
+ + +
+{% endif %}
-
-{% if order.status == SalesOrderStatus.PENDING %} - -{% endif %} +
+ {% if order.is_pending %} + + {% elif order.status == SalesOrderStatus.IN_PROGRESS %} + {% if not order.is_completed %} + + {% endif %} + + {% endif %} +
{% endif %} {% endblock actions %} @@ -85,6 +112,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "Order Description" %} {{ order.description }}{% include "clip.html" %} + {% include "barcode_data.html" with instance=order %} {% trans "Order Status" %} @@ -162,7 +190,10 @@ src="{% static 'img/blank_image.png' %}" {% trans "Target Date" %} - {% render_date order.target_date %} + + {% render_date order.target_date %} + {% if order.is_overdue %}{% endif %} + {% endif %} {% if order.shipment_date %} @@ -177,6 +208,13 @@ src="{% static 'img/blank_image.png' %}" {% endif %} + {% if order.contact %} + + + {% trans "Contact" %} + {{ order.contact.name }} + + {% endif %} {% if order.responsible %} @@ -187,13 +225,13 @@ src="{% static 'img/blank_image.png' %}" - {% trans "Total cost" %} + {% trans "Total Cost" %} - {% with order.get_total_price as tp %} + {% with order.total_price as tp %} {% if tp == None %} {% trans "Total cost could not be calculated" %} {% else %} - {% include "price_data.html" with price=tp %} + {% render_currency tp currency=order.customer.currency %} {% endif %} {% endwith %} @@ -204,33 +242,13 @@ src="{% static 'img/blank_image.png' %}" {% block js_ready %} {{ block.super }} +{% if roles.sales_order.change %} $("#edit-order").click(function() { - - constructForm('{% url "api-so-detail" order.pk %}', { - fields: { - reference: { - icon: 'fa-hashtag', - }, - {% if order.lines.count == 0 and order.status == SalesOrderStatus.PENDING %} - customer: { - }, - {% endif %} - customer_reference: {}, - description: {}, - target_date: { - icon: 'fa-calendar-alt', - }, - link: { - icon: 'fa-link', - }, - responsible: { - icon: 'fa-user', - }, - }, - title: '{% trans "Edit Sales Order" %}', + editSalesOrder({{ order.pk }}, { reload: true, }); }); +{% endif %} $("#complete-order-shipments").click(function() { @@ -242,6 +260,15 @@ $("#complete-order-shipments").click(function() { ); }); +$('#issue-order').click(function() { + issueSalesOrder( + {{ order.pk }}, + { + reload: true + } + ); +}); + $("#cancel-order").click(function() { cancelSalesOrder( @@ -263,10 +290,43 @@ $("#complete-order").click(function() { {% if report_enabled %} $('#print-order-report').click(function() { - printSalesOrderReports([{{ order.pk }}]); + printReports({ + items: [{{ order.pk }}], + key: 'order', + url: '{% url "api-so-report-list" %}', + }); }); {% endif %} +{% if barcodes %} + +$('#show-qr-code').click(function() { + showQRDialog( + '{% trans "Sales Order QR Code" %}', + '{"salesorder": {{ order.pk }}}' + ); +}); + +{% if roles.sales_order.change %} +$("#barcode-link").click(function() { + linkBarcodeDialog( + { + salesorder: {{ order.pk }}, + }, + { + title: '{% trans "Link Barcode to Sales Order" %}', + } + ); +}); + +$("#barcode-unlink").click(function() { + unlinkBarcode({ + salesorder: {{ order.pk }}, + }); +}); +{% endif %} +{% endif %} + $('#export-order').click(function() { exportOrder('{% url "so-export" order.id %}'); }); diff --git a/InvenTree/order/templates/order/sales_order_detail.html b/InvenTree/order/templates/order/sales_order_detail.html index a3c25391f9..c25b1862d7 100644 --- a/InvenTree/order/templates/order/sales_order_detail.html +++ b/InvenTree/order/templates/order/sales_order_detail.html @@ -18,8 +18,8 @@

{% trans "Sales Order Items" %}

{% include "spacer.html" %}
- {% if roles.sales_order.change %} - {% if order.is_pending or allow_extra_editing %} + {% if roles.sales_order.add %} + {% if order.is_open or allow_extra_editing %} @@ -31,8 +31,6 @@
- {% include "expand_rows.html" with label="sales-lines" %} - {% include "collapse_rows.html" with label="sales-lines" %} {% include "filter_list.html" with id="sales-order-lines" %}
@@ -46,7 +44,7 @@ {% include "spacer.html" %}
{% if roles.sales_order.change %} - {% if order.is_pending or allow_extra_editing %} + {% if order.is_open or allow_extra_editing %} @@ -66,7 +64,7 @@
-{% if order.is_pending %} +{% if order.is_open %}
@@ -93,8 +91,6 @@ {% if roles.sales_order.change %}
- {% include "expand_rows.html" with label="pending-shipments" %} - {% include "collapse_rows.html" with label="pending-shipments" %} {% include "filter_list.html" with id="pending-shipments" %}
@@ -111,8 +107,6 @@
- {% include "expand_rows.html" with label="completed-shipments" %} - {% include "collapse_rows.html" with label="completed-shipments" %} {% include "filter_list.html" with id="completed-shipments" %}
@@ -172,7 +166,7 @@ // Callback when the "shipments" panel is first loaded onPanelLoad('order-shipments', function() { - {% if order.is_pending %} + {% if order.is_open %} loadSalesOrderShipmentTable('#pending-shipments-table', { order: {{ order.pk }}, shipped: false, @@ -215,30 +209,19 @@ ); }); - enableDragAndDrop( - '#attachment-dropzone', - '{% url "api-so-attachment-list" %}', - { - data: { - order: {{ order.id }}, - }, - label: 'attachment', - success: function(data, status, xhr) { - reloadAttachmentTable(); - } - } - ); + onPanelLoad('order-attachments', function() { - loadAttachmentTable('{% url "api-so-attachment-list" %}', { - filters: { - order: {{ order.pk }}, - }, - fields: { - order: { - value: {{ order.pk }}, - hidden: true, + loadAttachmentTable('{% url "api-so-attachment-list" %}', { + filters: { + order: {{ order.pk }}, }, - } + fields: { + order: { + value: {{ order.pk }}, + hidden: true, + }, + } + }); }); loadBuildTable($("#builds-table"), { @@ -248,60 +231,74 @@ }, }); - $("#new-so-line").click(function() { - createSalesOrderLineItem({ - order: {{ order.pk }}, - onSuccess: function() { - $("#so-lines-table").bootstrapTable("refresh"); + onPanelLoad('order-items', function() { + + $("#new-so-line").click(function() { + createSalesOrderLineItem({ + order: {{ order.pk }}, + onSuccess: function() { + $("#so-lines-table").bootstrapTable('refresh'); + } + }); + + // Create a new SalesOrderLine item + var fields = soLineItemFields({ + order: {{ order.pk }}, + }); + }); + + loadSalesOrderLineItemTable( + '#so-lines-table', + { + order: {{ order.pk }}, + reference: '{{ order.reference }}', + status: {{ order.status }}, + open: {% js_bool order.is_open %}, + {% if roles.sales_order.change %} + {% settings_value "SALESORDER_EDIT_COMPLETED_ORDERS" as allow_edit %} + {% if allow_edit or order.is_open %} + allow_edit: true, + {% endif %} + {% if order.status == SalesOrderStatus.IN_PROGRESS %} + allow_ship: true, + {% endif %} + {% endif %} + {% if roles.sales_order.delete %} + allow_delete: true, + {% endif %} } + ); + + $("#new-so-extra-line").click(function() { + + createExtraLineItem({ + order: {{ order.pk }}, + table: '#so-extra-lines-table', + url: '{% url "api-so-extra-line-list" %}', + {% if order.customer.currency %} + currency: '{{ order.customer.currency }}', + {% endif %} + }); }); - // Create a new SalesOrderLine item - var fields = soLineItemFields({ + loadExtraLineTable({ order: {{ order.pk }}, + table: '#so-extra-lines-table', + url: '{% url "api-so-extra-line-list" %}', + name: 'salesorderextraline', + filtertarget: '#filter-list-sales-order-extra-lines', + {% settings_value "SALESORDER_EDIT_COMPLETED_ORDERS" as allow_edit %} + {% if order.is_open or allow_edit %} + allow_edit: {% js_bool roles.sales_order.change %}, + allow_delete: {% js_bool roles.sales_order.delete %}, + {% else %} + allow_edit: false, + allow_delete: false, + {% endif %} + pricing: true, }); }); - loadSalesOrderLineItemTable( - '#so-lines-table', - { - order: {{ order.pk }}, - reference: '{{ order.reference }}', - status: {{ order.status }}, - {% if roles.sales_order.change %} - allow_edit: true, - {% endif %} - {% if order.is_pending %} - pending: true, - {% endif %} - } - ); - - $("#new-so-extra-line").click(function() { - - var fields = extraLineFields({ - order: {{ order.pk }}, - }); - - constructForm('{% url "api-so-extra-line-list" %}', { - fields: fields, - method: 'POST', - title: '{% trans "Add Extra Line" %}', - onSuccess: function() { - $("#so-extra-lines-table").bootstrapTable("refresh"); - }, - }); - }); - - loadSalesOrderExtraLineTable( - '#so-extra-lines-table', - { - order: {{ order.pk }}, - status: {{ order.status }}, - {% if roles.sales_order.change %}allow_edit: true,{% endif %} - {% if order.is_pending %}pending: true,{% endif %} - } - ); loadOrderTotal( '#soTotalPrice', diff --git a/InvenTree/order/templates/order/sales_orders.html b/InvenTree/order/templates/order/sales_orders.html index 9b85df95b7..99e53f1a0e 100644 --- a/InvenTree/order/templates/order/sales_orders.html +++ b/InvenTree/order/templates/order/sales_orders.html @@ -29,11 +29,6 @@
- {% if report_enabled %} - - {% endif %} {% include "filter_list.html" with id="salesorder" %}
@@ -54,20 +49,6 @@ loadSalesOrderTable("#sales-order-table", { url: "{% url 'api-so-list' %}", }); -{% if report_enabled %} -$("#order-print").click(function() { - var rows = getTableData('#sales-order-table'); - - var orders = []; - - rows.forEach(function(row) { - orders.push(row.pk); - }); - - printSalesOrderReports(orders); -}) -{% endif %} - $("#so-create").click(function() { createSalesOrder(); }); diff --git a/InvenTree/order/templates/order/so_sidebar.html b/InvenTree/order/templates/order/so_sidebar.html index c43e0537c5..18a421d68f 100644 --- a/InvenTree/order/templates/order/so_sidebar.html +++ b/InvenTree/order/templates/order/so_sidebar.html @@ -4,7 +4,7 @@ {% trans "Line Items" as text %} {% include "sidebar_item.html" with label='order-items' text=text icon="fa-list-ol" %} -{% if order.is_pending %} +{% if order.is_open %} {% trans "Pending Shipments" as text %} {% include "sidebar_item.html" with label='order-shipments' text=text icon="fa-truck-loading" %} {% endif %} diff --git a/InvenTree/order/test_api.py b/InvenTree/order/test_api.py index 4aa3f14b98..7b990c9639 100644 --- a/InvenTree/order/test_api.py +++ b/InvenTree/order/test_api.py @@ -5,14 +5,21 @@ import io from datetime import datetime, timedelta from django.core.exceptions import ValidationError +from django.db import connection +from django.test.utils import CaptureQueriesContext from django.urls import reverse +from djmoney.money import Money from icalendar import Calendar from rest_framework import status import order.models as models +from common.settings import currency_codes +from company.models import Company from InvenTree.api_tester import InvenTreeAPITestCase -from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus +from InvenTree.status_codes import (PurchaseOrderStatus, ReturnOrderLineStatus, + ReturnOrderStatus, SalesOrderStatus, + StockStatus) from part.models import Part from stock.models import StockItem @@ -91,6 +98,65 @@ class PurchaseOrderTest(OrderTest): self.filter({'supplier_part': 3}, 2) self.filter({'supplier_part': 4}, 0) + def test_total_price(self): + """Unit tests for the 'total_price' field""" + + # Ensure we have exchange rate data + self.generate_exchange_rates() + + currencies = currency_codes() + n = len(currencies) + + idx = 0 + + new_orders = [] + + # Let's generate some more orders + for supplier in Company.objects.filter(is_supplier=True): + for _idx in range(10): + new_orders.append( + models.PurchaseOrder( + supplier=supplier, + reference=f'PO-{idx + 100}' + ) + ) + + idx += 1 + + models.PurchaseOrder.objects.bulk_create(new_orders) + + idx = 0 + + # Create some purchase order line items + lines = [] + + for po in models.PurchaseOrder.objects.all(): + for sp in po.supplier.supplied_parts.all(): + lines.append( + models.PurchaseOrderLineItem( + order=po, + part=sp, + quantity=idx + 1, + purchase_price=Money((idx + 1) / 10, currencies[idx % n]), + ) + ) + + idx += 1 + + models.PurchaseOrderLineItem.objects.bulk_create(lines) + + # List all purchase orders + for limit in [1, 5, 10, 100]: + with CaptureQueriesContext(connection) as ctx: + response = self.get(self.LIST_URL, data={'limit': limit}, expected_code=200) + + # Total database queries must be below 15, independent of the number of results + self.assertLess(len(ctx), 15) + + for result in response.data['results']: + self.assertIn('total_price', result) + self.assertIn('total_price_currency', result) + def test_overdue(self): """Test "overdue" status.""" self.filter({'overdue': True}, 0) @@ -539,6 +605,26 @@ class PurchaseOrderLineItemTest(OrderTest): self.filter({'has_pricing': 1}, 0) self.filter({'has_pricing': 0}, 5) + def test_po_line_bulk_delete(self): + """Test that we can bulk delete multiple PurchaseOrderLineItems via the API.""" + n = models.PurchaseOrderLineItem.objects.count() + + self.assignRole('purchase_order.delete') + + url = reverse('api-po-line-list') + + # Try to delete a set of line items via their IDs + self.delete( + url, + { + 'items': [1, 2], + }, + expected_code=204, + ) + + # We should have 2 less PurchaseOrderLineItems after deletign them + self.assertEqual(models.PurchaseOrderLineItem.objects.count(), n - 2) + class PurchaseOrderDownloadTest(OrderTest): """Unit tests for downloading PurchaseOrder data via the API endpoint.""" @@ -751,8 +837,7 @@ class PurchaseOrderReceiveTest(OrderTest): """ # Set stock item barcode item = StockItem.objects.get(pk=1) - item.barcode_hash = 'MY-BARCODE-HASH' - item.save() + item.assign_barcode(barcode_data='MY-BARCODE-HASH') response = self.post( self.url, @@ -870,8 +955,8 @@ class PurchaseOrderReceiveTest(OrderTest): self.assertEqual(stock_2.last().location.pk, 2) # Barcodes should have been assigned to the stock items - self.assertTrue(StockItem.objects.filter(barcode_hash='MY-UNIQUE-BARCODE-123').exists()) - self.assertTrue(StockItem.objects.filter(barcode_hash='MY-UNIQUE-BARCODE-456').exists()) + self.assertTrue(StockItem.objects.filter(barcode_data='MY-UNIQUE-BARCODE-123').exists()) + self.assertTrue(StockItem.objects.filter(barcode_data='MY-UNIQUE-BARCODE-456').exists()) def test_batch_code(self): """Test that we can supply a 'batch code' when receiving items.""" @@ -886,12 +971,12 @@ class PurchaseOrderReceiveTest(OrderTest): { 'line_item': 1, 'quantity': 10, - 'batch_code': 'abc-123', + 'batch_code': 'B-abc-123', }, { 'line_item': 2, 'quantity': 10, - 'batch_code': 'xyz-789', + 'batch_code': 'B-xyz-789', } ], 'location': 1, @@ -911,8 +996,8 @@ class PurchaseOrderReceiveTest(OrderTest): item_1 = StockItem.objects.filter(supplier_part=line_1.part).first() item_2 = StockItem.objects.filter(supplier_part=line_2.part).first() - self.assertEqual(item_1.batch, 'abc-123') - self.assertEqual(item_2.batch, 'xyz-789') + self.assertEqual(item_1.batch, 'B-abc-123') + self.assertEqual(item_2.batch, 'B-xyz-789') def test_serial_numbers(self): """Test that we can supply a 'serial number' when receiving items.""" @@ -927,13 +1012,13 @@ class PurchaseOrderReceiveTest(OrderTest): { 'line_item': 1, 'quantity': 10, - 'batch_code': 'abc-123', + 'batch_code': 'B-abc-123', 'serial_numbers': '100+', }, { 'line_item': 2, 'quantity': 10, - 'batch_code': 'xyz-789', + 'batch_code': 'B-xyz-789', } ], 'location': 1, @@ -958,7 +1043,7 @@ class PurchaseOrderReceiveTest(OrderTest): item = StockItem.objects.get(serial_int=i) self.assertEqual(item.serial, str(i)) self.assertEqual(item.quantity, 1) - self.assertEqual(item.batch, 'abc-123') + self.assertEqual(item.batch, 'B-abc-123') # A single stock item (quantity 10) created for the second line item items = StockItem.objects.filter(supplier_part=line_2.part) @@ -967,7 +1052,7 @@ class PurchaseOrderReceiveTest(OrderTest): item = items.first() self.assertEqual(item.quantity, 10) - self.assertEqual(item.batch, 'xyz-789') + self.assertEqual(item.batch, 'B-xyz-789') class SalesOrderTest(OrderTest): @@ -1001,6 +1086,79 @@ class SalesOrderTest(OrderTest): self.filter({'assigned_to_me': 1}, 0) self.filter({'assigned_to_me': 0}, 5) + def test_total_price(self): + """Unit tests for the 'total_price' field""" + + # Ensure we have exchange rate data + self.generate_exchange_rates() + + currencies = currency_codes() + n = len(currencies) + + idx = 0 + new_orders = [] + + # Generate some new SalesOrders + for customer in Company.objects.filter(is_customer=True): + for _idx in range(10): + new_orders.append( + models.SalesOrder( + customer=customer, + reference=f'SO-{idx + 100}', + ) + ) + + idx += 1 + + models.SalesOrder.objects.bulk_create(new_orders) + + idx = 0 + + # Create some new SalesOrderLineItem objects + + lines = [] + extra_lines = [] + + for so in models.SalesOrder.objects.all(): + for p in Part.objects.filter(salable=True): + lines.append( + models.SalesOrderLineItem( + order=so, + part=p, + quantity=idx + 1, + sale_price=Money((idx + 1) / 5, currencies[idx % n]) + ) + ) + + idx += 1 + + # Create some extra lines against this order + for ii in range(3): + extra_lines.append( + models.SalesOrderExtraLine( + order=so, + quantity=(idx + 2) % 10, + price=Money(10, 'CAD'), + ) + ) + + models.SalesOrderLineItem.objects.bulk_create(lines) + models.SalesOrderExtraLine.objects.bulk_create(extra_lines) + + # List all SalesOrder objects and count queries + for limit in [1, 5, 10, 100]: + with CaptureQueriesContext(connection) as ctx: + response = self.get(self.LIST_URL, data={'limit': limit}, expected_code=200) + + # Total database queries must be less than 15 + self.assertLess(len(ctx), 15) + + n = len(response.data['results']) + + for result in response.data['results']: + self.assertIn('total_price', result) + self.assertIn('total_price_currency', result) + def test_overdue(self): """Test "overdue" status.""" self.filter({'overdue': True}, 0) @@ -1251,25 +1409,33 @@ class SalesOrderLineItemTest(OrderTest): LIST_URL = reverse('api-so-line-list') - def setUp(self): + @classmethod + def setUpTestData(cls): """Init routine for this unit test class""" - super().setUp() + super().setUpTestData() # List of salable parts parts = Part.objects.filter(salable=True) + lines = [] + # Create a bunch of SalesOrderLineItems for each order for idx, so in enumerate(models.SalesOrder.objects.all()): for part in parts: - models.SalesOrderLineItem.objects.create( - order=so, - part=part, - quantity=(idx + 1) * 5, - reference=f"Order {so.reference} - line {idx}", + lines.append( + models.SalesOrderLineItem( + order=so, + part=part, + quantity=(idx + 1) * 5, + reference=f"Order {so.reference} - line {idx}", + ) ) - self.url = reverse('api-so-line-list') + # Bulk create + models.SalesOrderLineItem.objects.bulk_create(lines) + + cls.url = reverse('api-so-line-list') def test_so_line_list(self): """Test list endpoint""" @@ -1300,7 +1466,7 @@ class SalesOrderLineItemTest(OrderTest): n_parts = Part.objects.filter(salable=True).count() # List by part - for part in Part.objects.filter(salable=True): + for part in Part.objects.filter(salable=True)[:3]: response = self.get( self.url, { @@ -1312,7 +1478,7 @@ class SalesOrderLineItemTest(OrderTest): self.assertEqual(response.data['count'], n_orders) # List by order - for order in models.SalesOrder.objects.all(): + for order in models.SalesOrder.objects.all()[:3]: response = self.get( self.url, { @@ -1637,3 +1803,286 @@ class SalesOrderAllocateTest(OrderTest): response = self.get(url, expected_code=200) self.assertEqual(len(response.data), 1 + 3 * models.SalesOrder.objects.count()) + + +class ReturnOrderTests(InvenTreeAPITestCase): + """Unit tests for ReturnOrder API endpoints""" + + fixtures = [ + 'category', + 'company', + 'return_order', + 'part', + 'location', + 'supplier_part', + 'stock', + ] + + def test_options(self): + """Test the OPTIONS endpoint""" + + self.assignRole('return_order.add') + data = self.options(reverse('api-return-order-list'), expected_code=200).data + + self.assertEqual(data['name'], 'Return Order List') + + # Some checks on the 'reference' field + post = data['actions']['POST'] + reference = post['reference'] + + self.assertEqual(reference['default'], 'RMA-0007') + self.assertEqual(reference['label'], 'Reference') + self.assertEqual(reference['help_text'], 'Return Order reference') + self.assertEqual(reference['required'], True) + self.assertEqual(reference['type'], 'string') + + def test_list(self): + """Tests for the list endpoint""" + + url = reverse('api-return-order-list') + + response = self.get(url, expected_code=200) + + self.assertEqual(len(response.data), 6) + + # Paginated query + data = self.get( + url, + { + 'limit': 1, + 'ordering': 'reference', + 'customer_detail': True, + }, + expected_code=200 + ).data + + self.assertEqual(data['count'], 6) + self.assertEqual(len(data['results']), 1) + result = data['results'][0] + self.assertEqual(result['reference'], 'RMA-001') + self.assertEqual(result['customer_detail']['name'], 'A customer') + + # Reverse ordering + data = self.get( + url, + { + 'ordering': '-reference', + }, + expected_code=200 + ).data + + self.assertEqual(data[0]['reference'], 'RMA-006') + + # Filter by customer + for cmp_id in [4, 5]: + data = self.get( + url, + { + 'customer': cmp_id, + }, + expected_code=200 + ).data + + self.assertEqual(len(data), 3) + + for result in data: + self.assertEqual(result['customer'], cmp_id) + + # Filter by status + data = self.get( + url, + { + 'status': 20, + }, + expected_code=200 + ).data + + self.assertEqual(len(data), 2) + + for result in data: + self.assertEqual(result['status'], 20) + + def test_create(self): + """Test creation of ReturnOrder via the API""" + + url = reverse('api-return-order-list') + + # Do not have required permissions yet + self.post( + url, + { + 'customer': 1, + 'description': 'a return order', + }, + expected_code=403 + ) + + self.assignRole('return_order.add') + + data = self.post( + url, + { + 'customer': 4, + 'customer_reference': 'cr', + 'description': 'a return order', + }, + expected_code=201 + ).data + + # Reference automatically generated + self.assertEqual(data['reference'], 'RMA-0007') + self.assertEqual(data['customer_reference'], 'cr') + + def test_update(self): + """Test that we can update a ReturnOrder via the API""" + + url = reverse('api-return-order-detail', kwargs={'pk': 1}) + + # Test detail endpoint + data = self.get(url, expected_code=200).data + + self.assertEqual(data['reference'], 'RMA-001') + + # Attempt to update, incorrect permissions + self.patch( + url, + { + 'customer_reference': 'My customer reference', + }, + expected_code=403 + ) + + self.assignRole('return_order.change') + + self.patch( + url, + { + 'customer_reference': 'customer ref', + }, + expected_code=200 + ) + + rma = models.ReturnOrder.objects.get(pk=1) + self.assertEqual(rma.customer_reference, 'customer ref') + + def test_ro_issue(self): + """Test the 'issue' order for a ReturnOrder""" + + order = models.ReturnOrder.objects.get(pk=1) + self.assertEqual(order.status, ReturnOrderStatus.PENDING) + self.assertIsNone(order.issue_date) + + url = reverse('api-return-order-issue', kwargs={'pk': 1}) + + # POST without required permissions + self.post(url, expected_code=403) + + self.assignRole('return_order.add') + + self.post(url, expected_code=201) + order.refresh_from_db() + self.assertEqual(order.status, ReturnOrderStatus.IN_PROGRESS) + self.assertIsNotNone(order.issue_date) + + def test_receive(self): + """Test that we can receive items against a ReturnOrder""" + + customer = Company.objects.get(pk=4) + + # Create an order + rma = models.ReturnOrder.objects.create( + customer=customer, + description='A return order', + ) + + self.assertEqual(rma.reference, 'RMA-0007') + + # Create some line items + part = Part.objects.get(pk=25) + for idx in range(3): + stock_item = StockItem.objects.create( + part=part, customer=customer, + quantity=1, serial=idx + ) + + line_item = models.ReturnOrderLineItem.objects.create( + order=rma, + item=stock_item, + ) + + self.assertEqual(line_item.outcome, ReturnOrderLineStatus.PENDING) + self.assertIsNone(line_item.received_date) + self.assertFalse(line_item.received) + + self.assertEqual(rma.lines.count(), 3) + + def receive(items, location=None, expected_code=400): + """Helper function to receive items against this ReturnOrder""" + url = reverse('api-return-order-receive', kwargs={'pk': rma.pk}) + + response = self.post( + url, + { + 'items': items, + 'location': location, + }, + expected_code=expected_code + ) + + return response.data + + # Receive without required permissions + receive([], expected_code=403) + + self.assignRole('return_order.add') + + # Receive, without any location + data = receive([], expected_code=400) + self.assertIn('This field may not be null', str(data['location'])) + + # Receive, with incorrect order code + data = receive([], 1, expected_code=400) + self.assertIn('Items can only be received against orders which are in progress', str(data)) + + # Issue the order (via the API) + self.assertIsNone(rma.issue_date) + self.post( + reverse("api-return-order-issue", kwargs={"pk": rma.pk}), + expected_code=201, + ) + + rma.refresh_from_db() + self.assertIsNotNone(rma.issue_date) + self.assertEqual(rma.status, ReturnOrderStatus.IN_PROGRESS) + + # Receive, without any items + data = receive([], 1, expected_code=400) + self.assertIn('Line items must be provided', str(data)) + + # Get a reference to one of the stock items + stock_item = rma.lines.first().item + + n_tracking = stock_item.tracking_info.count() + + # Receive items successfully + data = receive( + [{'item': line.pk} for line in rma.lines.all()], + 1, + expected_code=201 + ) + + # Check that all line items have been received + for line in rma.lines.all(): + self.assertTrue(line.received) + self.assertIsNotNone(line.received_date) + + # A single tracking entry should have been added to the item + self.assertEqual(stock_item.tracking_info.count(), n_tracking + 1) + + tracking_entry = stock_item.tracking_info.last() + deltas = tracking_entry.deltas + + self.assertEqual(deltas['status'], StockStatus.QUARANTINED) + self.assertEqual(deltas['customer'], customer.pk) + self.assertEqual(deltas['location'], 1) + self.assertEqual(deltas['returnorder'], rma.pk) diff --git a/InvenTree/order/test_sales_order.py b/InvenTree/order/test_sales_order.py index 98db41ff42..2a42abc08c 100644 --- a/InvenTree/order/test_sales_order.py +++ b/InvenTree/order/test_sales_order.py @@ -11,7 +11,8 @@ import order.tasks from common.models import InvenTreeSetting, NotificationMessage from company.models import Company from InvenTree import status_codes as status -from order.models import (SalesOrder, SalesOrderAllocation, SalesOrderLineItem, +from order.models import (SalesOrder, SalesOrderAllocation, + SalesOrderExtraLine, SalesOrderLineItem, SalesOrderShipment) from part.models import Part from stock.models import StockItem @@ -25,33 +26,37 @@ class SalesOrderTest(TestCase): 'users', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Initial setup for this set of unit tests""" # Create a Company to ship the goods to - self.customer = Company.objects.create(name="ABC Co", description="My customer", is_customer=True) + cls.customer = Company.objects.create(name="ABC Co", description="My customer", is_customer=True) # Create a Part to ship - self.part = Part.objects.create(name='Spanner', salable=True, description='A spanner that I sell') + cls.part = Part.objects.create(name='Spanner', salable=True, description='A spanner that I sell') # Create some stock! - self.Sa = StockItem.objects.create(part=self.part, quantity=100) - self.Sb = StockItem.objects.create(part=self.part, quantity=200) + cls.Sa = StockItem.objects.create(part=cls.part, quantity=100) + cls.Sb = StockItem.objects.create(part=cls.part, quantity=200) # Create a SalesOrder to ship against - self.order = SalesOrder.objects.create( - customer=self.customer, + cls.order = SalesOrder.objects.create( + customer=cls.customer, reference='SO-1234', customer_reference='ABC 55555' ) # Create a Shipment against this SalesOrder - self.shipment = SalesOrderShipment.objects.create( - order=self.order, + cls.shipment = SalesOrderShipment.objects.create( + order=cls.order, reference='SO-001', ) # Create a line item - self.line = SalesOrderLineItem.objects.create(quantity=50, order=self.order, part=self.part) + cls.line = SalesOrderLineItem.objects.create(quantity=50, order=cls.order, part=cls.part) + + # Create an extra line + cls.extraline = SalesOrderExtraLine.objects.create(quantity=1, order=cls.order, reference="Extra line") def test_so_reference(self): """Unit tests for sales order generation""" @@ -292,3 +297,22 @@ class SalesOrderTest(TestCase): # However *no* notification should have been generated for the creating user self.assertFalse(messages.filter(user__pk=3).exists()) + + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [SalesOrder, SalesOrderLineItem, SalesOrderExtraLine, SalesOrderShipment]: + p = model.objects.first() + + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) diff --git a/InvenTree/order/test_views.py b/InvenTree/order/test_views.py index cadd2914ad..d878cbc604 100644 --- a/InvenTree/order/test_views.py +++ b/InvenTree/order/test_views.py @@ -16,6 +16,8 @@ class OrderViewTestCase(InvenTreeTestCase): 'supplier_part', 'stock', 'order', + 'sales_order', + 'return_order', ] roles = [ @@ -25,14 +27,17 @@ class OrderViewTestCase(InvenTreeTestCase): 'sales_order.change', 'sales_order.add', 'sales_order.delete', + 'return_order.change', + 'return_order.add', + 'return_order.delete', ] -class OrderListTest(OrderViewTestCase): +class PurchaseOrderListTest(OrderViewTestCase): """Unit tests for the PurchaseOrder index page""" def test_order_list(self): """Tests for the PurchaseOrder index page""" - response = self.client.get(reverse('po-index')) + response = self.client.get(reverse('purchase-order-index')) self.assertEqual(response.status_code, 200) @@ -53,3 +58,31 @@ class PurchaseOrderTests(OrderViewTestCase): # Response should be streaming-content (file download) self.assertIn('streaming_content', dir(response)) + + +class SalesOrderViews(OrderViewTestCase): + """Unit tests for the SalesOrder pages""" + + def test_index(self): + """Test the SalesOrder index page""" + response = self.client.get(reverse('sales-order-index')) + self.assertEqual(response.status_code, 200) + + def test_detail(self): + """Test SalesOrder detail view""" + response = self.client.get(reverse('so-detail', args=(1,))) + self.assertEqual(response.status_code, 200) + + +class ReturnOrderVIews(OrderViewTestCase): + """Unit tests for the ReturnOrder pages""" + + def test_index(self): + """Test the ReturnOrder index page""" + response = self.client.get(reverse('return-order-index')) + self.assertEqual(response.status_code, 200) + + def test_detail(self): + """Test ReturnOrder detail view""" + response = self.client.get(reverse('return-order-detail', args=(1,))) + self.assertEqual(response.status_code, 200) diff --git a/InvenTree/order/tests.py b/InvenTree/order/tests.py index 4a758c3d6e..b0ed86418b 100644 --- a/InvenTree/order/tests.py +++ b/InvenTree/order/tests.py @@ -8,15 +8,18 @@ from django.contrib.auth import get_user_model from django.contrib.auth.models import Group from django.test import TestCase +from djmoney.money import Money + import common.models import order.tasks from company.models import Company, SupplierPart from InvenTree.status_codes import PurchaseOrderStatus from part.models import Part -from stock.models import StockLocation +from stock.models import StockItem, StockLocation from users.models import Owner -from .models import PurchaseOrder, PurchaseOrderLineItem +from .models import (PurchaseOrder, PurchaseOrderExtraLine, + PurchaseOrderLineItem) class OrderTest(TestCase): @@ -255,7 +258,8 @@ class OrderTest(TestCase): line_1 = PurchaseOrderLineItem.objects.create( order=po, part=sp_1, - quantity=3 + quantity=3, + purchase_price=Money(1000, 'USD'), # "Unit price" should be $100USD ) # 13 x 0.1 = 1.3 @@ -263,6 +267,7 @@ class OrderTest(TestCase): order=po, part=sp_2, quantity=13, + purchase_price=Money(10, 'USD'), # "Unit price" should be $100USD ) po.place_order() @@ -299,6 +304,23 @@ class OrderTest(TestCase): round(in_stock + Decimal(10.5), 1) ) + # Check that the unit purchase price value has been updated correctly + si = StockItem.objects.filter(supplier_part=sp_1) + self.assertEqual(si.count(), 1) + + # Ensure that received quantity and unit purchase price data are correct + si = si.first() + self.assertEqual(si.quantity, 10) + self.assertEqual(si.purchase_price, Money(100, 'USD')) + + si = StockItem.objects.filter(supplier_part=sp_2) + self.assertEqual(si.count(), 1) + + # Ensure that received quantity and unit purchase price data are correct + si = si.first() + self.assertEqual(si.quantity, 0.5) + self.assertEqual(si.purchase_price, Money(100, 'USD')) + def test_overdue_notification(self): """Test overdue purchase order notification @@ -363,3 +385,21 @@ class OrderTest(TestCase): # However *no* notification should have been generated for the creating user self.assertFalse(messages.filter(user__pk=3).exists()) + + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [PurchaseOrder, PurchaseOrderLineItem, PurchaseOrderExtraLine]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) diff --git a/InvenTree/order/urls.py b/InvenTree/order/urls.py index 278914bd75..7305bf8543 100644 --- a/InvenTree/order/urls.py +++ b/InvenTree/order/urls.py @@ -4,7 +4,7 @@ - Detail view of Purchase Orders """ -from django.urls import include, re_path +from django.urls import include, path, re_path from . import views @@ -21,10 +21,10 @@ purchase_order_urls = [ re_path(r'^pricing/', views.LineItemPricing.as_view(), name='line-pricing'), # Display detail view for a single purchase order - re_path(r'^(?P\d+)/', include(purchase_order_detail_urls)), + path(r'/', include(purchase_order_detail_urls)), # Display complete list of purchase orders - re_path(r'^.*$', views.PurchaseOrderIndex.as_view(), name='po-index'), + re_path(r'^.*$', views.PurchaseOrderIndex.as_view(), name='purchase-order-index'), ] sales_order_detail_urls = [ @@ -35,13 +35,23 @@ sales_order_detail_urls = [ sales_order_urls = [ # Display detail view for a single SalesOrder - re_path(r'^(?P\d+)/', include(sales_order_detail_urls)), + path(r'/', include(sales_order_detail_urls)), # Display list of all sales orders - re_path(r'^.*$', views.SalesOrderIndex.as_view(), name='so-index'), + re_path(r'^.*$', views.SalesOrderIndex.as_view(), name='sales-order-index'), ] + +return_order_urls = [ + path(r'/', views.ReturnOrderDetail.as_view(), name='return-order-detail'), + + # Display list of all return orders + re_path(r'^.*$', views.ReturnOrderIndex.as_view(), name='return-order-index'), +] + + order_urls = [ re_path(r'^purchase-order/', include(purchase_order_urls)), re_path(r'^sales-order/', include(sales_order_urls)), + re_path(r'^return-order/', include(return_order_urls)), ] diff --git a/InvenTree/order/validators.py b/InvenTree/order/validators.py index 3ca3a58940..ee9c832e05 100644 --- a/InvenTree/order/validators.py +++ b/InvenTree/order/validators.py @@ -17,6 +17,14 @@ def generate_next_purchase_order_reference(): return PurchaseOrder.generate_reference() +def generate_next_return_order_reference(): + """Generate the next available ReturnOrder reference""" + + from order.models import ReturnOrder + + return ReturnOrder.generate_reference() + + def validate_sales_order_reference_pattern(pattern): """Validate the SalesOrder reference 'pattern' setting""" @@ -33,6 +41,14 @@ def validate_purchase_order_reference_pattern(pattern): PurchaseOrder.validate_reference_pattern(pattern) +def validate_return_order_reference_pattern(pattern): + """Validate the ReturnOrder reference 'pattern' setting""" + + from order.models import ReturnOrder + + ReturnOrder.validate_reference_pattern(pattern) + + def validate_sales_order_reference(value): """Validate that the SalesOrder reference field matches the required pattern""" @@ -47,3 +63,11 @@ def validate_purchase_order_reference(value): from order.models import PurchaseOrder PurchaseOrder.validate_reference_field(value) + + +def validate_return_order_reference(value): + """Validate that the ReturnOrder reference field matches the required pattern""" + + from order.models import ReturnOrder + + ReturnOrder.validate_reference_field(value) diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index b3909971e0..3d319a8d28 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -24,8 +24,8 @@ from plugin.views import InvenTreePluginViewMixin from . import forms as order_forms from .admin import PurchaseOrderLineItemResource, SalesOrderLineItemResource -from .models import (PurchaseOrder, PurchaseOrderLineItem, SalesOrder, - SalesOrderLineItem) +from .models import (PurchaseOrder, PurchaseOrderLineItem, ReturnOrder, + SalesOrder, SalesOrderLineItem) logger = logging.getLogger("inventree") @@ -51,6 +51,14 @@ class SalesOrderIndex(InvenTreeRoleMixin, ListView): context_object_name = 'orders' +class ReturnOrderIndex(InvenTreeRoleMixin, ListView): + """ReturnOrder index (list) view""" + + model = ReturnOrder + template_name = 'order/return_orders.html' + context_object_name = 'orders' + + class PurchaseOrderDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView): """Detail view for a PurchaseOrder object.""" @@ -67,6 +75,14 @@ class SalesOrderDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView) template_name = 'order/sales_order_detail.html' +class ReturnOrderDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView): + """Detail view for a ReturnOrder object""" + + context_object_name = 'order' + queryset = ReturnOrder.objects.all() + template_name = 'order/return_order_detail.html' + + class PurchaseOrderUpload(FileManagementFormView): """PurchaseOrder: Upload file, match to fields and parts (using multi-Step form)""" diff --git a/InvenTree/part/admin.py b/InvenTree/part/admin.py index 1c8140afee..efb584e988 100644 --- a/InvenTree/part/admin.py +++ b/InvenTree/part/admin.py @@ -16,6 +16,20 @@ from stock.models import StockLocation class PartResource(InvenTreeResource): """Class for managing Part data import/export.""" + class Meta: + """Metaclass definition""" + model = models.Part + skip_unchanged = True + report_skipped = False + clean_model_instances = True + exclude = [ + 'bom_checksum', 'bom_checked_by', 'bom_checked_date', + 'lft', 'rght', 'tree_id', 'level', + 'image', + 'metadata', + 'barcode_data', 'barcode_hash', + ] + id = Field(attribute='pk', column_name=_('Part ID'), widget=widgets.IntegerWidget()) name = Field(attribute='name', column_name=_('Part Name'), widget=widgets.CharWidget()) description = Field(attribute='description', column_name=_('Part Description'), widget=widgets.CharWidget()) @@ -68,20 +82,6 @@ class PartResource(InvenTreeResource): if max_cost is not None: return float(max_cost.amount) - class Meta: - """Metaclass definition""" - model = models.Part - skip_unchanged = True - report_skipped = False - clean_model_instances = True - exclude = [ - 'bom_checksum', 'bom_checked_by', 'bom_checked_date', - 'lft', 'rght', 'tree_id', 'level', - 'image', - 'metadata', - 'barcode_data', 'barcode_hash', - ] - def get_queryset(self): """Prefetch related data for quicker access.""" query = super().get_queryset() @@ -166,21 +166,15 @@ class PartStocktakeAdmin(admin.ModelAdmin): list_display = ['part', 'date', 'quantity', 'user'] +class PartStocktakeReportAdmin(admin.ModelAdmin): + """Admin class for PartStocktakeReport model""" + + list_display = ['date', 'user'] + + class PartCategoryResource(InvenTreeResource): """Class for managing PartCategory data import/export.""" - id = Field(attribute='pk', column_name=_('Category ID')) - name = Field(attribute='name', column_name=_('Category Name')) - description = Field(attribute='description', column_name=_('Description')) - parent = Field(attribute='parent', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(models.PartCategory)) - parent_name = Field(attribute='parent__name', column_name=_('Parent Name'), readonly=True) - default_location = Field(attribute='default_location', column_name=_('Default Location ID'), widget=widgets.ForeignKeyWidget(StockLocation)) - default_keywords = Field(attribute='default_keywords', column_name=_('Keywords')) - pathstring = Field(attribute='pathstring', column_name=_('Category Path')) - - # Calculated fields - parts = Field(attribute='item_count', column_name=_('Parts'), widget=widgets.IntegerWidget(), readonly=True) - class Meta: """Metaclass definition""" model = models.PartCategory @@ -195,6 +189,18 @@ class PartCategoryResource(InvenTreeResource): 'icon', ] + id = Field(attribute='pk', column_name=_('Category ID'), widget=widgets.IntegerWidget()) + name = Field(attribute='name', column_name=_('Category Name')) + description = Field(attribute='description', column_name=_('Description')) + parent = Field(attribute='parent', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(models.PartCategory)) + parent_name = Field(attribute='parent__name', column_name=_('Parent Name'), readonly=True) + default_location = Field(attribute='default_location', column_name=_('Default Location ID'), widget=widgets.ForeignKeyWidget(StockLocation)) + default_keywords = Field(attribute='default_keywords', column_name=_('Keywords')) + pathstring = Field(attribute='pathstring', column_name=_('Category Path')) + + # Calculated fields + parts = Field(attribute='item_count', column_name=_('Parts'), widget=widgets.IntegerWidget(), readonly=True) + def after_import(self, dataset, result, using_transactions, dry_run, **kwargs): """Rebuild MPTT tree structure after importing PartCategory data""" @@ -241,9 +247,24 @@ class PartTestTemplateAdmin(admin.ModelAdmin): class BomItemResource(InvenTreeResource): """Class for managing BomItem data import/export.""" + class Meta: + """Metaclass definition""" + model = models.BomItem + skip_unchanged = True + report_skipped = False + clean_model_instances = True + + exclude = [ + 'checksum', + 'id', + 'part', + 'sub_part', + 'validated', + ] + level = Field(attribute='level', column_name=_('BOM Level'), readonly=True) - bom_id = Field(attribute='pk', column_name=_('BOM Item ID')) + bom_id = Field(attribute='pk', column_name=_('BOM Item ID'), widget=widgets.IntegerWidget()) # ID of the parent part parent_part_id = Field(attribute='part', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(models.Part)) @@ -297,7 +318,7 @@ class BomItemResource(InvenTreeResource): is_importing = getattr(self, 'is_importing', False) include_pricing = getattr(self, 'include_pricing', False) - to_remove = [] + to_remove = ['metadata'] if is_importing or not include_pricing: # Remove pricing fields in this instance @@ -329,20 +350,6 @@ class BomItemResource(InvenTreeResource): return fields - class Meta: - """Metaclass definition""" - model = models.BomItem - skip_unchanged = True - report_skipped = False - clean_model_instances = True - - exclude = [ - 'checksum', - 'id', - 'part', - 'sub_part', - ] - class BomItemAdmin(ImportExportModelAdmin): """Admin class for the BomItem model""" @@ -367,6 +374,13 @@ class ParameterTemplateAdmin(ImportExportModelAdmin): class ParameterResource(InvenTreeResource): """Class for managing PartParameter data import/export.""" + class Meta: + """Metaclass definition""" + model = models.PartParameter + skip_unchanged = True + report_skipped = False + clean_model_instance = True + part = Field(attribute='part', widget=widgets.ForeignKeyWidget(models.Part)) part_name = Field(attribute='part__name', readonly=True) @@ -375,13 +389,6 @@ class ParameterResource(InvenTreeResource): template_name = Field(attribute='template__name', readonly=True) - class Meta: - """Metaclass definition""" - model = models.PartParameter - skip_unchanged = True - report_skipped = False - clean_model_instance = True - class ParameterAdmin(ImportExportModelAdmin): """Admin class for the PartParameter model""" @@ -434,3 +441,4 @@ admin.site.register(models.PartSellPriceBreak, PartSellPriceBreakAdmin) admin.site.register(models.PartInternalPriceBreak, PartInternalPriceBreakAdmin) admin.site.register(models.PartPricing, PartPricingAdmin) admin.site.register(models.PartStocktake, PartStocktakeAdmin) +admin.site.register(models.PartStocktakeReport, PartStocktakeReportAdmin) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 079f5d373e..7144108b3c 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -2,7 +2,6 @@ import functools -from django.db import transaction from django.db.models import Count, F, Q from django.http import JsonResponse from django.urls import include, path, re_path @@ -10,16 +9,17 @@ from django.utils.translation import gettext_lazy as _ from django_filters import rest_framework as rest_filters from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters, serializers, status +from rest_framework import permissions, serializers, status from rest_framework.exceptions import ValidationError -from rest_framework.permissions import IsAdminUser from rest_framework.response import Response import order.models from build.models import Build, BuildItem from InvenTree.api import (APIDownloadMixin, AttachmentMixin, - ListCreateDestroyAPIView) -from InvenTree.filters import InvenTreeOrderingFilter + ListCreateDestroyAPIView, MetadataView) +from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER, + SEARCH_ORDER_FILTER_ALIAS, + InvenTreeSearchFilter) from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull, str2bool, str2int) from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI, @@ -30,7 +30,6 @@ from InvenTree.permissions import RolePermission from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus, SalesOrderStatus) from part.admin import PartCategoryResource, PartResource -from plugin.serializers import MetadataSerializer from . import serializers as part_serializers from . import views @@ -38,37 +37,23 @@ from .models import (BomItem, BomItemSubstitute, Part, PartAttachment, PartCategory, PartCategoryParameterTemplate, PartInternalPriceBreak, PartParameter, PartParameterTemplate, PartRelated, PartSellPriceBreak, - PartStocktake, PartTestTemplate) + PartStocktake, PartStocktakeReport, PartTestTemplate) -class CategoryList(APIDownloadMixin, ListCreateAPI): - """API endpoint for accessing a list of PartCategory objects. - - - GET: Return a list of PartCategory objects - - POST: Create a new PartCategory object - """ - - queryset = PartCategory.objects.all() +class CategoryMixin: + """Mixin class for PartCategory endpoints""" serializer_class = part_serializers.CategorySerializer - - def download_queryset(self, queryset, export_format): - """Download the filtered queryset as a data file""" - - dataset = PartCategoryResource().export(queryset=queryset) - filedata = dataset.export(export_format) - filename = f"InvenTree_Categories.{export_format}" - - return DownloadFile(filedata, filename) + queryset = PartCategory.objects.all() def get_queryset(self, *args, **kwargs): - """Return an annotated queryset for the CategoryList endpoint""" + """Return an annotated queryset for the CategoryDetail endpoint""" queryset = super().get_queryset(*args, **kwargs) queryset = part_serializers.CategorySerializer.annotate_queryset(queryset) return queryset def get_serializer_context(self): - """Add extra context data to the serializer for the PartCategoryList endpoint""" + """Add extra context to the serializer for the CategoryDetail endpoint""" ctx = super().get_serializer_context() try: @@ -79,6 +64,23 @@ class CategoryList(APIDownloadMixin, ListCreateAPI): return ctx + +class CategoryList(CategoryMixin, APIDownloadMixin, ListCreateAPI): + """API endpoint for accessing a list of PartCategory objects. + + - GET: Return a list of PartCategory objects + - POST: Create a new PartCategory object + """ + + def download_queryset(self, queryset, export_format): + """Download the filtered queryset as a data file""" + + dataset = PartCategoryResource().export(queryset=queryset) + filedata = dataset.export(export_format) + filename = f"InvenTree_Categories.{export_format}" + + return DownloadFile(filedata, filename) + def filter_queryset(self, queryset): """Custom filtering: @@ -152,11 +154,7 @@ class CategoryList(APIDownloadMixin, ListCreateAPI): return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'name', @@ -186,31 +184,9 @@ class CategoryList(APIDownloadMixin, ListCreateAPI): ] -class CategoryDetail(CustomRetrieveUpdateDestroyAPI): +class CategoryDetail(CategoryMixin, CustomRetrieveUpdateDestroyAPI): """API endpoint for detail view of a single PartCategory object.""" - serializer_class = part_serializers.CategorySerializer - queryset = PartCategory.objects.all() - - def get_queryset(self, *args, **kwargs): - """Return an annotated queryset for the CategoryDetail endpoint""" - - queryset = super().get_queryset(*args, **kwargs) - queryset = part_serializers.CategorySerializer.annotate_queryset(queryset) - return queryset - - def get_serializer_context(self): - """Add extra context to the serializer for the CategoryDetail endpoint""" - ctx = super().get_serializer_context() - - try: - ctx['starred_categories'] = [star.category for star in self.request.user.starred_categories.all()] - except AttributeError: - # Error is thrown if the view does not have an associated request - ctx['starred_categories'] = [] - - return ctx - def update(self, request, *args, **kwargs): """Perform 'update' function and mark this part as 'starred' (or not)""" # Clean up input data @@ -236,14 +212,16 @@ class CategoryDetail(CustomRetrieveUpdateDestroyAPI): delete_child_categories=delete_child_categories)) -class CategoryMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating PartCategory metadata.""" - - def get_serializer(self, *args, **kwargs): - """Return a MetadataSerializer pointing to the referenced PartCategory instance""" - return MetadataSerializer(PartCategory, *args, **kwargs) +class CategoryTree(ListAPI): + """API endpoint for accessing a list of PartCategory objects ready for rendering a tree.""" queryset = PartCategory.objects.all() + serializer_class = part_serializers.CategoryTree + + filter_backends = ORDER_FILTER + + # Order by tree level (top levels first) and then name + ordering = ['level', 'name'] class CategoryParameterList(ListCreateAPI): @@ -294,21 +272,6 @@ class CategoryParameterDetail(RetrieveUpdateDestroyAPI): serializer_class = part_serializers.CategoryParameterTemplateSerializer -class CategoryTree(ListAPI): - """API endpoint for accessing a list of PartCategory objects ready for rendering a tree.""" - - queryset = PartCategory.objects.all() - serializer_class = part_serializers.CategoryTree - - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - ] - - # Order by tree level (top levels first) and then name - ordering = ['level', 'name'] - - class PartSalePriceDetail(RetrieveUpdateDestroyAPI): """Detail endpoint for PartSellPriceBreak model.""" @@ -416,11 +379,7 @@ class PartTestTemplateList(ListCreateAPI): return queryset - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - filters.SearchFilter, - ] + filter_backends = SEARCH_ORDER_FILTER class PartThumbs(ListAPI): @@ -453,7 +412,7 @@ class PartThumbs(ListAPI): return Response(data) filter_backends = [ - filters.SearchFilter, + InvenTreeSearchFilter, ] search_fields = [ @@ -719,16 +678,6 @@ class PartRequirements(RetrieveAPI): return Response(data) -class PartMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating Part metadata.""" - - def get_serializer(self, *args, **kwargs): - """Returns a MetadataSerializer instance pointing to the referenced Part""" - return MetadataSerializer(Part, *args, **kwargs) - - queryset = Part.objects.all() - - class PartPricingDetail(RetrieveUpdateAPI): """API endpoint for viewing part pricing data""" @@ -847,76 +796,6 @@ class PartValidateBOM(RetrieveUpdateAPI): }) -class PartDetail(RetrieveUpdateDestroyAPI): - """API endpoint for detail view of a single Part object.""" - - queryset = Part.objects.all() - serializer_class = part_serializers.PartSerializer - - starred_parts = None - - def get_queryset(self, *args, **kwargs): - """Return an annotated queryset object for the PartDetail endpoint""" - queryset = super().get_queryset(*args, **kwargs) - - queryset = part_serializers.PartSerializer.annotate_queryset(queryset) - - return queryset - - def get_serializer(self, *args, **kwargs): - """Return a serializer instance for the PartDetail endpoint""" - # By default, include 'category_detail' information in the detail view - try: - kwargs['category_detail'] = str2bool(self.request.query_params.get('category_detail', True)) - except AttributeError: - pass - - # Ensure the request context is passed through - kwargs['context'] = self.get_serializer_context() - - # Pass a list of "starred" parts of the current user to the serializer - # We do this to reduce the number of database queries required! - if self.starred_parts is None and self.request is not None: - self.starred_parts = [star.part for star in self.request.user.starred_parts.all()] - - kwargs['starred_parts'] = self.starred_parts - - return self.serializer_class(*args, **kwargs) - - def destroy(self, request, *args, **kwargs): - """Delete a Part instance via the API - - - If the part is 'active' it cannot be deleted - - It must first be marked as 'inactive' - """ - part = Part.objects.get(pk=int(kwargs['pk'])) - # Check if inactive - if not part.active: - # Delete - return super(PartDetail, self).destroy(request, *args, **kwargs) - else: - # Return 405 error - message = 'Part is active: cannot delete' - return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED, data=message) - - def update(self, request, *args, **kwargs): - """Custom update functionality for Part instance. - - - If the 'starred' field is provided, update the 'starred' status against current user - """ - # Clean input data - data = self.clean_data(request.data) - - if 'starred' in data: - starred = str2bool(data.get('starred', False)) - - self.get_object().set_starred(request.user, starred) - - response = super().update(request, *args, **kwargs) - - return response - - class PartFilter(rest_filters.FilterSet): """Custom filters for the PartList endpoint. @@ -1092,22 +971,30 @@ class PartFilter(rest_filters.FilterSet): virtual = rest_filters.BooleanFilter() -class PartList(APIDownloadMixin, ListCreateAPI): - """API endpoint for accessing a list of Part objects, or creating a new Part instance""" - +class PartMixin: + """Mixin class for Part API endpoints""" serializer_class = part_serializers.PartSerializer queryset = Part.objects.all() - filterset_class = PartFilter starred_parts = None + is_create = False + + def get_queryset(self, *args, **kwargs): + """Return an annotated queryset object for the PartDetail endpoint""" + queryset = super().get_queryset(*args, **kwargs) + + queryset = part_serializers.PartSerializer.annotate_queryset(queryset) + + return queryset + def get_serializer(self, *args, **kwargs): """Return a serializer instance for this endpoint""" # Ensure the request context is passed through kwargs['context'] = self.get_serializer_context() # Indicate that we can create a new Part via this endpoint - kwargs['create'] = True + kwargs['create'] = self.is_create # Pass a list of "starred" parts to the current user to the serializer # We do this to reduce the number of database queries required! @@ -1120,6 +1007,7 @@ class PartList(APIDownloadMixin, ListCreateAPI): params = self.request.query_params kwargs['parameters'] = str2bool(params.get('parameters', None)) + kwargs['category_detail'] = str2bool(params.get('category_detail', False)) except AttributeError: pass @@ -1133,6 +1021,13 @@ class PartList(APIDownloadMixin, ListCreateAPI): return context + +class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): + """API endpoint for accessing a list of Part objects, or creating a new Part instance""" + + filterset_class = PartFilter + is_create = True + def download_queryset(self, queryset, export_format): """Download the filtered queryset as a data file""" dataset = PartResource().export(queryset=queryset) @@ -1158,41 +1053,6 @@ class PartList(APIDownloadMixin, ListCreateAPI): data = serializer.data - # Do we wish to include PartCategory detail? - if str2bool(request.query_params.get('category_detail', False)): - - # Work out which part categories we need to query - category_ids = set() - - for part in data: - cat_id = part['category'] - - if cat_id is not None: - category_ids.add(cat_id) - - # Fetch only the required PartCategory objects from the database - categories = PartCategory.objects.filter(pk__in=category_ids).prefetch_related( - 'parts', - 'parent', - 'children', - ) - - category_map = {} - - # Serialize each PartCategory object - for category in categories: - category_map[category.pk] = part_serializers.CategorySerializer(category).data - - for part in data: - cat_id = part['category'] - - if cat_id is not None and cat_id in category_map.keys(): - detail = category_map[cat_id] - else: - detail = None - - part['category_detail'] = detail - """ Determine the response type based on the request. a) For HTTP requests (e.g. via the browseable API) return a DRF response @@ -1205,42 +1065,6 @@ class PartList(APIDownloadMixin, ListCreateAPI): else: return Response(data) - @transaction.atomic - def create(self, request, *args, **kwargs): - """We wish to save the user who created this part! - - Note: Implementation copied from DRF class CreateModelMixin - """ - # TODO: Unit tests for this function! - - # Clean up input data - data = self.clean_data(request.data) - - serializer = self.get_serializer(data=data) - serializer.is_valid(raise_exception=True) - - part = serializer.save() - part.creation_user = self.request.user - - # Optionally copy templates from category or parent category - copy_templates = { - 'main': str2bool(data.get('copy_category_templates', False)), - 'parent': str2bool(data.get('copy_parent_templates', False)) - } - - part.save(**{'add_category_templates': copy_templates}) - - headers = self.get_success_headers(serializer.data) - - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - - def get_queryset(self, *args, **kwargs): - """Return an annotated queryset object""" - queryset = super().get_queryset(*args, **kwargs) - queryset = part_serializers.PartSerializer.annotate_queryset(queryset) - - return queryset - def filter_queryset(self, queryset): """Perform custom filtering of the queryset""" params = self.request.query_params @@ -1342,15 +1166,11 @@ class PartList(APIDownloadMixin, ListCreateAPI): # Does the user wish to filter by category? cat_id = params.get('category', None) - if cat_id is None: - # No category filtering if category is not specified - pass - - else: + if cat_id is not None: # Category has been specified! if isNull(cat_id): # A 'null' category is the top-level category - if cascade is False: + if not cascade: # Do not cascade, only list parts in the top-level category queryset = queryset.filter(category=None) @@ -1393,33 +1213,16 @@ class PartList(APIDownloadMixin, ListCreateAPI): queryset = queryset.filter(pk__in=parts_needed_to_complete_builds) - # Optionally limit the maximum number of returned results - # e.g. for displaying "recent part" list - max_results = params.get('max_results', None) - - if max_results is not None: - try: - max_results = int(max_results) - - if max_results > 0: - queryset = queryset[:max_results] - - except (ValueError): - pass - return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_fields = [ 'name', 'creation_date', 'IPN', 'in_stock', + 'total_in_stock', 'unallocated_stock', 'category', 'last_stocktake', @@ -1440,6 +1243,43 @@ class PartList(APIDownloadMixin, ListCreateAPI): ] +class PartDetail(PartMixin, RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a single Part object.""" + + def destroy(self, request, *args, **kwargs): + """Delete a Part instance via the API + + - If the part is 'active' it cannot be deleted + - It must first be marked as 'inactive' + """ + part = Part.objects.get(pk=int(kwargs['pk'])) + # Check if inactive + if not part.active: + # Delete + return super(PartDetail, self).destroy(request, *args, **kwargs) + else: + # Return 405 error + message = 'Part is active: cannot delete' + return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED, data=message) + + def update(self, request, *args, **kwargs): + """Custom update functionality for Part instance. + + - If the 'starred' field is provided, update the 'starred' status against current user + """ + # Clean input data + data = self.clean_data(request.data) + + if 'starred' in data: + starred = str2bool(data.get('starred', False)) + + self.get_object().set_starred(request.user, starred) + + response = super().update(request, *args, **kwargs) + + return response + + class PartRelatedList(ListCreateAPI): """API endpoint for accessing a list of PartRelated objects.""" @@ -1484,11 +1324,7 @@ class PartParameterTemplateList(ListCreateAPI): queryset = PartParameterTemplate.objects.all() serializer_class = part_serializers.PartParameterTemplateSerializer - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - filters.SearchFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'name', @@ -1609,16 +1445,15 @@ class PartStocktakeList(ListCreateAPI): return context - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - ] + filter_backends = ORDER_FILTER ordering_fields = [ 'part', + 'item_count', 'quantity', 'date', 'user', + 'pk', ] # Reverse date ordering by default @@ -1633,20 +1468,59 @@ class PartStocktakeDetail(RetrieveUpdateDestroyAPI): queryset = PartStocktake.objects.all() serializer_class = part_serializers.PartStocktakeSerializer + + +class PartStocktakeReportList(ListAPI): + """API endpoint for listing part stocktake report information""" + + queryset = PartStocktakeReport.objects.all() + serializer_class = part_serializers.PartStocktakeReportSerializer + + filter_backends = ORDER_FILTER + + ordering_fields = [ + 'date', + 'pk', + ] + + # Newest first, by default + ordering = '-pk' + + +class PartStocktakeReportGenerate(CreateAPI): + """API endpoint for manually generating a new PartStocktakeReport""" + + serializer_class = part_serializers.PartStocktakeReportGenerateSerializer + permission_classes = [ - IsAdminUser, + permissions.IsAuthenticated, RolePermission, ] + role_required = 'stocktake' + + def get_serializer_context(self): + """Extend serializer context data""" + context = super().get_serializer_context() + context['request'] = self.request + + return context + class BomFilter(rest_filters.FilterSet): """Custom filters for the BOM list.""" - # Boolean filters for BOM item - optional = rest_filters.BooleanFilter(label='BOM item is optional') - consumable = rest_filters.BooleanFilter(label='BOM item is consumable') - inherited = rest_filters.BooleanFilter(label='BOM item is inherited') - allow_variants = rest_filters.BooleanFilter(label='Variants are allowed') + class Meta: + """Metaclass options""" + + model = BomItem + fields = [ + 'optional', + 'consumable', + 'inherited', + 'allow_variants', + 'validated', + ] # Filters for linked 'part' part_active = rest_filters.BooleanFilter(label='Master part is active', field_name='part__active') @@ -1656,29 +1530,6 @@ class BomFilter(rest_filters.FilterSet): sub_part_trackable = rest_filters.BooleanFilter(label='Sub part is trackable', field_name='sub_part__trackable') sub_part_assembly = rest_filters.BooleanFilter(label='Sub part is an assembly', field_name='sub_part__assembly') - validated = rest_filters.BooleanFilter(label='BOM line has been validated', method='filter_validated') - - def filter_validated(self, queryset, name, value): - """Filter by which lines have actually been validated""" - pks = [] - - value = str2bool(value) - - # Shortcut for quicker filtering - BomItem with empty 'checksum' values are not validated - if value: - queryset = queryset.exclude(checksum=None).exclude(checksum='') - - for bom_item in queryset.all(): - if bom_item.is_line_valid: - pks.append(bom_item.pk) - - if value: - queryset = queryset.filter(pk__in=pks) - else: - queryset = queryset.exclude(pk__in=pks) - - return queryset - available_stock = rest_filters.BooleanFilter(label="Has available stock", method="filter_available_stock") def filter_available_stock(self, queryset, name, value): @@ -1725,42 +1576,11 @@ class BomFilter(rest_filters.FilterSet): return queryset -class BomList(ListCreateDestroyAPIView): - """API endpoint for accessing a list of BomItem objects. - - - GET: Return list of BomItem objects - - POST: Create a new BomItem object - """ +class BomMixin: + """Mixin class for BomItem API endpoints""" serializer_class = part_serializers.BomItemSerializer queryset = BomItem.objects.all() - filterset_class = BomFilter - - def list(self, request, *args, **kwargs): - """Return serialized list response for this endpoint""" - - queryset = self.filter_queryset(self.get_queryset()) - - page = self.paginate_queryset(queryset) - - if page is not None: - serializer = self.get_serializer(page, many=True) - else: - serializer = self.get_serializer(queryset, many=True) - - data = serializer.data - - """ - Determine the response type based on the request. - a) For HTTP requests (e.g. via the browseable API) return a DRF response - b) For AJAX requests, simply return a JSON rendered response. - """ - if page is not None: - return self.get_paginated_response(data) - elif request.is_ajax(): - return JsonResponse(data, safe=False) - else: - return Response(data) def get_serializer(self, *args, **kwargs): """Return the serializer instance for this API endpoint @@ -1795,6 +1615,42 @@ class BomList(ListCreateDestroyAPIView): return queryset + +class BomList(BomMixin, ListCreateDestroyAPIView): + """API endpoint for accessing a list of BomItem objects. + + - GET: Return list of BomItem objects + - POST: Create a new BomItem object + """ + + filterset_class = BomFilter + + def list(self, request, *args, **kwargs): + """Return serialized list response for this endpoint""" + + queryset = self.filter_queryset(self.get_queryset()) + + page = self.paginate_queryset(queryset) + + if page is not None: + serializer = self.get_serializer(page, many=True) + else: + serializer = self.get_serializer(queryset, many=True) + + data = serializer.data + + """ + Determine the response type based on the request. + a) For HTTP requests (e.g. via the browseable API) return a DRF response + b) For AJAX requests, simply return a JSON rendered response. + """ + if page is not None: + return self.get_paginated_response(data) + elif request.is_ajax(): + return JsonResponse(data, safe=False) + else: + return Response(data) + def filter_queryset(self, queryset): """Custom query filtering for the BomItem list API""" queryset = super().filter_queryset(queryset) @@ -1852,14 +1708,7 @@ class BomList(ListCreateDestroyAPIView): return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] - - filterset_fields = [ - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS search_fields = [ 'reference', @@ -1882,6 +1731,11 @@ class BomList(ListCreateDestroyAPIView): } +class BomDetail(BomMixin, RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a single BomItem object.""" + pass + + class BomImportUpload(CreateAPI): """API endpoint for uploading a complete Bill of Materials. @@ -1920,22 +1774,6 @@ class BomImportSubmit(CreateAPI): serializer_class = part_serializers.BomImportSubmitSerializer -class BomDetail(RetrieveUpdateDestroyAPI): - """API endpoint for detail view of a single BomItem object.""" - - queryset = BomItem.objects.all() - serializer_class = part_serializers.BomItemSerializer - - def get_queryset(self, *args, **kwargs): - """Prefetch related fields for this queryset""" - queryset = super().get_queryset(*args, **kwargs) - - queryset = self.get_serializer_class().setup_eager_loading(queryset) - queryset = self.get_serializer_class().annotate_queryset(queryset) - - return queryset - - class BomItemValidate(UpdateAPI): """API endpoint for validating a BomItem.""" @@ -1971,11 +1809,7 @@ class BomItemSubstituteList(ListCreateAPI): serializer_class = part_serializers.BomItemSubstituteSerializer queryset = BomItemSubstitute.objects.all() - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'part', @@ -1997,14 +1831,14 @@ part_api_urls = [ re_path(r'^tree/', CategoryTree.as_view(), name='api-part-category-tree'), re_path(r'^parameters/', include([ - re_path('^(?P\d+)/', CategoryParameterDetail.as_view(), name='api-part-category-parameter-detail'), - re_path('^.*$', CategoryParameterList.as_view(), name='api-part-category-parameter-list'), + re_path(r'^(?P\d+)/', CategoryParameterDetail.as_view(), name='api-part-category-parameter-detail'), + re_path(r'^.*$', CategoryParameterList.as_view(), name='api-part-category-parameter-list'), ])), # Category detail endpoints - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ - re_path(r'^metadata/', CategoryMetadata.as_view(), name='api-part-category-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': PartCategory}, name='api-part-category-metadata'), # PartCategory detail endpoint re_path(r'^.*$', CategoryDetail.as_view(), name='api-part-category-detail'), @@ -2015,48 +1849,57 @@ part_api_urls = [ # Base URL for PartTestTemplate API endpoints re_path(r'^test-template/', include([ - re_path(r'^(?P\d+)/', PartTestTemplateDetail.as_view(), name='api-part-test-template-detail'), + path(r'/', PartTestTemplateDetail.as_view(), name='api-part-test-template-detail'), path('', PartTestTemplateList.as_view(), name='api-part-test-template-list'), ])), # Base URL for PartAttachment API endpoints re_path(r'^attachment/', include([ - re_path(r'^(?P\d+)/', PartAttachmentDetail.as_view(), name='api-part-attachment-detail'), + path(r'/', PartAttachmentDetail.as_view(), name='api-part-attachment-detail'), path('', PartAttachmentList.as_view(), name='api-part-attachment-list'), ])), # Base URL for part sale pricing re_path(r'^sale-price/', include([ - re_path(r'^(?P\d+)/', PartSalePriceDetail.as_view(), name='api-part-sale-price-detail'), + path(r'/', PartSalePriceDetail.as_view(), name='api-part-sale-price-detail'), re_path(r'^.*$', PartSalePriceList.as_view(), name='api-part-sale-price-list'), ])), # Base URL for part internal pricing re_path(r'^internal-price/', include([ - re_path(r'^(?P\d+)/', PartInternalPriceDetail.as_view(), name='api-part-internal-price-detail'), + path(r'/', PartInternalPriceDetail.as_view(), name='api-part-internal-price-detail'), re_path(r'^.*$', PartInternalPriceList.as_view(), name='api-part-internal-price-list'), ])), # Base URL for PartRelated API endpoints re_path(r'^related/', include([ - re_path(r'^(?P\d+)/', PartRelatedDetail.as_view(), name='api-part-related-detail'), + path(r'/', PartRelatedDetail.as_view(), name='api-part-related-detail'), re_path(r'^.*$', PartRelatedList.as_view(), name='api-part-related-list'), ])), # Base URL for PartParameter API endpoints re_path(r'^parameter/', include([ path('template/', include([ - re_path(r'^(?P\d+)/', PartParameterTemplateDetail.as_view(), name='api-part-parameter-template-detail'), + re_path(r'^(?P\d+)/', include([ + re_path(r'^metadata/?', MetadataView.as_view(), {'model': PartParameter}, name='api-part-parameter-template-metadata'), + re_path(r'^.*$', PartParameterTemplateDetail.as_view(), name='api-part-parameter-template-detail'), + ])), re_path(r'^.*$', PartParameterTemplateList.as_view(), name='api-part-parameter-template-list'), ])), - re_path(r'^(?P\d+)/', PartParameterDetail.as_view(), name='api-part-parameter-detail'), + path(r'/', PartParameterDetail.as_view(), name='api-part-parameter-detail'), re_path(r'^.*$', PartParameterList.as_view(), name='api-part-parameter-list'), ])), # Part stocktake data re_path(r'^stocktake/', include([ - re_path(r'^(?P\d+)/', PartStocktakeDetail.as_view(), name='api-part-stocktake-detail'), + + path(r'report/', include([ + path('generate/', PartStocktakeReportGenerate.as_view(), name='api-part-stocktake-report-generate'), + re_path(r'^.*$', PartStocktakeReportList.as_view(), name='api-part-stocktake-report-list'), + ])), + + path(r'/', PartStocktakeDetail.as_view(), name='api-part-stocktake-detail'), re_path(r'^.*$', PartStocktakeList.as_view(), name='api-part-stocktake-list'), ])), @@ -2068,7 +1911,7 @@ part_api_urls = [ # BOM template re_path(r'^bom_template/?', views.BomUploadTemplate.as_view(), name='api-bom-upload-template'), - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ # Endpoint for extra serial number information re_path(r'^serial-numbers/', PartSerialNumberDetail.as_view(), name='api-part-serial-number-detail'), @@ -2085,7 +1928,7 @@ part_api_urls = [ re_path(r'^bom-validate/', PartValidateBOM.as_view(), name='api-part-bom-validate'), # Part metadata - re_path(r'^metadata/', PartMetadata.as_view(), name='api-part-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': Part}, name='api-part-metadata'), # Part pricing re_path(r'^pricing/', PartPricingDetail.as_view(), name='api-part-pricing'), @@ -2093,9 +1936,6 @@ part_api_urls = [ # BOM download re_path(r'^bom-download/?', views.BomDownload.as_view(), name='api-bom-download'), - # QR code download - re_path(r'^qr_code/?', views.PartQRCode.as_view(), name='api-part-qr'), - # Old pricing endpoint re_path(r'^pricing2/', views.PartPricing.as_view(), name='part-pricing'), @@ -2111,15 +1951,16 @@ bom_api_urls = [ re_path(r'^substitute/', include([ # Detail view - re_path(r'^(?P\d+)/', BomItemSubstituteDetail.as_view(), name='api-bom-substitute-detail'), + path(r'/', BomItemSubstituteDetail.as_view(), name='api-bom-substitute-detail'), # Catch all re_path(r'^.*$', BomItemSubstituteList.as_view(), name='api-bom-substitute-list'), ])), # BOM Item Detail - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^validate/?', BomItemValidate.as_view(), name='api-bom-item-validate'), + re_path(r'^metadata/?', MetadataView.as_view(), {'model': BomItem}, name='api-bom-item-metadata'), re_path(r'^.*$', BomDetail.as_view(), name='api-bom-item-detail'), ])), diff --git a/InvenTree/part/fixtures/part.yaml b/InvenTree/part/fixtures/part.yaml index 762a0bf740..8d461402d1 100644 --- a/InvenTree/part/fixtures/part.yaml +++ b/InvenTree/part/fixtures/part.yaml @@ -95,7 +95,7 @@ pk: 100 fields: name: 'Bob' - description: 'Can we build it?' + description: 'Can we build it? Yes we can!' assembly: true salable: true purchaseable: false @@ -112,7 +112,7 @@ pk: 101 fields: name: 'Assembly' - description: 'A high level assembly' + description: 'A high level assembly part' salable: true active: True tree_id: 0 @@ -125,7 +125,7 @@ pk: 10000 fields: name: 'Chair Template' - description: 'A chair' + description: 'A chair, which is actually just a template part' is_template: True trackable: true salable: true @@ -139,6 +139,7 @@ pk: 10001 fields: name: 'Blue Chair' + description: 'A variant chair part which is blue' variant_of: 10000 trackable: true category: 7 @@ -151,6 +152,7 @@ pk: 10002 fields: name: 'Red chair' + description: 'A variant chair part which is red' variant_of: 10000 IPN: "R.CH" trackable: true @@ -164,6 +166,7 @@ pk: 10003 fields: name: 'Green chair' + description: 'A template chair part which is green' variant_of: 10000 category: 7 trackable: true @@ -176,6 +179,7 @@ pk: 10004 fields: name: 'Green chair variant' + description: 'A green chair, which is a variant of the chair template' variant_of: 10003 is_template: true category: 7 diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 95222641a7..f1934bc105 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -34,16 +34,16 @@ class BomMatchItemForm(MatchItemForm): class PartPriceForm(forms.Form): """Simple form for viewing part pricing information.""" - quantity = forms.IntegerField( - required=True, - initial=1, - label=_('Quantity'), - help_text=_('Input quantity for price calculation') - ) - class Meta: """Metaclass defines fields for this form""" model = Part fields = [ 'quantity', ] + + quantity = forms.IntegerField( + required=True, + initial=1, + label=_('Quantity'), + help_text=_('Input quantity for price calculation') + ) diff --git a/InvenTree/part/migrations/0001_initial.py b/InvenTree/part/migrations/0001_initial.py index 0368abd9d0..eeed95ce20 100644 --- a/InvenTree/part/migrations/0001_initial.py +++ b/InvenTree/part/migrations/0001_initial.py @@ -49,7 +49,7 @@ class Migration(migrations.Migration): name='Part', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(help_text='Part name', max_length=100, validators=[InvenTree.validators.validate_part_name])), + ('name', models.CharField(help_text='Part name', max_length=100)), ('variant', models.CharField(blank=True, help_text='Part variant or revision code', max_length=32)), ('description', models.CharField(help_text='Part description', max_length=250)), ('keywords', models.CharField(blank=True, help_text='Part keywords to improve visibility in search results', max_length=250)), diff --git a/InvenTree/part/migrations/0006_auto_20190526_1215.py b/InvenTree/part/migrations/0006_auto_20190526_1215.py index b91cc8bbab..1fbf02407f 100644 --- a/InvenTree/part/migrations/0006_auto_20190526_1215.py +++ b/InvenTree/part/migrations/0006_auto_20190526_1215.py @@ -1,6 +1,5 @@ # Generated by Django 2.2 on 2019-05-26 02:15 -import InvenTree.validators from django.db import migrations, models @@ -14,7 +13,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='part', name='name', - field=models.CharField(help_text='Part name (must be unique)', max_length=100, unique=True, validators=[InvenTree.validators.validate_part_name]), + field=models.CharField(help_text='Part name (must be unique)', max_length=100, unique=True), ), migrations.AlterUniqueTogether( name='part', diff --git a/InvenTree/part/migrations/0010_auto_20190620_2135.py b/InvenTree/part/migrations/0010_auto_20190620_2135.py index 2033e2870f..a8bd18c43a 100644 --- a/InvenTree/part/migrations/0010_auto_20190620_2135.py +++ b/InvenTree/part/migrations/0010_auto_20190620_2135.py @@ -1,6 +1,5 @@ # Generated by Django 2.2.2 on 2019-06-20 11:35 -import InvenTree.validators from django.db import migrations, models @@ -14,6 +13,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='part', name='name', - field=models.CharField(help_text='Part name', max_length=100, validators=[InvenTree.validators.validate_part_name]), + field=models.CharField(help_text='Part name', max_length=100), ), ] diff --git a/InvenTree/part/migrations/0028_auto_20200203_1007.py b/InvenTree/part/migrations/0028_auto_20200203_1007.py index eca1788f06..b34715ecbc 100644 --- a/InvenTree/part/migrations/0028_auto_20200203_1007.py +++ b/InvenTree/part/migrations/0028_auto_20200203_1007.py @@ -1,6 +1,5 @@ # Generated by Django 2.2.9 on 2020-02-03 10:07 -import InvenTree.validators from django.db import migrations, models @@ -14,6 +13,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='part', name='IPN', - field=models.CharField(blank=True, help_text='Internal Part Number', max_length=100, validators=[InvenTree.validators.validate_part_ipn]), + field=models.CharField(blank=True, help_text='Internal Part Number', max_length=100), ), ] diff --git a/InvenTree/part/migrations/0048_auto_20200902_1404.py b/InvenTree/part/migrations/0048_auto_20200902_1404.py index 4f3584f3c4..5b1440c950 100644 --- a/InvenTree/part/migrations/0048_auto_20200902_1404.py +++ b/InvenTree/part/migrations/0048_auto_20200902_1404.py @@ -1,7 +1,6 @@ # Generated by Django 3.0.7 on 2020-09-02 14:04 import InvenTree.fields -import InvenTree.validators from django.db import migrations, models @@ -16,7 +15,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='part', name='IPN', - field=models.CharField(blank=True, help_text='Internal Part Number', max_length=100, null=True, validators=[InvenTree.validators.validate_part_ipn]), + field=models.CharField(blank=True, help_text='Internal Part Number', max_length=100, null=True), ), migrations.AlterField( model_name='part', diff --git a/InvenTree/part/migrations/0056_auto_20201110_1125.py b/InvenTree/part/migrations/0056_auto_20201110_1125.py index bb3d930f99..f3d0faa26b 100644 --- a/InvenTree/part/migrations/0056_auto_20201110_1125.py +++ b/InvenTree/part/migrations/0056_auto_20201110_1125.py @@ -24,7 +24,7 @@ def migrate_currencies(apps, schema_editor): for the SupplierPriceBreak model, to a new django-money compatible currency. """ - logger.info("Updating currency references for SupplierPriceBreak model...") + logger.debug("Updating currency references for SupplierPriceBreak model...") # A list of available currency codes currency_codes = CURRENCIES.keys() diff --git a/InvenTree/part/migrations/0061_auto_20210103_2313.py b/InvenTree/part/migrations/0061_auto_20210103_2313.py index 502ff7c8e2..baf52cc811 100644 --- a/InvenTree/part/migrations/0061_auto_20210103_2313.py +++ b/InvenTree/part/migrations/0061_auto_20210103_2313.py @@ -1,7 +1,6 @@ # Generated by Django 3.0.7 on 2021-01-03 12:13 import InvenTree.fields -import InvenTree.validators from django.db import migrations, models import django.db.models.deletion import mptt.fields @@ -19,7 +18,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='part', name='IPN', - field=models.CharField(blank=True, help_text='Internal Part Number', max_length=100, null=True, validators=[InvenTree.validators.validate_part_ipn], verbose_name='IPN'), + field=models.CharField(blank=True, help_text='Internal Part Number', max_length=100, null=True, verbose_name='IPN'), ), migrations.AlterField( model_name='part', @@ -59,7 +58,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='part', name='name', - field=models.CharField(help_text='Part name', max_length=100, validators=[InvenTree.validators.validate_part_name], verbose_name='Name'), + field=models.CharField(help_text='Part name', max_length=100, verbose_name='Name'), ), migrations.AlterField( model_name='part', diff --git a/InvenTree/part/migrations/0096_auto_20230211_0029.py b/InvenTree/part/migrations/0096_auto_20230211_0029.py new file mode 100644 index 0000000000..dce4afcdd8 --- /dev/null +++ b/InvenTree/part/migrations/0096_auto_20230211_0029.py @@ -0,0 +1,36 @@ +# Generated by Django 3.2.16 on 2023-02-11 00:29 + +import InvenTree.fields +from django.db import migrations +import djmoney.models.fields +import djmoney.models.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0095_alter_part_responsible'), + ] + + operations = [ + migrations.AddField( + model_name='partstocktake', + name='cost_max', + field=InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Estimated maximum cost of stock on hand', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Maximum Stock Cost'), + ), + migrations.AddField( + model_name='partstocktake', + name='cost_max_currency', + field=djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3), + ), + migrations.AddField( + model_name='partstocktake', + name='cost_min', + field=InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Estimated minimum cost of stock on hand', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Minimum Stock Cost'), + ), + migrations.AddField( + model_name='partstocktake', + name='cost_min_currency', + field=djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3), + ), + ] diff --git a/InvenTree/part/migrations/0097_partstocktakereport.py b/InvenTree/part/migrations/0097_partstocktakereport.py new file mode 100644 index 0000000000..a376ee2c88 --- /dev/null +++ b/InvenTree/part/migrations/0097_partstocktakereport.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.16 on 2023-02-12 08:29 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import part.models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('part', '0096_auto_20230211_0029'), + ] + + operations = [ + migrations.CreateModel( + name='PartStocktakeReport', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField(auto_now_add=True, verbose_name='Date')), + ('report', models.FileField(help_text='Stocktake report file (generated internally)', upload_to=part.models.save_stocktake_report, verbose_name='Report')), + ('user', models.ForeignKey(blank=True, help_text='User who requested this stocktake report', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stocktake_reports', to=settings.AUTH_USER_MODEL, verbose_name='User')), + ], + ), + ] diff --git a/InvenTree/part/migrations/0098_auto_20230214_1115.py b/InvenTree/part/migrations/0098_auto_20230214_1115.py new file mode 100644 index 0000000000..dd28185fee --- /dev/null +++ b/InvenTree/part/migrations/0098_auto_20230214_1115.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.16 on 2023-02-14 11:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0097_partstocktakereport'), + ] + + operations = [ + migrations.AddField( + model_name='partstocktake', + name='item_count', + field=models.IntegerField(default=1, help_text='Number of individual stock entries at time of stocktake', verbose_name='Item Count'), + ), + migrations.AddField( + model_name='partstocktakereport', + name='part_count', + field=models.IntegerField(default=0, help_text='Number of parts covered by stocktake', verbose_name='Part Count'), + ), + ] diff --git a/InvenTree/part/migrations/0099_alter_bomitem_inherited.py b/InvenTree/part/migrations/0099_alter_bomitem_inherited.py new file mode 100644 index 0000000000..f424e13143 --- /dev/null +++ b/InvenTree/part/migrations/0099_alter_bomitem_inherited.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-02-23 11:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0098_auto_20230214_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='bomitem', + name='inherited', + field=models.BooleanField(default=False, help_text='This BOM item is inherited by BOMs for variant parts', verbose_name='Gets inherited'), + ), + ] diff --git a/InvenTree/part/migrations/0100_alter_bomitem_reference.py b/InvenTree/part/migrations/0100_alter_bomitem_reference.py new file mode 100644 index 0000000000..8e403125e0 --- /dev/null +++ b/InvenTree/part/migrations/0100_alter_bomitem_reference.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-03-08 21:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0099_alter_bomitem_inherited'), + ] + + operations = [ + migrations.AlterField( + model_name='bomitem', + name='reference', + field=models.CharField(blank=True, help_text='BOM item reference', max_length=5000, verbose_name='Reference'), + ), + ] diff --git a/InvenTree/part/migrations/0101_bomitem_validated.py b/InvenTree/part/migrations/0101_bomitem_validated.py new file mode 100644 index 0000000000..977095e287 --- /dev/null +++ b/InvenTree/part/migrations/0101_bomitem_validated.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-03-14 01:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0100_alter_bomitem_reference'), + ] + + operations = [ + migrations.AddField( + model_name='bomitem', + name='validated', + field=models.BooleanField(default=False, help_text='This BOM item has been validated', verbose_name='Validated'), + ), + ] diff --git a/InvenTree/part/migrations/0102_auto_20230314_0112.py b/InvenTree/part/migrations/0102_auto_20230314_0112.py new file mode 100644 index 0000000000..f0fb735193 --- /dev/null +++ b/InvenTree/part/migrations/0102_auto_20230314_0112.py @@ -0,0 +1,113 @@ +# Generated by Django 3.2.18 on 2023-03-14 01:12 + +import hashlib +import logging + +from django.db import migrations +from jinja2 import Template + +from InvenTree.helpers import normalize + + +logger = logging.getLogger('inventree') + + +def update_bom_item(apps, schema_editor): + """Update all existing BomItem instances, and cache the 'validated' field. + + The 'validated' field denotes whether this individual BomItem has been validated, + which previously was calculated on the fly (which was very expensive). + """ + + BomItem = apps.get_model('part', 'bomitem') + InvenTreeSetting = apps.get_model('common', 'inventreesetting') + + n = BomItem.objects.count() + + if n > 0: + + for item in BomItem.objects.all(): + """For each item, we need to re-calculate the "checksum", based on the *old* routine. + Note that as we cannot access the ORM models, we have to do this "by hand" + """ + + # Construct the 'full_name' for the sub_part (this is no longer required, but *was* required at point of migration) + try: + setting = InvenTreeSetting.objects.get(key='PART_NAME_FORMAT') + full_name_pattern = str(setting.value) + except Exception: + full_name_pattern = "{{ part.IPN if part.IPN }}{{ ' | ' if part.IPN }}{{ part.name }}{{ ' | ' if part.revision }}{{ part.revision if part.revision }}" + + template = Template(full_name_pattern) + + full_name = template.render({'part': item.sub_part}) + + # Calculate the OLD checksum manually for this BomItem + old_hash = hashlib.md5(str(item.pk).encode()) + old_hash.update(str(item.sub_part.pk).encode()) + old_hash.update(str(full_name).encode()) + old_hash.update(str(item.quantity).encode()) + old_hash.update(str(item.note).encode()) + old_hash.update(str(item.reference).encode()) + old_hash.update(str(item.optional).encode()) + old_hash.update(str(item.inherited).encode()) + + if item.consumable: + old_hash.update(str(item.consumable).encode()) + + if item.allow_variants: + old_hash.update(str(item.allow_variants).encode()) + + checksum = str(old_hash.digest()) + + # Now, update the 'validated' field based on whether the checksum is 'valid' or not + item.validated = item.checksum == checksum + + """Next, we need to update the item with a "new" hash, with the following differences: + - Uses the PK of the 'part', not the BomItem itself, + - Does not use the 'full_name' of the linked 'sub_part' + - Does not use the 'note' field + """ + + if item.validated: + + new_hash = hashlib.md5(''.encode()) + + components = [ + item.part.pk, + item.sub_part.pk, + normalize(item.quantity), + item.reference, + item.optional, + item.inherited, + item.consumable, + item.allow_variants + ] + + for component in components: + new_hash.update(str(component).encode()) + + item.checksum = str(new_hash.digest()) + + item.save() + + logger.info(f"Updated 'validated' flag for {n} BomItem objects") + + +def meti_mob_etadpu(apps, schema_editor): + """Provided for reverse compatibility""" + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0101_bomitem_validated'), + ] + + operations = [ + migrations.RunPython( + update_bom_item, + reverse_code=meti_mob_etadpu + ) + ] diff --git a/InvenTree/part/migrations/0103_auto_20230317_0816.py b/InvenTree/part/migrations/0103_auto_20230317_0816.py new file mode 100644 index 0000000000..4259c9b520 --- /dev/null +++ b/InvenTree/part/migrations/0103_auto_20230317_0816.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0102_auto_20230314_0112'), + ] + + operations = [ + migrations.AddField( + model_name='bomitem', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='partparametertemplate', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/part/migrations/0104_alter_part_description.py b/InvenTree/part/migrations/0104_alter_part_description.py new file mode 100644 index 0000000000..750e21f46b --- /dev/null +++ b/InvenTree/part/migrations/0104_alter_part_description.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-04-12 17:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0103_auto_20230317_0816'), + ] + + operations = [ + migrations.AlterField( + model_name='part', + name='description', + field=models.CharField(blank=True, help_text='Part description (optional)', max_length=250, verbose_name='Description'), + ), + ] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index c91d0d393f..89bbc5df26 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -6,6 +6,7 @@ import decimal import hashlib import logging import os +import re from datetime import datetime, timedelta from decimal import Decimal, InvalidOperation @@ -36,7 +37,6 @@ import common.settings import InvenTree.fields import InvenTree.ready import InvenTree.tasks -import part.filters as part_filters import part.settings as part_settings from build import models as BuildModels from common.models import InvenTreeSetting @@ -66,6 +66,11 @@ class PartCategory(MetadataMixin, InvenTreeTree): default_keywords: Default keywords for parts created in this category """ + class Meta: + """Metaclass defines extra model properties""" + verbose_name = _("Part Category") + verbose_name_plural = _("Part Categories") + def delete_recursive(self, *args, **kwargs): """This function handles the recursive deletion of subcategories depending on kwargs contents""" delete_parts = kwargs.get('delete_parts', False) @@ -154,11 +159,6 @@ class PartCategory(MetadataMixin, InvenTreeTree): "are already assigned to it!")) super().clean() - class Meta: - """Metaclass defines extra model properties""" - verbose_name = _("Part Category") - verbose_name_plural = _("Part Categories") - def get_parts(self, cascade=True) -> set[Part]: """Return a queryset for all parts under this category. @@ -443,9 +443,6 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): If the part image has been updated, then check if the "old" (previous) image is still used by another part. If not, it is considered "orphaned" and will be deleted. """ - # Get category templates settings - - add_category_templates = kwargs.pop('add_category_templates', False) if self.pk: previous = Part.objects.get(pk=self.pk) @@ -469,34 +466,6 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): 'variant_of': _('Invalid choice for parent part'), }) - if add_category_templates: - # Get part category - category = self.category - - if category is not None: - - template_list = [] - - parent_categories = category.get_ancestors(include_self=True) - - for category in parent_categories: - for template in category.get_parameter_templates(): - # Check that template wasn't already added - if template.parameter_template not in template_list: - - template_list.append(template.parameter_template) - - try: - PartParameter.create( - part=self, - template=template.parameter_template, - data=template.default_value, - save=True - ) - except IntegrityError: - # PartParameter already exists - pass - def __str__(self): """Return a string representation of the Part (for use in the admin interface)""" return f"{self.full_name} - {self.description}" @@ -569,7 +538,60 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): return result - def validate_serial_number(self, serial: str, stock_item=None, check_duplicates=True, raise_error=False): + def validate_name(self, raise_error=True): + """Validate the name field for this Part instance + + This function is exposed to any Validation plugins, and thus can be customized. + """ + + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + # Run the name through each custom validator + # If the plugin returns 'True' we will skip any subsequent validation + + try: + result = plugin.validate_part_name(self.name, self) + if result: + return + except ValidationError as exc: + if raise_error: + raise ValidationError({ + 'name': exc.message, + }) + + def validate_ipn(self, raise_error=True): + """Ensure that the IPN (internal part number) is valid for this Part" + + - Validation is handled by custom plugins + - By default, no validation checks are perfomed + """ + + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + try: + result = plugin.validate_part_ipn(self.IPN, self) + + if result: + # A "true" result force skips any subsequent checks + break + except ValidationError as exc: + if raise_error: + raise ValidationError({ + 'IPN': exc.message + }) + + # If we get to here, none of the plugins have raised an error + pattern = common.models.InvenTreeSetting.get_setting('PART_IPN_REGEX', '', create=False).strip() + + if pattern: + match = re.search(pattern, self.IPN) + + if match is None: + raise ValidationError(_('IPN must match regex pattern {pat}').format(pat=pattern)) + + def validate_serial_number(self, serial: str, stock_item=None, check_duplicates=True, raise_error=False, **kwargs): """Validate a serial number against this Part instance. Note: This function is exposed to any Validation plugins, and thus can be customized. @@ -601,7 +623,7 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): for plugin in registry.with_mixin('validation'): # Run the serial number through each custom validator # If the plugin returns 'True' we will skip any subsequent validation - if plugin.validate_serial_number(serial): + if plugin.validate_serial_number(serial, self): return True except ValidationError as exc: if raise_error: @@ -651,7 +673,7 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): conflicts = [] for serial in serials: - if not self.validate_serial_number(serial): + if not self.validate_serial_number(serial, part=self): conflicts.append(serial) return conflicts @@ -747,7 +769,7 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): return helpers.getBlankThumbnail() def validate_unique(self, exclude=None): - """Validate that a part is 'unique'. + """Validate that this Part instance is 'unique'. Uniqueness is checked across the following (case insensitive) fields: - Name @@ -796,6 +818,12 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): if type(self.IPN) is str: self.IPN = self.IPN.strip() + # Run custom validation for the IPN field + self.validate_ipn() + + # Run custom validation for the name field + self.validate_name() + if self.trackable: for part in self.get_used_in().all(): @@ -808,7 +836,6 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): max_length=100, blank=False, help_text=_('Part name'), verbose_name=_('Name'), - validators=[validators.validate_part_name] ) is_template = models.BooleanField( @@ -829,9 +856,9 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): ) description = models.CharField( - max_length=250, blank=False, + max_length=250, blank=True, verbose_name=_('Description'), - help_text=_('Part description') + help_text=_('Part description (optional)') ) keywords = models.CharField( @@ -852,7 +879,6 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): max_length=100, blank=True, null=True, verbose_name=_('IPN'), help_text=_('Internal Part Number'), - validators=[validators.validate_part_ipn] ) revision = models.CharField( @@ -1196,6 +1222,9 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): @property def can_build(self): """Return the number of units that can be build with available stock.""" + + import part.filters + # If this part does NOT have a BOM, result is simply the currently available stock if not self.has_bom: return 0 @@ -1219,9 +1248,9 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): # Annotate the 'available stock' for each part in the BOM ref = 'sub_part__' queryset = queryset.alias( - total_stock=part_filters.annotate_total_stock(reference=ref), - so_allocations=part_filters.annotate_sales_order_allocations(reference=ref), - bo_allocations=part_filters.annotate_build_order_allocations(reference=ref), + total_stock=part.filters.annotate_total_stock(reference=ref), + so_allocations=part.filters.annotate_sales_order_allocations(reference=ref), + bo_allocations=part.filters.annotate_build_order_allocations(reference=ref), ) # Calculate the 'available stock' based on previous annotations @@ -1235,9 +1264,9 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): # Extract similar information for any 'substitute' parts ref = 'substitutes__part__' queryset = queryset.alias( - sub_total_stock=part_filters.annotate_total_stock(reference=ref), - sub_so_allocations=part_filters.annotate_sales_order_allocations(reference=ref), - sub_bo_allocations=part_filters.annotate_build_order_allocations(reference=ref), + sub_total_stock=part.filters.annotate_total_stock(reference=ref), + sub_so_allocations=part.filters.annotate_sales_order_allocations(reference=ref), + sub_bo_allocations=part.filters.annotate_build_order_allocations(reference=ref), ) queryset = queryset.annotate( @@ -1248,12 +1277,12 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): ) # Extract similar information for any 'variant' parts - variant_stock_query = part_filters.variant_stock_query(reference='sub_part__') + variant_stock_query = part.filters.variant_stock_query(reference='sub_part__') queryset = queryset.alias( - var_total_stock=part_filters.annotate_variant_quantity(variant_stock_query, reference='quantity'), - var_bo_allocations=part_filters.annotate_variant_quantity(variant_stock_query, reference='allocations__quantity'), - var_so_allocations=part_filters.annotate_variant_quantity(variant_stock_query, reference='sales_order_allocations__quantity'), + var_total_stock=part.filters.annotate_variant_quantity(variant_stock_query, reference='quantity'), + var_bo_allocations=part.filters.annotate_variant_quantity(variant_stock_query, reference='allocations__quantity'), + var_so_allocations=part.filters.annotate_variant_quantity(variant_stock_query, reference='sales_order_allocations__quantity'), ) queryset = queryset.annotate( @@ -1709,18 +1738,32 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): return pricing - def schedule_pricing_update(self): + def schedule_pricing_update(self, create: bool = False): """Helper function to schedule a pricing update. Importantly, catches any errors which may occur during deletion of related objects, in particular due to post_delete signals. Ref: https://github.com/inventree/InvenTree/pull/3986 + + Arguments: + create: Whether or not a new PartPricing object should be created if it does not already exist """ try: - self.pricing.schedule_for_update() - except (PartPricing.DoesNotExist, IntegrityError): + self.refresh_from_db() + except Part.DoesNotExist: + return + + try: + pricing = self.pricing + + if create or pricing.pk: + pricing.schedule_for_update() + except IntegrityError: + # If this part instance has been deleted, + # some post-delete or post-save signals may still be fired + # which can cause issues down the track pass def get_price_info(self, quantity=1, buy=True, bom=True, internal=False): @@ -2042,6 +2085,16 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel): return tests + def getTestTemplateMap(self, **kwargs): + """Return a map of all test templates associated with this Part""" + + templates = {} + + for template in self.getTestTemplates(**kwargs): + templates[template.key] = template + + return templates + def getRequiredTests(self): """Return the tests which are required by this part""" return self.getTestTemplates(required=True) @@ -2294,10 +2347,16 @@ class PartPricing(common.models.MetaMixin): def schedule_for_update(self, counter: int = 0): """Schedule this pricing to be updated""" + if not self.part or not self.part.pk or not Part.objects.filter(pk=self.part.pk).exists(): + logger.warning("Referenced part instance does not exist - skipping pricing update.") + return + try: - self.refresh_from_db() + if self.pk: + self.refresh_from_db() except (PartPricing.DoesNotExist, IntegrityError): # Error thrown if this PartPricing instance has already been removed + logger.warning(f"Error refreshing PartPricing instance for part '{self.part}'") return # Ensure that the referenced part still exists in the database @@ -2305,16 +2364,17 @@ class PartPricing(common.models.MetaMixin): p = self.part p.refresh_from_db() except IntegrityError: + logger.error(f"Could not update PartPricing as Part '{self.part}' does not exist") return if self.scheduled_for_update: # Ignore if the pricing is already scheduled to be updated - logger.info(f"Pricing for {p} already scheduled for update - skipping") + logger.debug(f"Pricing for {p} already scheduled for update - skipping") return if counter > 25: # Prevent infinite recursion / stack depth issues - logger.info(counter, f"Skipping pricing update for {p} - maximum depth exceeded") + logger.debug(counter, f"Skipping pricing update for {p} - maximum depth exceeded") return try: @@ -2322,6 +2382,7 @@ class PartPricing(common.models.MetaMixin): self.save() except IntegrityError: # An IntegrityError here likely indicates that the referenced part has already been deleted + logger.error(f"Could not save PartPricing for part '{self.part}' to the database") return import part.tasks as part_tasks @@ -2335,7 +2396,7 @@ class PartPricing(common.models.MetaMixin): force_async=True ) - def update_pricing(self, counter: int = 0): + def update_pricing(self, counter: int = 0, cascade: bool = True): """Recalculate all cost data for the referenced Part instance""" if self.pk is not None: @@ -2362,8 +2423,9 @@ class PartPricing(common.models.MetaMixin): pass # Update parent assemblies and templates - self.update_assemblies(counter) - self.update_templates(counter) + if cascade: + self.update_assemblies(counter) + self.update_templates(counter) def update_assemblies(self, counter: int = 0): """Schedule updates for any assemblies which use this part""" @@ -2890,6 +2952,7 @@ class PartStocktake(models.Model): A 'stocktake' is a representative count of available stock: - Performed on a given date - Records quantity of part in stock (across multiple stock items) + - Records estimated value of "stock on hand" - Records user information """ @@ -2901,6 +2964,12 @@ class PartStocktake(models.Model): help_text=_('Part for stocktake'), ) + item_count = models.IntegerField( + default=1, + verbose_name=_('Item Count'), + help_text=_('Number of individual stock entries at time of stocktake'), + ) + quantity = models.DecimalField( max_digits=19, decimal_places=5, validators=[MinValueValidator(0)], @@ -2929,6 +2998,18 @@ class PartStocktake(models.Model): help_text=_('User who performed this stocktake'), ) + cost_min = InvenTree.fields.InvenTreeModelMoneyField( + null=True, blank=True, + verbose_name=_('Minimum Stock Cost'), + help_text=_('Estimated minimum cost of stock on hand'), + ) + + cost_max = InvenTree.fields.InvenTreeModelMoneyField( + null=True, blank=True, + verbose_name=_('Maximum Stock Cost'), + help_text=_('Estimated maximum cost of stock on hand'), + ) + @receiver(post_save, sender=PartStocktake, dispatch_uid='post_save_stocktake') def update_last_stocktake(sender, instance, created, **kwargs): @@ -2944,6 +3025,68 @@ def update_last_stocktake(sender, instance, created, **kwargs): pass +def save_stocktake_report(instance, filename): + """Save stocktake reports to the correct subdirectory""" + + filename = os.path.basename(filename) + return os.path.join('stocktake', 'report', filename) + + +class PartStocktakeReport(models.Model): + """A PartStocktakeReport is a generated report which provides a summary of current stock on hand. + + Reports are generated by the background worker process, and saved as .csv files for download. + Background processing is preferred as (for very large datasets), report generation may take a while. + + A report can be manually requested by a user, or automatically generated periodically. + + When generating a report, the "parts" to be reported can be filtered, e.g. by "category". + + A stocktake report contains the following information, with each row relating to a single Part instance: + + - Number of individual stock items on hand + - Total quantity of stock on hand + - Estimated total cost of stock on hand (min:max range) + """ + + def __str__(self): + """Construct a simple string representation for the report""" + return os.path.basename(self.report.name) + + def get_absolute_url(self): + """Return the URL for the associaed report file for download""" + if self.report: + return self.report.url + else: + return None + + date = models.DateField( + verbose_name=_('Date'), + auto_now_add=True + ) + + report = models.FileField( + upload_to=save_stocktake_report, + unique=False, blank=False, + verbose_name=_('Report'), + help_text=_('Stocktake report file (generated internally)'), + ) + + part_count = models.IntegerField( + default=0, + verbose_name=_('Part Count'), + help_text=_('Number of parts covered by stocktake'), + ) + + user = models.ForeignKey( + User, blank=True, null=True, + on_delete=models.SET_NULL, + related_name='stocktake_reports', + verbose_name=_('User'), + help_text=_('User who requested this stocktake report'), + ) + + class PartAttachment(InvenTreeAttachment): """Model for storing file attachments against a Part object.""" @@ -2963,6 +3106,10 @@ class PartAttachment(InvenTreeAttachment): class PartSellPriceBreak(common.models.PriceBreak): """Represents a price break for selling this part.""" + class Meta: + """Metaclass providing extra model definition""" + unique_together = ('part', 'quantity') + @staticmethod def get_api_url(): """Return the list API endpoint URL associated with the PartSellPriceBreak model""" @@ -2975,14 +3122,14 @@ class PartSellPriceBreak(common.models.PriceBreak): verbose_name=_('Part') ) - class Meta: - """Metaclass providing extra model definition""" - unique_together = ('part', 'quantity') - class PartInternalPriceBreak(common.models.PriceBreak): """Represents a price break for internally selling this part.""" + class Meta: + """Metaclass providing extra model definition""" + unique_together = ('part', 'quantity') + @staticmethod def get_api_url(): """Return the list API endpoint URL associated with the PartInternalPriceBreak model""" @@ -2994,10 +3141,6 @@ class PartInternalPriceBreak(common.models.PriceBreak): verbose_name=_('Part') ) - class Meta: - """Metaclass providing extra model definition""" - unique_together = ('part', 'quantity') - class PartStar(models.Model): """A PartStar object creates a subscription relationship between a User and a Part. @@ -3009,10 +3152,6 @@ class PartStar(models.Model): user: Link to a User object """ - part = models.ForeignKey(Part, on_delete=models.CASCADE, verbose_name=_('Part'), related_name='starred_users') - - user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('User'), related_name='starred_parts') - class Meta: """Metaclass providing extra model definition""" unique_together = [ @@ -3020,6 +3159,10 @@ class PartStar(models.Model): 'user' ] + part = models.ForeignKey(Part, on_delete=models.CASCADE, verbose_name=_('Part'), related_name='starred_users') + + user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('User'), related_name='starred_parts') + class PartCategoryStar(models.Model): """A PartCategoryStar creates a subscription relationship between a User and a PartCategory. @@ -3029,10 +3172,6 @@ class PartCategoryStar(models.Model): user: Link to a User object """ - category = models.ForeignKey(PartCategory, on_delete=models.CASCADE, verbose_name=_('Category'), related_name='starred_users') - - user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('User'), related_name='starred_categories') - class Meta: """Metaclass providing extra model definition""" unique_together = [ @@ -3040,6 +3179,10 @@ class PartCategoryStar(models.Model): 'user', ] + category = models.ForeignKey(PartCategory, on_delete=models.CASCADE, verbose_name=_('Category'), related_name='starred_users') + + user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('User'), related_name='starred_categories') + class PartTestTemplate(models.Model): """A PartTestTemplate defines a 'template' for a test which is required to be run against a StockItem (an instance of the Part). @@ -3146,7 +3289,7 @@ def validate_template_name(name): """Placeholder for legacy function used in migrations.""" -class PartParameterTemplate(models.Model): +class PartParameterTemplate(MetadataMixin, models.Model): """A PartParameterTemplate provides a template for key:value pairs for extra parameters fields/values to be added to a Part. This allows users to arbitrarily assign data fields to a Part beyond the built-in attributes. @@ -3210,6 +3353,11 @@ class PartParameter(models.Model): data: The data (value) of the Parameter [string] """ + class Meta: + """Metaclass providing extra model definition""" + # Prevent multiple instances of a parameter for a single part + unique_together = ('part', 'template') + @staticmethod def get_api_url(): """Return the list API endpoint URL associated with the PartParameter model""" @@ -3224,11 +3372,6 @@ class PartParameter(models.Model): units=str(self.template.units) ) - class Meta: - """Metaclass providing extra model definition""" - # 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', verbose_name=_('Part'), help_text=_('Parent Part')) template = models.ForeignKey(PartParameterTemplate, on_delete=models.CASCADE, related_name='instances', verbose_name=_('Template'), help_text=_('Parameter Template')) @@ -3288,7 +3431,7 @@ class PartCategoryParameterTemplate(models.Model): help_text=_('Default Parameter Value')) -class BomItem(DataImportMixin, models.Model): +class BomItem(DataImportMixin, MetadataMixin, models.Model): """A BomItem links a part to its component items. A part can have a BOM (bill of materials) which defines @@ -3342,6 +3485,17 @@ class BomItem(DataImportMixin, models.Model): } } + class Meta: + """Metaclass providing extra model definition""" + verbose_name = _("BOM Item") + + def __str__(self): + """Return a string representation of this BomItem instance""" + return "{n} x {child} to make {parent}".format( + parent=self.part.full_name, + child=self.sub_part.full_name, + n=decimal2string(self.quantity)) + @staticmethod def get_api_url(): """Return the list API endpoint URL associated with the BomItem model""" @@ -3401,6 +3555,10 @@ class BomItem(DataImportMixin, models.Model): def save(self, *args, **kwargs): """Enforce 'clean' operation when saving a BomItem instance""" self.clean() + + # Update the 'validated' field based on checksum calculation + self.validated = self.is_line_valid + super().save(*args, **kwargs) # A link to the parent part @@ -3441,16 +3599,25 @@ class BomItem(DataImportMixin, models.Model): help_text=_('Estimated build wastage quantity (absolute or percentage)') ) - reference = models.CharField(max_length=500, blank=True, verbose_name=_('Reference'), help_text=_('BOM item reference')) + reference = models.CharField(max_length=5000, 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, verbose_name=_('Note'), help_text=_('BOM item notes')) - checksum = models.CharField(max_length=128, blank=True, verbose_name=_('Checksum'), help_text=_('BOM line checksum')) + checksum = models.CharField( + max_length=128, blank=True, + verbose_name=_('Checksum'), help_text=_('BOM line checksum') + ) + + validated = models.BooleanField( + default=False, + verbose_name=_('Validated'), + help_text=_('This BOM item has been validated') + ) inherited = models.BooleanField( default=False, - verbose_name=_('Inherited'), + verbose_name=_('Gets inherited'), help_text=_('This BOM item is inherited by BOMs for variant parts'), ) @@ -3464,32 +3631,32 @@ class BomItem(DataImportMixin, models.Model): """Calculate the checksum hash of this BOM line item. The hash is calculated from the following fields: - - Part.full_name (if the part name changes, the BOM checksum is invalidated) - - Quantity - - Reference field - - Note field - - Optional field - - Inherited field + - part.pk + - sub_part.pk + - quantity + - reference + - optional + - inherited + - consumable + - allow_variants """ # Seed the hash with the ID of this BOM item - result_hash = hashlib.md5(str(self.id).encode()) + result_hash = hashlib.md5(''.encode()) - # Update the hash based on line information - result_hash.update(str(self.sub_part.id).encode()) - result_hash.update(str(self.sub_part.full_name).encode()) - result_hash.update(str(self.quantity).encode()) - result_hash.update(str(self.note).encode()) - result_hash.update(str(self.reference).encode()) - result_hash.update(str(self.optional).encode()) - result_hash.update(str(self.inherited).encode()) + # The following components are used to calculate the checksum + components = [ + self.part.pk, + self.sub_part.pk, + normalize(self.quantity), + self.reference, + self.optional, + self.inherited, + self.consumable, + self.allow_variants + ] - # Optionally encoded for backwards compatibility - if self.consumable: - result_hash.update(str(self.consumable).encode()) - - # Optionally encoded for backwards compatibility - if self.allow_variants: - result_hash.update(str(self.allow_variants).encode()) + for component in components: + result_hash.update(str(component).encode()) return str(result_hash.digest()) @@ -3500,7 +3667,7 @@ class BomItem(DataImportMixin, models.Model): valid: If true, validate the hash, otherwise invalidate it (default = True) """ if valid: - self.checksum = str(self.get_item_hash()) + self.checksum = self.get_item_hash() else: self.checksum = '' @@ -3556,17 +3723,6 @@ class BomItem(DataImportMixin, models.Model): except Part.DoesNotExist: raise ValidationError({'sub_part': _('Sub part must be specified')}) - class Meta: - """Metaclass providing extra model definition""" - verbose_name = _("BOM Item") - - def __str__(self): - """Return a string representation of this BomItem instance""" - return "{n} x {child} to make {parent}".format( - parent=self.part.full_name, - child=self.sub_part.full_name, - n=decimal2string(self.quantity)) - def get_overage_quantity(self, quantity): """Calculate overage quantity.""" # Most of the time overage string will be empty @@ -3657,7 +3813,7 @@ def update_pricing_after_edit(sender, instance, created, **kwargs): # Update part pricing *unless* we are importing data if InvenTree.ready.canAppAccessDatabase() and not InvenTree.ready.isImportingData(): - instance.part.schedule_pricing_update() + instance.part.schedule_pricing_update(create=True) @receiver(post_delete, sender=BomItem, dispatch_uid='post_delete_bom_item') @@ -3668,7 +3824,7 @@ def update_pricing_after_delete(sender, instance, **kwargs): # Update part pricing *unless* we are importing data if InvenTree.ready.canAppAccessDatabase() and not InvenTree.ready.isImportingData(): - instance.part.schedule_pricing_update() + instance.part.schedule_pricing_update(create=False) class BomItemSubstitute(models.Model): diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 9745275407..3646df6fe5 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -2,11 +2,12 @@ import imghdr import io +import logging from decimal import Decimal from django.core.files.base import ContentFile from django.core.validators import MinValueValidator -from django.db import models, transaction +from django.db import IntegrityError, models, transaction from django.db.models import ExpressionWrapper, F, FloatField, Q from django.db.models.functions import Coalesce from django.urls import reverse_lazy @@ -15,33 +16,58 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from sql_util.utils import SubqueryCount, SubquerySum +import common.models import company.models import InvenTree.helpers +import InvenTree.status import part.filters +import part.tasks import stock.models -from common.settings import currency_code_default, currency_code_mappings from InvenTree.serializers import (DataFileExtractSerializer, DataFileUploadSerializer, InvenTreeAttachmentSerializer, InvenTreeAttachmentSerializerField, + InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeImageSerializerField, InvenTreeModelSerializer, InvenTreeMoneySerializer, RemoteImageMixin, UserSerializer) from InvenTree.status_codes import BuildStatus +from InvenTree.tasks import offload_task from .models import (BomItem, BomItemSubstitute, Part, PartAttachment, PartCategory, PartCategoryParameterTemplate, PartInternalPriceBreak, PartParameter, PartParameterTemplate, PartPricing, PartRelated, PartSellPriceBreak, PartStar, PartStocktake, - PartTestTemplate) + PartStocktakeReport, PartTestTemplate) + +logger = logging.getLogger("inventree") class CategorySerializer(InvenTreeModelSerializer): """Serializer for PartCategory.""" + class Meta: + """Metaclass defining serializer fields""" + model = PartCategory + fields = [ + 'pk', + 'name', + 'description', + 'default_location', + 'default_keywords', + 'level', + 'parent', + 'part_count', + 'pathstring', + 'starred', + 'url', + 'structural', + 'icon', + ] + def get_starred(self, category): """Return True if the category is directly "starred" by the current user.""" return category in self.context.get('starred_categories', []) @@ -65,25 +91,6 @@ class CategorySerializer(InvenTreeModelSerializer): starred = serializers.SerializerMethodField() - class Meta: - """Metaclass defining serializer fields""" - model = PartCategory - fields = [ - 'pk', - 'name', - 'description', - 'default_location', - 'default_keywords', - 'level', - 'parent', - 'part_count', - 'pathstring', - 'starred', - 'url', - 'structural', - 'icon', - ] - class CategoryTree(InvenTreeModelSerializer): """Serializer for PartCategory tree.""" @@ -106,28 +113,14 @@ class PartAttachmentSerializer(InvenTreeAttachmentSerializer): """Metaclass defining serializer fields""" model = PartAttachment - fields = [ - 'pk', + fields = InvenTreeAttachmentSerializer.attachment_fields([ 'part', - 'attachment', - 'filename', - 'link', - 'comment', - 'upload_date', - 'user', - 'user_detail', - ] - - read_only_fields = [ - 'upload_date', - ] + ]) class PartTestTemplateSerializer(InvenTreeModelSerializer): """Serializer for the PartTestTemplate class.""" - key = serializers.CharField(read_only=True) - class Meta: """Metaclass defining serializer fields""" model = PartTestTemplate @@ -143,23 +136,12 @@ class PartTestTemplateSerializer(InvenTreeModelSerializer): 'requires_attachment', ] + key = serializers.CharField(read_only=True) + class PartSalePriceSerializer(InvenTreeModelSerializer): """Serializer for sale prices for Part model.""" - quantity = InvenTreeDecimalField() - - price = InvenTreeMoneySerializer( - allow_null=True - ) - - price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - default=currency_code_default, - label=_('Currency'), - help_text=_('Purchase currency of this stock item'), - ) - class Meta: """Metaclass defining serializer fields""" model = PartSellPriceBreak @@ -171,23 +153,16 @@ class PartSalePriceSerializer(InvenTreeModelSerializer): 'price_currency', ] + quantity = InvenTreeDecimalField() + + price = InvenTreeMoneySerializer(allow_null=True) + + price_currency = InvenTreeCurrencySerializer(help_text=_('Purchase currency of this stock item')) + class PartInternalPriceSerializer(InvenTreeModelSerializer): """Serializer for internal prices for Part model.""" - quantity = InvenTreeDecimalField() - - price = InvenTreeMoneySerializer( - allow_null=True - ) - - price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - default=currency_code_default, - label=_('Currency'), - help_text=_('Purchase currency of this stock item'), - ) - class Meta: """Metaclass defining serializer fields""" model = PartInternalPriceBreak @@ -199,6 +174,14 @@ class PartInternalPriceSerializer(InvenTreeModelSerializer): 'price_currency', ] + quantity = InvenTreeDecimalField() + + price = InvenTreeMoneySerializer( + allow_null=True + ) + + price_currency = InvenTreeCurrencySerializer(help_text=_('Purchase currency of this stock item')) + class PartThumbSerializer(serializers.Serializer): """Serializer for the 'image' field of the Part model. @@ -213,6 +196,13 @@ class PartThumbSerializer(serializers.Serializer): class PartThumbSerializerUpdate(InvenTreeModelSerializer): """Serializer for updating Part thumbnail.""" + class Meta: + """Metaclass defining serializer fields""" + model = Part + fields = [ + 'image', + ] + def validate_image(self, value): """Check that file is an image.""" validate = imghdr.what(value) @@ -222,13 +212,6 @@ class PartThumbSerializerUpdate(InvenTreeModelSerializer): image = InvenTreeAttachmentSerializerField(required=True) - class Meta: - """Metaclass defining serializer fields""" - model = Part - fields = [ - 'image', - ] - class PartParameterTemplateSerializer(InvenTreeModelSerializer): """JSON serializer for the PartParameterTemplate model.""" @@ -247,6 +230,17 @@ class PartParameterTemplateSerializer(InvenTreeModelSerializer): class PartParameterSerializer(InvenTreeModelSerializer): """JSON serializers for the PartParameter model.""" + class Meta: + """Metaclass defining serializer fields""" + model = PartParameter + fields = [ + 'pk', + 'part', + 'template', + 'template_detail', + 'data' + ] + def __init__(self, *args, **kwargs): """Custom initialization method for the serializer. @@ -262,23 +256,10 @@ class PartParameterSerializer(InvenTreeModelSerializer): template_detail = PartParameterTemplateSerializer(source='template', many=False, read_only=True) - class Meta: - """Metaclass defining serializer fields""" - model = PartParameter - fields = [ - 'pk', - 'part', - 'template', - 'template_detail', - 'data' - ] - class PartBriefSerializer(InvenTreeModelSerializer): """Serializer for Part (brief detail)""" - thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) - class Meta: """Metaclass defining serializer fields""" model = Part @@ -300,12 +281,20 @@ class PartBriefSerializer(InvenTreeModelSerializer): 'trackable', 'virtual', 'units', + 'pricing_min', + 'pricing_max', ] read_only_fields = [ 'barcode_hash', ] + thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) + + # Pricing fields + pricing_min = InvenTreeMoneySerializer(source='pricing_data.overall_min', allow_null=True, read_only=True) + pricing_max = InvenTreeMoneySerializer(source='pricing_data.overall_max', allow_null=True, read_only=True) + class DuplicatePartSerializer(serializers.Serializer): """Serializer for specifying options when duplicating a Part. @@ -420,6 +409,91 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): Used when displaying all details of a single component. """ + class Meta: + """Metaclass defining serializer fields""" + model = Part + partial = True + fields = [ + 'active', + 'allocated_to_build_orders', + 'allocated_to_sales_orders', + 'assembly', + 'barcode_hash', + 'category', + 'category_detail', + 'component', + 'default_expiry', + 'default_location', + 'default_supplier', + 'description', + 'full_name', + 'image', + 'in_stock', + 'ordering', + 'building', + 'IPN', + 'is_template', + 'keywords', + 'last_stocktake', + 'link', + 'minimum_stock', + 'name', + 'notes', + 'parameters', + 'pk', + 'purchaseable', + 'remote_image', + 'revision', + 'salable', + 'starred', + 'stock_item_count', + 'suppliers', + 'thumbnail', + 'total_in_stock', + 'trackable', + 'unallocated_stock', + 'units', + 'variant_of', + 'variant_stock', + 'virtual', + 'pricing_min', + 'pricing_max', + 'responsible', + + # Fields only used for Part creation + 'duplicate', + 'initial_stock', + 'initial_supplier', + 'copy_category_parameters' + ] + + read_only_fields = [ + 'barcode_hash', + ] + + def __init__(self, *args, **kwargs): + """Custom initialization method for PartSerializer: + + - Allows us to optionally pass extra fields based on the query. + """ + self.starred_parts = kwargs.pop('starred_parts', []) + category_detail = kwargs.pop('category_detail', False) + parameters = kwargs.pop('parameters', False) + create = kwargs.pop('create', False) + + super().__init__(*args, **kwargs) + + if not category_detail: + self.fields.pop('category_detail') + + if not parameters: + self.fields.pop('parameters') + + if not create: + # These fields are only used for the LIST API endpoint + for f in self.skip_create_fields()[1:]: + self.fields.pop(f) + def get_api_url(self): """Return the API url associated with this serializer""" return reverse_lazy('api-part-list') @@ -433,36 +507,11 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): 'duplicate', 'initial_stock', 'initial_supplier', + 'copy_category_parameters' ] return fields - def __init__(self, *args, **kwargs): - """Custom initialization method for PartSerializer: - - - Allows us to optionally pass extra fields based on the query. - """ - self.starred_parts = kwargs.pop('starred_parts', []) - - category_detail = kwargs.pop('category_detail', False) - - parameters = kwargs.pop('parameters', False) - - create = kwargs.pop('create', False) - - super().__init__(*args, **kwargs) - - if category_detail is not True: - self.fields.pop('category_detail') - - if parameters is not True: - self.fields.pop('parameters') - - if create is not True: - # These fields are only used for the LIST API endpoint - for f in self.skip_create_fields()[1:]: - self.fields.pop(f) - @staticmethod def annotate_queryset(queryset): """Add some extra annotations to the queryset. @@ -512,11 +561,20 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): allocated_to_build_orders=part.filters.annotate_build_order_allocations(), ) + # Annotate the queryset with the 'total_in_stock' quantity + # This is the 'in_stock' quantity summed with the 'variant_stock' quantity + queryset = queryset.annotate( + total_in_stock=ExpressionWrapper( + F('in_stock') + F('variant_stock'), + output_field=models.DecimalField(), + ) + ) + # Annotate with the total 'available stock' quantity # This is the current stock, minus any allocations queryset = queryset.annotate( unallocated_stock=ExpressionWrapper( - F('in_stock') - F('allocated_to_sales_orders') - F('allocated_to_build_orders'), + F('total_in_stock') - F('allocated_to_sales_orders') - F('allocated_to_build_orders'), output_field=models.DecimalField(), ) ) @@ -537,6 +595,7 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): building = serializers.FloatField(read_only=True) in_stock = serializers.FloatField(read_only=True) variant_stock = serializers.FloatField(read_only=True) + total_in_stock = serializers.FloatField(read_only=True) ordering = serializers.FloatField(read_only=True) stock_item_count = serializers.IntegerField(read_only=True) suppliers = serializers.IntegerField(read_only=True) @@ -573,65 +632,11 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): write_only=True, required=False, ) - class Meta: - """Metaclass defining serializer fields""" - model = Part - partial = True - fields = [ - 'active', - 'allocated_to_build_orders', - 'allocated_to_sales_orders', - 'assembly', - 'barcode_hash', - 'category', - 'category_detail', - 'component', - 'default_expiry', - 'default_location', - 'default_supplier', - 'description', - 'full_name', - 'image', - 'in_stock', - 'variant_stock', - 'ordering', - 'building', - 'IPN', - 'is_template', - 'keywords', - 'last_stocktake', - 'link', - 'minimum_stock', - 'name', - 'notes', - 'parameters', - 'pk', - 'purchaseable', - 'remote_image', - 'revision', - 'salable', - 'starred', - 'stock_item_count', - 'suppliers', - 'thumbnail', - 'trackable', - 'unallocated_stock', - 'units', - 'variant_of', - 'virtual', - 'pricing_min', - 'pricing_max', - 'responsible', - - # Fields only used for Part creation - 'duplicate', - 'initial_stock', - 'initial_supplier', - ] - - read_only_fields = [ - 'barcode_hash', - ] + copy_category_parameters = serializers.BooleanField( + default=True, required=False, + label=_('Copy Category Parameters'), + help_text=_('Copy parameter templates from selected part category'), + ) @transaction.atomic def create(self, validated_data): @@ -640,9 +645,15 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): duplicate = validated_data.pop('duplicate', None) initial_stock = validated_data.pop('initial_stock', None) initial_supplier = validated_data.pop('initial_supplier', None) + copy_category_parameters = validated_data.pop('copy_category_parameters', False) instance = super().create(validated_data) + # Save user information + if self.context['request']: + instance.creation_user = self.context['request'].user + instance.save() + # Copy data from original Part if duplicate: original = duplicate['part'] @@ -657,6 +668,34 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): if duplicate['copy_parameters']: instance.copy_parameters_from(original) + # Duplicate parameter data from part category (and parents) + if copy_category_parameters and instance.category is not None: + # Get flattened list of parent categories + categories = instance.category.get_ancestors(include_self=True) + + # All parameter templates within these categories + templates = PartCategoryParameterTemplate.objects.filter( + category__in=categories + ) + + for template in templates: + # First ensure that the part doesn't have that parameter + if PartParameter.objects.filter( + part=instance, + template=template.parameter_template + ).exists(): + continue + + try: + PartParameter.create( + part=instance, + template=template.parameter_template, + data=template.default_value, + save=True + ) + except IntegrityError: + logger.error(f"Could not create new PartParameter for part {instance}") + # Create initial stock entry if initial_stock: quantity = initial_stock['quantity'] @@ -728,10 +767,6 @@ class PartSerializer(RemoteImageMixin, InvenTreeModelSerializer): class PartStocktakeSerializer(InvenTreeModelSerializer): """Serializer for the PartStocktake model""" - quantity = serializers.FloatField() - - user_detail = UserSerializer(source='user', read_only=True, many=False) - class Meta: """Metaclass options""" @@ -740,7 +775,12 @@ class PartStocktakeSerializer(InvenTreeModelSerializer): 'pk', 'date', 'part', + 'item_count', 'quantity', + 'cost_min', + 'cost_min_currency', + 'cost_max', + 'cost_max_currency', 'note', 'user', 'user_detail', @@ -751,6 +791,16 @@ class PartStocktakeSerializer(InvenTreeModelSerializer): 'user', ] + quantity = serializers.FloatField() + + user_detail = UserSerializer(source='user', read_only=True, many=False) + + cost_min = InvenTreeMoneySerializer(allow_null=True) + cost_min_currency = InvenTreeCurrencySerializer() + + cost_max = InvenTreeMoneySerializer(allow_null=True) + cost_max_currency = InvenTreeCurrencySerializer() + def save(self): """Called when this serializer is saved""" @@ -763,9 +813,121 @@ class PartStocktakeSerializer(InvenTreeModelSerializer): super().save() +class PartStocktakeReportSerializer(InvenTreeModelSerializer): + """Serializer for stocktake report class""" + + class Meta: + """Metaclass defines serializer fields""" + + model = PartStocktakeReport + fields = [ + 'pk', + 'date', + 'report', + 'part_count', + 'user', + 'user_detail', + ] + + user_detail = UserSerializer(source='user', read_only=True, many=False) + + report = InvenTreeAttachmentSerializerField(read_only=True) + + +class PartStocktakeReportGenerateSerializer(serializers.Serializer): + """Serializer class for manually generating a new PartStocktakeReport via the API""" + + part = serializers.PrimaryKeyRelatedField( + queryset=Part.objects.all(), + required=False, allow_null=True, + label=_('Part'), help_text=_('Limit stocktake report to a particular part, and any variant parts') + ) + + category = serializers.PrimaryKeyRelatedField( + queryset=PartCategory.objects.all(), + required=False, allow_null=True, + label=_('Category'), help_text=_('Limit stocktake report to a particular part category, and any child categories'), + ) + + location = serializers.PrimaryKeyRelatedField( + queryset=stock.models.StockLocation.objects.all(), + required=False, allow_null=True, + label=_('Location'), help_text=_('Limit stocktake report to a particular stock location, and any child locations') + ) + + generate_report = serializers.BooleanField( + default=True, + label=_('Generate Report'), + help_text=_('Generate report file containing calculated stocktake data'), + ) + + update_parts = serializers.BooleanField( + default=True, + label=_('Update Parts'), + help_text=_('Update specified parts with calculated stocktake data') + ) + + def validate(self, data): + """Custom validation for this serializer""" + + # Stocktake functionality must be enabled + if not common.models.InvenTreeSetting.get_setting('STOCKTAKE_ENABLE', False): + raise serializers.ValidationError(_("Stocktake functionality is not enabled")) + + # Check that background worker is running + if not InvenTree.status.is_worker_running(): + raise serializers.ValidationError(_("Background worker check failed")) + + return data + + def save(self): + """Saving this serializer instance requests generation of a new stocktake report""" + + data = self.validated_data + user = self.context['request'].user + + # Generate a new report + offload_task( + part.tasks.generate_stocktake_report, + force_async=True, + user=user, + part=data.get('part', None), + category=data.get('category', None), + location=data.get('location', None), + generate_report=data.get('generate_report', True), + update_parts=data.get('update_parts', True), + ) + + class PartPricingSerializer(InvenTreeModelSerializer): """Serializer for Part pricing information""" + class Meta: + """Metaclass defining serializer fields""" + model = PartPricing + fields = [ + 'currency', + 'updated', + 'scheduled_for_update', + 'bom_cost_min', + 'bom_cost_max', + 'purchase_cost_min', + 'purchase_cost_max', + 'internal_cost_min', + 'internal_cost_max', + 'supplier_price_min', + 'supplier_price_max', + 'variant_cost_min', + 'variant_cost_max', + 'overall_min', + 'overall_max', + 'sale_price_min', + 'sale_price_max', + 'sale_history_min', + 'sale_history_max', + 'update', + ] + currency = serializers.CharField(allow_null=True, read_only=True) updated = serializers.DateTimeField(allow_null=True, read_only=True) @@ -805,32 +967,6 @@ class PartPricingSerializer(InvenTreeModelSerializer): required=False, ) - class Meta: - """Metaclass defining serializer fields""" - model = PartPricing - fields = [ - 'currency', - 'updated', - 'scheduled_for_update', - 'bom_cost_min', - 'bom_cost_max', - 'purchase_cost_min', - 'purchase_cost_max', - 'internal_cost_min', - 'internal_cost_max', - 'supplier_price_min', - 'supplier_price_max', - 'variant_cost_min', - 'variant_cost_max', - 'overall_min', - 'overall_max', - 'sale_price_min', - 'sale_price_max', - 'sale_history_min', - 'sale_history_max', - 'update', - ] - def save(self): """Called when the serializer is saved""" data = self.validated_data @@ -844,9 +980,6 @@ class PartPricingSerializer(InvenTreeModelSerializer): class PartRelationSerializer(InvenTreeModelSerializer): """Serializer for a PartRelated model.""" - part_1_detail = PartSerializer(source='part_1', read_only=True, many=False) - part_2_detail = PartSerializer(source='part_2', read_only=True, many=False) - class Meta: """Metaclass defining serializer fields""" model = PartRelated @@ -858,13 +991,13 @@ class PartRelationSerializer(InvenTreeModelSerializer): 'part_2_detail', ] + part_1_detail = PartSerializer(source='part_1', read_only=True, many=False) + part_2_detail = PartSerializer(source='part_2', read_only=True, many=False) + class PartStarSerializer(InvenTreeModelSerializer): """Serializer for a PartStar object.""" - partname = serializers.CharField(source='part.full_name', read_only=True) - username = serializers.CharField(source='user.username', read_only=True) - class Meta: """Metaclass defining serializer fields""" model = PartStar @@ -876,12 +1009,13 @@ class PartStarSerializer(InvenTreeModelSerializer): 'username', ] + partname = serializers.CharField(source='part.full_name', read_only=True) + username = serializers.CharField(source='user.username', read_only=True) + class BomItemSubstituteSerializer(InvenTreeModelSerializer): """Serializer for the BomItemSubstitute class.""" - part_detail = PartBriefSerializer(source='part', read_only=True, many=False) - class Meta: """Metaclass defining serializer fields""" model = BomItemSubstitute @@ -892,10 +1026,60 @@ class BomItemSubstituteSerializer(InvenTreeModelSerializer): 'part_detail', ] + part_detail = PartBriefSerializer(source='part', read_only=True, many=False) + class BomItemSerializer(InvenTreeModelSerializer): """Serializer for BomItem object.""" + class Meta: + """Metaclass defining serializer fields""" + model = BomItem + fields = [ + 'allow_variants', + 'inherited', + 'note', + 'optional', + 'consumable', + 'overage', + 'pk', + 'part', + 'part_detail', + 'pricing_min', + 'pricing_max', + 'quantity', + 'reference', + 'sub_part', + 'sub_part_detail', + 'substitutes', + 'validated', + + # Annotated fields describing available quantity + 'available_stock', + 'available_substitute_stock', + 'available_variant_stock', + + # Annotated field describing quantity on order + 'on_order', + ] + + def __init__(self, *args, **kwargs): + """Determine if extra detail fields are to be annotated on this serializer + + - part_detail and sub_part_detail serializers are only included if requested. + - This saves a bunch of database requests + """ + part_detail = kwargs.pop('part_detail', False) + sub_part_detail = kwargs.pop('sub_part_detail', False) + + super(BomItemSerializer, self).__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + + if sub_part_detail is not True: + self.fields.pop('sub_part_detail') + quantity = InvenTreeDecimalField(required=True) def validate_quantity(self, quantity): @@ -915,8 +1099,6 @@ class BomItemSerializer(InvenTreeModelSerializer): sub_part_detail = PartBriefSerializer(source='sub_part', many=False, read_only=True) - validated = serializers.BooleanField(read_only=True, source='is_line_valid') - on_order = serializers.FloatField(read_only=True) # Cached pricing fields @@ -928,23 +1110,6 @@ class BomItemSerializer(InvenTreeModelSerializer): available_substitute_stock = serializers.FloatField(read_only=True) available_variant_stock = serializers.FloatField(read_only=True) - def __init__(self, *args, **kwargs): - """Determine if extra detail fields are to be annotated on this serializer - - - part_detail and sub_part_detail serializers are only included if requested. - - This saves a bunch of database requests - """ - part_detail = kwargs.pop('part_detail', False) - sub_part_detail = kwargs.pop('sub_part_detail', False) - - super(BomItemSerializer, self).__init__(*args, **kwargs) - - if part_detail is not True: - self.fields.pop('part_detail') - - if sub_part_detail is not True: - self.fields.pop('sub_part_detail') - @staticmethod def setup_eager_loading(queryset): """Prefetch against the provided queryset to speed up database access""" @@ -1039,45 +1204,10 @@ class BomItemSerializer(InvenTreeModelSerializer): return queryset - class Meta: - """Metaclass defining serializer fields""" - model = BomItem - fields = [ - 'allow_variants', - 'inherited', - 'note', - 'optional', - 'consumable', - 'overage', - 'pk', - 'part', - 'part_detail', - 'pricing_min', - 'pricing_max', - 'quantity', - 'reference', - 'sub_part', - 'sub_part_detail', - 'substitutes', - 'validated', - - # Annotated fields describing available quantity - 'available_stock', - 'available_substitute_stock', - 'available_variant_stock', - - # Annotated field describing quantity on order - 'on_order', - ] - class CategoryParameterTemplateSerializer(InvenTreeModelSerializer): """Serializer for the PartCategoryParameterTemplate model.""" - parameter_template_detail = PartParameterTemplateSerializer(source='parameter_template', many=False, read_only=True) - - category_detail = CategorySerializer(source='category', many=False, read_only=True) - class Meta: """Metaclass defining serializer fields""" model = PartCategoryParameterTemplate @@ -1090,6 +1220,10 @@ class CategoryParameterTemplateSerializer(InvenTreeModelSerializer): 'default_value', ] + parameter_template_detail = PartParameterTemplateSerializer(source='parameter_template', many=False, read_only=True) + + category_detail = CategorySerializer(source='category', many=False, read_only=True) + class PartCopyBOMSerializer(serializers.Serializer): """Serializer for copying a BOM from another part.""" diff --git a/InvenTree/part/tasks.py b/InvenTree/part/tasks.py index c4a566a07e..924914850e 100644 --- a/InvenTree/part/tasks.py +++ b/InvenTree/part/tasks.py @@ -1,16 +1,27 @@ """Background task definitions for the 'part' app""" +import io import logging +import random +import time from datetime import datetime, timedelta +from django.contrib.auth.models import User +from django.core.files.base import ContentFile from django.utils.translation import gettext_lazy as _ +import tablib +from djmoney.contrib.exchange.exceptions import MissingRate +from djmoney.contrib.exchange.models import convert_money +from djmoney.money import Money + import common.models import common.notifications import common.settings import InvenTree.helpers import InvenTree.tasks import part.models +import stock.models from InvenTree.tasks import ScheduledTask, scheduled_task logger = logging.getLogger("inventree") @@ -125,3 +136,293 @@ def check_missing_pricing(limit=250): pricing = p.pricing pricing.save() pricing.schedule_for_update() + + +def perform_stocktake(target: part.models.Part, user: User, note: str = '', commit=True, **kwargs): + """Perform stocktake action on a single part. + + arguments: + target: A single Part model instance + commit: If True (default) save the result to the database + user: User who requested this stocktake + + Returns: + PartStocktake: A new PartStocktake model instance (for the specified Part) + """ + + # Grab all "available" stock items for the Part + stock_entries = target.stock_entries(in_stock=True, include_variants=True) + + # Cache min/max pricing information for this Part + pricing = target.pricing + + if not pricing.is_valid: + # If pricing is not valid, let's update + logger.info(f"Pricing not valid for {target} - updating") + pricing.update_pricing(cascade=False) + pricing.refresh_from_db() + + base_currency = common.settings.currency_code_default() + + total_quantity = 0 + total_cost_min = Money(0, base_currency) + total_cost_max = Money(0, base_currency) + + for entry in stock_entries: + + # Update total quantity value + total_quantity += entry.quantity + + has_pricing = False + + # Update price range values + if entry.purchase_price: + # If purchase price is available, use that + try: + pp = convert_money(entry.purchase_price, base_currency) * entry.quantity + total_cost_min += pp + total_cost_max += pp + has_pricing = True + except MissingRate: + logger.warning(f"MissingRate exception occured converting {entry.purchase_price} to {base_currency}") + + if not has_pricing: + # Fall back to the part pricing data + p_min = pricing.overall_min or pricing.overall_max + p_max = pricing.overall_max or pricing.overall_min + + if p_min or p_max: + try: + total_cost_min += convert_money(p_min, base_currency) * entry.quantity + total_cost_max += convert_money(p_max, base_currency) * entry.quantity + except MissingRate: + logger.warning(f"MissingRate exception occurred converting {p_min}:{p_max} to {base_currency}") + + # Construct PartStocktake instance + instance = part.models.PartStocktake( + part=target, + item_count=stock_entries.count(), + quantity=total_quantity, + cost_min=total_cost_min, + cost_max=total_cost_max, + note=note, + user=user, + ) + + if commit: + instance.save() + + return instance + + +def generate_stocktake_report(**kwargs): + """Generated a new stocktake report. + + Note that this method should be called only by the background worker process! + + Unless otherwise specified, the stocktake report is generated for *all* Part instances. + Optional filters can by supplied via the kwargs + + kwargs: + user: The user who requested this stocktake (set to None for automated stocktake) + part: Optional Part instance to filter by (including variant parts) + category: Optional PartCategory to filter results + location: Optional StockLocation to filter results + generate_report: If True, generate a stocktake report from the calculated data (default=True) + update_parts: If True, save stocktake information against each filtered Part (default = True) + """ + + parts = part.models.Part.objects.all() + user = kwargs.get('user', None) + + generate_report = kwargs.get('generate_report', True) + update_parts = kwargs.get('update_parts', True) + + # Filter by 'Part' instance + if p := kwargs.get('part', None): + variants = p.get_descendants(include_self=True) + parts = parts.filter( + pk__in=[v.pk for v in variants] + ) + + # Filter by 'Category' instance (cascading) + if category := kwargs.get('category', None): + categories = category.get_descendants(include_self=True) + parts = parts.filter(category__in=categories) + + # Filter by 'Location' instance (cascading) + # Stocktake report will be limited to parts which have stock items within this location + if location := kwargs.get('location', None): + # Extract flat list of all sublocations + locations = list(location.get_descendants(include_self=True)) + + # Items which exist within these locations + items = stock.models.StockItem.objects.filter(location__in=locations) + + # List of parts which exist within these locations + unique_parts = items.order_by().values('part').distinct() + + parts = parts.filter( + pk__in=[result['part'] for result in unique_parts] + ) + + # Exit if filters removed all parts + n_parts = parts.count() + + if n_parts == 0: + logger.info("No parts selected for stocktake report - exiting") + return + + logger.info(f"Generating new stocktake report for {n_parts} parts") + + base_currency = common.settings.currency_code_default() + + # Construct an initial dataset for the stocktake report + dataset = tablib.Dataset( + headers=[ + _('Part ID'), + _('Part Name'), + _('Part Description'), + _('Category ID'), + _('Category Name'), + _('Stock Items'), + _('Total Quantity'), + _('Total Cost Min') + f' ({base_currency})', + _('Total Cost Max') + f' ({base_currency})', + ] + ) + + parts = parts.prefetch_related('category', 'stock_items') + + # Simple profiling for this task + t_start = time.time() + + # Keep track of each individual "stocktake" we perform. + # They may be bulk-commited to the database afterwards + stocktake_instances = [] + + total_parts = 0 + + # Iterate through each Part which matches the filters above + for p in parts: + + # Create a new stocktake for this part (do not commit, this will take place later on) + stocktake = perform_stocktake(p, user, commit=False) + + if stocktake.quantity == 0: + # Skip rows with zero total quantity + continue + + total_parts += 1 + + stocktake_instances.append(stocktake) + + # Add a row to the dataset + dataset.append([ + p.pk, + p.full_name, + p.description, + p.category.pk if p.category else '', + p.category.name if p.category else '', + stocktake.item_count, + stocktake.quantity, + InvenTree.helpers.normalize(stocktake.cost_min.amount), + InvenTree.helpers.normalize(stocktake.cost_max.amount), + ]) + + # Save a new PartStocktakeReport instance + buffer = io.StringIO() + buffer.write(dataset.export('csv')) + + today = datetime.now().date().isoformat() + filename = f"InvenTree_Stocktake_{today}.csv" + report_file = ContentFile(buffer.getvalue(), name=filename) + + if generate_report: + report_instance = part.models.PartStocktakeReport.objects.create( + report=report_file, + part_count=total_parts, + user=user + ) + + # Notify the requesting user + if user: + + common.notifications.trigger_notification( + report_instance, + category='generate_stocktake_report', + context={ + 'name': _('Stocktake Report Available'), + 'message': _('A new stocktake report is available for download'), + }, + targets=[ + user, + ] + ) + + # If 'update_parts' is set, we save stocktake entries for each individual part + if update_parts: + # Use bulk_create for efficient insertion of stocktake + part.models.PartStocktake.objects.bulk_create( + stocktake_instances, + batch_size=500, + ) + + t_stocktake = time.time() - t_start + logger.info(f"Generated stocktake report for {total_parts} parts in {round(t_stocktake, 2)}s") + + +@scheduled_task(ScheduledTask.DAILY) +def scheduled_stocktake_reports(): + """Scheduled tasks for creating automated stocktake reports. + + This task runs daily, and performs the following functions: + + - Delete 'old' stocktake report files after the specified period + - Generate new reports at the specified period + """ + + # Sleep a random number of seconds to prevent worker conflict + time.sleep(random.randint(1, 5)) + + # First let's delete any old stocktake reports + delete_n_days = int(common.models.InvenTreeSetting.get_setting('STOCKTAKE_DELETE_REPORT_DAYS', 30, cache=False)) + threshold = datetime.now() - timedelta(days=delete_n_days) + old_reports = part.models.PartStocktakeReport.objects.filter(date__lt=threshold) + + if old_reports.count() > 0: + logger.info(f"Deleting {old_reports.count()} stale stocktake reports") + old_reports.delete() + + # Next, check if stocktake functionality is enabled + if not common.models.InvenTreeSetting.get_setting('STOCKTAKE_ENABLE', False, cache=False): + logger.info("Stocktake functionality is not enabled - exiting") + return + + report_n_days = int(common.models.InvenTreeSetting.get_setting('STOCKTAKE_AUTO_DAYS', 0, cache=False)) + + if report_n_days < 1: + logger.info("Stocktake auto reports are disabled, exiting") + return + + # How long ago was last full stocktake report generated? + last_report = common.models.InvenTreeSetting.get_setting('STOCKTAKE_RECENT_REPORT', '', cache=False) + + try: + last_report = datetime.fromisoformat(last_report) + except ValueError: + last_report = None + + if last_report: + # Do not attempt if the last report was within the minimum reporting period + threshold = datetime.now() - timedelta(days=report_n_days) + + if last_report > threshold: + logger.info("Automatic stocktake report was recently generated - exiting") + return + + # Let's start a new stocktake report for all parts + generate_stocktake_report(update_parts=True) + + # Record the date of this report + common.models.InvenTreeSetting.set_setting('STOCKTAKE_RECENT_REPORT', datetime.now().isoformat(), None) diff --git a/InvenTree/part/templates/part/bom.html b/InvenTree/part/templates/part/bom.html index e817f60d08..f9bcfc483a 100644 --- a/InvenTree/part/templates/part/bom.html +++ b/InvenTree/part/templates/part/bom.html @@ -12,7 +12,7 @@
{% else %}
- {% blocktrans with part=part.full_name %}The BOM for {{ part }} has changed, and must be validated.
{% endblocktrans %} + {% trans "The BOM this part has been changed, and must be validated" %} {% endif %} {% blocktrans with part=part.full_name checker=part.bom_checked_by check_date=part.bom_checked_date %}The BOM for {{ part }} was last checked by {{ checker }} on {{ check_date }}{% endblocktrans %}
diff --git a/InvenTree/part/templates/part/category.html b/InvenTree/part/templates/part/category.html index 133a9387a1..7370a10db6 100644 --- a/InvenTree/part/templates/part/category.html +++ b/InvenTree/part/templates/part/category.html @@ -29,6 +29,12 @@ {% url 'admin:part_partcategory_change' category.pk as url %} {% include "admin_button.html" with url=url %} {% endif %} +{% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} +{% if stocktake_enable and roles.stocktake.add %} + +{% endif %} {% if category %} {% if starred_directly %}
{% include "filter_list.html" with id="parts" %} @@ -253,6 +254,20 @@ {% block js_ready %} {{ block.super }} + {% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} + {% if stocktake_enable and roles.stocktake.add %} + $('#category-stocktake').click(function() { + generateStocktakeReport({ + category: { + {% if category %}value: {{ category.pk }},{% endif %} + }, + location: {}, + generate_report: {}, + update_parts: {}, + }); + }); + {% endif %} + {% if category %} onPanelLoad('stock', function() { diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 0ceb79dc21..f9ddf2652a 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -53,15 +53,16 @@
{% endif %} +{% settings_value 'STOCKTAKE_ENABLE' as stocktake_enable %} {% settings_value 'DISPLAY_STOCKTAKE_TAB' user=request.user as show_stocktake %} -{% if show_stocktake %} +{% if stocktake_enable and show_stocktake %}

{% trans "Part Stocktake" %}

{% include "spacer.html" %}
- {% if roles.part.add %} + {% if roles.stocktake.add %} @@ -468,18 +469,24 @@ // Load the "stocktake" tab onPanelLoad('stocktake', function() { loadPartStocktakeTable({{ part.pk }}, { - admin: {% js_bool user.is_staff %}, - allow_edit: {% js_bool roles.part.change %}, - allow_delete: {% js_bool roles.part.delete %}, + allow_edit: {% js_bool roles.stocktake.change %}, + allow_delete: {% js_bool roles.stocktake.delete %}, }); + {% if roles.stocktake.add %} $('#btn-stocktake').click(function() { - performStocktake({{ part.pk }}, { - onSuccess: function() { - $('#part-stocktake-table').bootstrapTable('refresh'); - } + generateStocktakeReport({ + part: { + value: {{ part.pk }} + }, + location: {}, + generate_report: { + value: false, + }, + update_parts: {}, }); }); + {% endif %} }); // Load the "suppliers" tab @@ -541,7 +548,7 @@ deleteManufacturerParts(selections, { success: function() { - $("#manufacturer-part-table").bootstrapTable("refresh"); + $("#manufacturer-part-table").bootstrapTable('refresh'); } }); }); @@ -551,7 +558,7 @@ createManufacturerPart({ part: {{ part.pk }}, onSuccess: function() { - $("#manufacturer-part-table").bootstrapTable("refresh"); + $("#manufacturer-part-table").bootstrapTable('refresh'); } }); }); @@ -670,7 +677,11 @@ {% if report_enabled %} $("#print-bom-report").click(function() { - printBomReports([{{ part.pk }}]); + printReports({ + items: [{{ part.pk }}], + key: 'part', + url: '{% url "api-bom-report-list" %}' + }); }); {% endif %} }); @@ -702,9 +713,7 @@ }, focus: 'part_2', title: '{% trans "Add Related Part" %}', - onSuccess: function() { - $('#related-parts-table').bootstrapTable('refresh'); - } + refreshTable: '#related-parts-table', }); }); @@ -786,21 +795,11 @@ constructForm('{% url "api-part-test-template-list" %}', { method: 'POST', - fields: { - test_name: {}, - description: {}, - required: {}, - requires_value: {}, - requires_attachment: {}, - part: { - value: {{ part.pk }}, - hidden: true, - } - }, + fields: partTestTemplateFields({ + part: {{ part.pk }} + }), title: '{% trans "Add Test Result Template" %}', - onSuccess: function() { - $("#test-template-table").bootstrapTable("refresh"); - } + refreshTable: '#test-template-table', }); }); }); @@ -871,9 +870,7 @@ data: {}, }, title: '{% trans "Add Parameter" %}', - onSuccess: function() { - $('#parameter-table').bootstrapTable('refresh'); - } + refreshTable: '#parameter-table', }); }); {% endif %} @@ -907,20 +904,6 @@ } } }); - - enableDragAndDrop( - '#attachment-dropzone', - '{% url "api-part-attachment-list" %}', - { - data: { - part: {{ part.id }}, - }, - label: 'attachment', - success: function(data, status, xhr) { - reloadAttachmentTable(); - } - } - ); }); onPanelLoad('pricing', function() { diff --git a/InvenTree/part/templates/part/part_base.html b/InvenTree/part/templates/part/part_base.html index 85d78dcf37..0cfd50a115 100644 --- a/InvenTree/part/templates/part/part_base.html +++ b/InvenTree/part/templates/part/part_base.html @@ -144,7 +144,7 @@ {% if not part.active %}  
- + {% trans 'Inactive' %}
{% endif %} @@ -173,17 +173,16 @@ {{ part.description }}{% include "clip.html"%} - - - -
{% if part.variant_of %} -
- {% object_link 'part-detail' part.variant_of.id part.variant_of.full_name as link %} - {% blocktrans %}This part is a variant of {{link}}{% endblocktrans %} -
+ + + {% trans "Variant Of" %} + + {{ part.variant_of.full_name }} + + {% endif %} -
+ {% endblock details %} @@ -215,7 +214,7 @@ {% endif %} {% if part.component %} - {% if required_build_order_quantity > 0 %} + {% if required_build_order_quantity > 0 or allocated_build_order_quantity > 0 %} {% trans "Allocated to Build Orders" %} @@ -224,7 +223,7 @@ {% endif %} {% endif %} {% if part.salable %} - {% if required_sales_order_quantity > 0 %} + {% if required_sales_order_quantity > 0 or allocated_sales_order_quantity > 0 %} {% trans "Allocated to Sales Orders" %} @@ -273,7 +272,8 @@ {{ part.IPN }}{% include "clip.html"%} {% endif %} - {% if part.revision %} + {% settings_value "PART_ENABLE_REVISION" as show_revision %} + {% if show_revision and part.revision %} {% trans "Revision" %} @@ -301,13 +301,7 @@ {{ part.keywords }}{% include "clip.html"%} {% endif %} - {% if part.barcode_hash %} - - - {% trans "Barcode Identifier" %} - {{ part.barcode_hash }} - - {% endif %} + {% include "barcode_data.html" with instance=part %}
@@ -334,6 +328,7 @@ {% else %} {% render_currency pricing.overall_min %} - {% render_currency pricing.overall_max %} {% endif %} + {% if part.units %}  / {{ part.units }}{% endif %} {% endif %} @@ -342,12 +337,12 @@ {% if stocktake %} - {% trans "Last Stocktake" %} - {% decimal stocktake.quantity %} - - {{ stocktake.user.username }} - + {% trans "Last Stocktake" %} + + + {% decimal stocktake.quantity %} + {{ stocktake.user.username }} {% endif %} @@ -447,11 +442,9 @@ {% if barcodes %} $("#show-qr-code").click(function() { - launchModalForm( - "{% url 'api-part-qr' part.id %}", - { - no_post: true, - } + showQRDialog( + '{% trans "Part QR Code" %}', + '{"part": {{ part.pk }}}', ); }); @@ -475,7 +468,11 @@ {% if labels_enabled %} $('#print-label').click(function() { - printPartLabels([{{ part.pk }}]); + printLabels({ + items: [{{ part.pk }}], + key: 'part', + url: '{% url "api-part-label-list" %}', + }); }); {% endif %} diff --git a/InvenTree/part/templates/part/part_sidebar.html b/InvenTree/part/templates/part/part_sidebar.html index ff35246739..368110d729 100644 --- a/InvenTree/part/templates/part/part_sidebar.html +++ b/InvenTree/part/templates/part/part_sidebar.html @@ -44,8 +44,9 @@ {% trans "Scheduling" as text %} {% include "sidebar_item.html" with label="scheduling" text=text icon="fa-calendar-alt" %} {% endif %} +{% settings_value 'STOCKTAKE_ENABLE' as stocktake_enable %} {% settings_value 'DISPLAY_STOCKTAKE_TAB' user=request.user as show_stocktake %} -{% if show_stocktake %} +{% if roles.stocktake.view and stocktake_enable and show_stocktake %} {% trans "Stocktake" as text %} {% include "sidebar_item.html" with label="stocktake" text=text icon="fa-clipboard-check" %} {% endif %} diff --git a/InvenTree/part/templates/part/part_stocktake.html b/InvenTree/part/templates/part/part_stocktake.html index cb1d97cdc4..1a5ab06619 100644 --- a/InvenTree/part/templates/part/part_stocktake.html +++ b/InvenTree/part/templates/part/part_stocktake.html @@ -1,6 +1,10 @@ {% load i18n %} {% load inventree_extras %} +
+ +
+
{% include "filter_list.html" with id="partstocktake" %} diff --git a/InvenTree/part/templates/part/prices.html b/InvenTree/part/templates/part/prices.html index 380720408b..f788e4f36d 100644 --- a/InvenTree/part/templates/part/prices.html +++ b/InvenTree/part/templates/part/prices.html @@ -46,8 +46,8 @@ {% endif %} {% trans "Internal Pricing" %} - {% include "price_data.html" with price=pricing.internal_cost_min %} - {% include "price_data.html" with price=pricing.internal_cost_max %} + {% render_currency pricing.internal_cost_min %} + {% render_currency pricing.internal_cost_max %} {% if part.purchaseable %} @@ -59,8 +59,8 @@ {% endif %} {% trans "Purchase History" %} - {% include "price_data.html" with price=pricing.purchase_cost_min %} - {% include "price_data.html" with price=pricing.purchase_cost_max %} + {% render_currency pricing.purchase_cost_min %} + {% render_currency pricing.purchase_cost_max %} @@ -71,8 +71,8 @@ {% endif %} {% trans "Supplier Pricing" %} - {% include "price_data.html" with price=pricing.supplier_price_min %} - {% include "price_data.html" with price=pricing.supplier_price_max %} + {% render_currency pricing.supplier_price_min %} + {% render_currency pricing.supplier_price_max %} {% endif %} {% if part.assembly %} @@ -85,23 +85,23 @@ {% endif %} {% trans "BOM Pricing" %} - {% include "price_data.html" with price=pricing.bom_cost_min %} - {% include "price_data.html" with price=pricing.bom_cost_max %} + {% render_currency pricing.bom_cost_min %} + {% render_currency pricing.bom_cost_max %} {% endif %} {% if part.is_template %} {% trans "Variant Pricing" %} - {% include "price_data.html" with price=pricing.variant_cost_min %} - {% include "price_data.html" with price=pricing.variant_cost_max %} + {% render_currency pricing.variant_cost_min %} + {% render_currency pricing.variant_cost_max %} {% endif %} {% trans "Overall Pricing" %} - {% include "price_data.html" with price=pricing.overall_min %} - {% include "price_data.html" with price=pricing.overall_max %} + {% render_currency pricing.overall_min %} + {% render_currency pricing.overall_max %} @@ -126,8 +126,8 @@ {% trans "Sale Price" %} - {% include "price_data.html" with price=pricing.sale_price_min %} - {% include "price_data.html" with price=pricing.sale_price_max %} + {% render_currency pricing.sale_price_min %} + {% render_currency pricing.sale_price_max %} @@ -136,8 +136,8 @@ {% trans "Sale History" %} - {% include "price_data.html" with price=pricing.sale_history_min %} - {% include "price_data.html" with price=pricing.sale_history_max %} + {% render_currency pricing.sale_history_min %} + {% render_currency pricing.sale_history_max %} diff --git a/InvenTree/part/templates/part/upload_bom.html b/InvenTree/part/templates/part/upload_bom.html index af0c88e529..68ec20f5e2 100644 --- a/InvenTree/part/templates/part/upload_bom.html +++ b/InvenTree/part/templates/part/upload_bom.html @@ -54,7 +54,7 @@ {% trans "Reference" %} {% trans "Overage" %} {% trans "Allow Variants" %} - {% trans "Inherited" %} + {% trans "Gets inherited" %} {% trans "Optional" %} {% trans "Note" %} diff --git a/InvenTree/part/templates/part/variant_part.html b/InvenTree/part/templates/part/variant_part.html index ca274e8076..413e2ff1f3 100644 --- a/InvenTree/part/templates/part/variant_part.html +++ b/InvenTree/part/templates/part/variant_part.html @@ -7,7 +7,7 @@
{% trans "Create new part variant" %}
- {% blocktrans with full_name=part.full_name %}Create a new variant of template '{{full_name}}'.{% endblocktrans %} + {% trans "Create a new variant part from this template" %}
{% endblock %} diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index 42ab50a5b2..19e4cfe1bb 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -4,7 +4,6 @@ import logging import os import sys from datetime import date, datetime -from decimal import Decimal from django import template from django.conf import settings as djangosettings @@ -14,8 +13,6 @@ from django.utils.html import format_html from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ -import moneyed.localization - import InvenTree.helpers from common.models import ColorTheme, InvenTreeSetting, InvenTreeUserSetting from common.settings import currency_code_default @@ -104,33 +101,10 @@ def render_date(context, date_object): @register.simple_tag -def render_currency(money, decimal_places=None, include_symbol=True): +def render_currency(money, **kwargs): """Render a currency / Money object""" - if money is None or money.amount is None: - return '-' - - if decimal_places is None: - decimal_places = InvenTreeSetting.get_setting('PRICING_DECIMAL_PLACES', 6) - - value = Decimal(str(money.amount)).normalize() - value = str(value) - - if '.' in value: - decimals = len(value.split('.')[-1]) - - decimals = max(decimals, 2) - decimals = min(decimals, decimal_places) - - decimal_places = decimals - else: - decimal_places = 2 - - return moneyed.localization.format_money( - money, - decimal_places=decimal_places, - include_symbol=include_symbol, - ) + return InvenTree.helpers.render_currency(money, **kwargs) @register.simple_tag() @@ -344,20 +318,24 @@ def setting_object(key, *args, **kwargs): (Or return None if the setting does not exist) if a user-setting was requested return that """ + + cache = kwargs.get('cache', True) + if 'plugin' in kwargs: # Note, 'plugin' is an instance of an InvenTreePlugin class plugin = kwargs['plugin'] - return PluginSetting.get_setting_object(key, plugin=plugin) + return PluginSetting.get_setting_object(key, plugin=plugin, cache=cache) - if 'method' in kwargs: - return NotificationUserSetting.get_setting_object(key, user=kwargs['user'], method=kwargs['method']) + elif 'method' in kwargs: + return NotificationUserSetting.get_setting_object(key, user=kwargs['user'], method=kwargs['method'], cache=cache) - if 'user' in kwargs: - return InvenTreeUserSetting.get_setting_object(key, user=kwargs['user']) + elif 'user' in kwargs: + return InvenTreeUserSetting.get_setting_object(key, user=kwargs['user'], cache=cache) - return InvenTreeSetting.get_setting_object(key) + else: + return InvenTreeSetting.get_setting_object(key, cache=cache) @register.simple_tag() @@ -404,7 +382,10 @@ def progress_bar(val, max_val, *args, **kwargs): else: style = '' - percent = float(val / max_val) * 100 + if max_val != 0: + percent = float(val / max_val) * 100 + else: + percent = 0 if percent > 100: percent = 100 @@ -570,7 +551,30 @@ class I18nStaticNode(StaticNode): self.original = self.path.var if hasattr(context, 'request'): - self.path.var = self.original.format(lng=context.request.LANGUAGE_CODE) + + # Convert the "requested" language code to a standard format + language_code = context.request.LANGUAGE_CODE.lower().strip() + language_code = language_code.replace('_', '-') + + # Find the first "best" match: + # - First, try the original requested code, e.g. 'pt-br' + # - Next, try a simpler version of the code e.g. 'pt' + # - Finally, fall back to english + options = [ + language_code, + language_code.split('-')[0], + 'en', + ] + + for lng in options: + lng_file = os.path.join( + djangosettings.STATIC_ROOT, + self.original.format(lng=lng) + ) + + if os.path.exists(lng_file): + self.path.var = self.original.format(lng=lng) + break ret = super().render(context) diff --git a/InvenTree/part/templatetags/status_codes.py b/InvenTree/part/templatetags/status_codes.py index d3811c38f5..9eef869678 100644 --- a/InvenTree/part/templatetags/status_codes.py +++ b/InvenTree/part/templatetags/status_codes.py @@ -4,7 +4,8 @@ from django import template from django.utils.safestring import mark_safe from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus, - SalesOrderStatus, StockStatus) + ReturnOrderStatus, SalesOrderStatus, + StockStatus) register = template.Library() @@ -21,6 +22,12 @@ def sales_order_status_label(key, *args, **kwargs): return mark_safe(SalesOrderStatus.render(key, large=kwargs.get('large', False))) +@register.simple_tag +def return_order_status_label(key, *args, **kwargs): + """Render a ReturnOrder status label""" + return mark_safe(ReturnOrderStatus.render(key, large=kwargs.get('large', False))) + + @register.simple_tag def stock_status_label(key, *args, **kwargs): """Render a StockItem status label.""" diff --git a/InvenTree/part/test_api.py b/InvenTree/part/test_api.py index cf1f132c86..1c83be1a4a 100644 --- a/InvenTree/part/test_api.py +++ b/InvenTree/part/test_api.py @@ -5,6 +5,8 @@ from enum import IntEnum from random import randint from django.core.exceptions import ValidationError +from django.db import connection +from django.test.utils import CaptureQueriesContext from django.urls import reverse import PIL @@ -128,7 +130,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): for jj in range(10): Part.objects.create( name=f"Part xyz {jj}_{ii}", - description="A test part", + description="A test part with a description", category=child ) @@ -426,8 +428,8 @@ class PartCategoryAPITest(InvenTreeAPITestCase): # Make sure that we get an error if we try to create part in the structural category with self.assertRaises(ValidationError): part = Part.objects.create( - name="Part which shall not be created", - description="-", + name="-", + description="Part which shall not be created", category=structural_category ) @@ -444,8 +446,8 @@ class PartCategoryAPITest(InvenTreeAPITestCase): # Create the test part assigned to a non-structural category part = Part.objects.create( - name="Part which category will be changed to structural", - description="-", + name="-", + description="Part which category will be changed to structural", category=non_structural_category ) @@ -741,7 +743,7 @@ class PartAPITest(PartAPITestBase): # First, construct a set of template / variant parts master_part = Part.objects.create( - name='Master', description='Master part', + name='Master', description='Master part which has some variants', category=category, is_template=True, ) @@ -1321,7 +1323,7 @@ class PartCreationTests(PartAPITestBase): url = reverse('api-part-list') name = "Kaltgerätestecker" - description = "Gerät" + description = "Gerät Kaltgerätestecker strange chars should get through" data = { "name": name, @@ -1345,7 +1347,7 @@ class PartCreationTests(PartAPITestBase): reverse('api-part-list'), { 'name': f'thing_{bom}{img}{params}', - 'description': 'Some description', + 'description': 'Some long description text for this part', 'category': 1, 'duplicate': { 'part': 100, @@ -1363,6 +1365,51 @@ class PartCreationTests(PartAPITestBase): self.assertEqual(part.bom_items.count(), 4 if bom else 0) self.assertEqual(part.parameters.count(), 2 if params else 0) + def test_category_parameters(self): + """Test that category parameters are correctly applied""" + + cat = PartCategory.objects.get(pk=1) + + # Add some parameter template to the parent category + for pk in [1, 2, 3]: + PartCategoryParameterTemplate.objects.create( + parameter_template=PartParameterTemplate.objects.get(pk=pk), + category=cat, + default_value=f"Value {pk}" + ) + + self.assertEqual(cat.parameter_templates.count(), 3) + + # Creat a new Part, without copying category parameters + data = self.post( + reverse('api-part-list'), + { + 'category': 1, + 'name': 'Some new part', + 'description': 'A new part without parameters', + 'copy_category_parameters': False, + }, + expected_code=201, + ).data + + prt = Part.objects.get(pk=data['pk']) + self.assertEqual(prt.parameters.count(), 0) + + # Create a new part, this time copying category parameters + data = self.post( + reverse('api-part-list'), + { + 'category': 1, + 'name': 'Another new part', + 'description': 'A new part with parameters', + 'copy_category_parameters': True, + }, + expected_code=201, + ).data + + prt = Part.objects.get(pk=data['pk']) + self.assertEqual(prt.parameters.count(), 3) + class PartDetailTests(PartAPITestBase): """Test that we can create / edit / delete Part objects via the API.""" @@ -1659,6 +1706,60 @@ class PartDetailTests(PartAPITestBase): self.assertEqual(part.metadata['x'], 'y') +class PartListTests(PartAPITestBase): + """Unit tests for the Part List API endpoint""" + + def test_query_count(self): + """Test that the query count is unchanged, independent of query results""" + + queries = [ + {'limit': 1}, + {'limit': 10}, + {'limit': 50}, + {'category': 1}, + {}, + ] + + url = reverse('api-part-list') + + # Create a bunch of extra parts (efficiently) + parts = [] + + for ii in range(100): + parts.append(Part( + name=f"Extra part {ii}", + description="A new part which will appear via the API", + level=0, tree_id=0, + lft=0, rght=0, + )) + + Part.objects.bulk_create(parts) + + for query in queries: + + with CaptureQueriesContext(connection) as ctx: + self.get(url, query, expected_code=200) + + # No more than 20 database queries + self.assertLess(len(ctx), 20) + + # Test 'category_detail' annotation + for b in [False, True]: + with CaptureQueriesContext(connection) as ctx: + results = self.get( + reverse('api-part-list'), + {'category_detail': b}, + expected_code=200 + ) + + for result in results.data: + if b and result['category'] is not None: + self.assertIn('category_detail', result) + + # No more than 20 DB queries + self.assertLessEqual(len(ctx), 20) + + class PartNotesTests(InvenTreeAPITestCase): """Tests for the 'notes' field (markdown field)""" @@ -1792,15 +1893,16 @@ class PartAPIAggregationTest(InvenTreeAPITestCase): 'part.change', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Create test data as part of setup routine""" - super().setUp() + super().setUpTestData() # Ensure the part "variant" tree is correctly structured Part.objects.rebuild() # Add a new part - self.part = Part.objects.create( + cls.part = Part.objects.create( name='Banana', description='This is a banana', category=PartCategory.objects.get(pk=1), @@ -1809,12 +1911,12 @@ class PartAPIAggregationTest(InvenTreeAPITestCase): # Create some stock items associated with the part # First create 600 units which are OK - StockItem.objects.create(part=self.part, quantity=100) - StockItem.objects.create(part=self.part, quantity=200) - StockItem.objects.create(part=self.part, quantity=300) + StockItem.objects.create(part=cls.part, quantity=100) + StockItem.objects.create(part=cls.part, quantity=200) + StockItem.objects.create(part=cls.part, quantity=300) # Now create another 400 units which are LOST - StockItem.objects.create(part=self.part, quantity=400, status=StockStatus.LOST) + StockItem.objects.create(part=cls.part, quantity=400, status=StockStatus.LOST) def get_part_data(self): """Helper function for retrieving part data""" @@ -2373,7 +2475,7 @@ class BomItemTest(InvenTreeAPITestCase): # Create a variant part! variant = Part.objects.create( name=f"Variant_{ii}", - description="A variant part", + description="A variant part, with a description", component=True, variant_of=sub_part ) @@ -2571,7 +2673,7 @@ class BomItemTest(InvenTreeAPITestCase): # Create a variant part vp = Part.objects.create( name=f"Var {i}", - description="Variant part", + description="Variant part description field", variant_of=bom_item.sub_part, ) @@ -2839,6 +2941,7 @@ class PartStocktakeTest(InvenTreeAPITestCase): 'category', 'part', 'location', + 'stock', ] def test_list_endpoint(self): @@ -2855,17 +2958,28 @@ class PartStocktakeTest(InvenTreeAPITestCase): total = 0 - # Create some entries - for p in Part.objects.all(): + # Iterate over (up to) 5 parts in the database + for p in Part.objects.all()[:5]: - for n in range(p.pk): - PartStocktake.objects.create( - part=p, - quantity=(n + 1) * 100, + # Create some entries + to_create = [] + + n = p.pk % 10 + + for idx in range(n): + to_create.append( + PartStocktake( + part=p, + quantity=(idx + 1) * 100, + ) ) - total += p.pk + total += 1 + # Create all entries in a single bulk-create + PartStocktake.objects.bulk_create(to_create) + + # Query list endpoint response = self.get( url, { @@ -2874,8 +2988,8 @@ class PartStocktakeTest(InvenTreeAPITestCase): expected_code=200, ) - # List by part ID - self.assertEqual(len(response.data), p.pk) + # Check that the expected number of PartStocktake instances has been created + self.assertEqual(len(response.data), n) # List all entries response = self.get(url, {}, expected_code=200) @@ -2887,8 +3001,8 @@ class PartStocktakeTest(InvenTreeAPITestCase): url = reverse('api-part-stocktake-list') - self.assignRole('part.add') - self.assignRole('part.view') + self.assignRole('stocktake.add') + self.assignRole('stocktake.view') for p in Part.objects.all(): @@ -2930,12 +3044,6 @@ class PartStocktakeTest(InvenTreeAPITestCase): self.assignRole('part.view') # Test we can retrieve via API - self.get(url, expected_code=403) - - # Assign staff permission - self.user.is_staff = True - self.user.save() - self.get(url, expected_code=200) # Try to edit data @@ -2948,7 +3056,7 @@ class PartStocktakeTest(InvenTreeAPITestCase): ) # Assign 'edit' role permission - self.assignRole('part.change') + self.assignRole('stocktake.change') # Try again self.patch( @@ -2962,6 +3070,59 @@ class PartStocktakeTest(InvenTreeAPITestCase): # Try to delete self.delete(url, expected_code=403) - self.assignRole('part.delete') + self.assignRole('stocktake.delete') self.delete(url, expected_code=204) + + def test_report_list(self): + """Test for PartStocktakeReport list endpoint""" + + from part.tasks import generate_stocktake_report + + n_parts = Part.objects.count() + + # Initially, no stocktake records are available + self.assertEqual(PartStocktake.objects.count(), 0) + + # Generate stocktake data for all parts (default configuration) + generate_stocktake_report() + + # There should now be 1 stocktake entry for each part + self.assertEqual(PartStocktake.objects.count(), n_parts) + + self.assignRole('stocktake.view') + + response = self.get(reverse('api-part-stocktake-list'), expected_code=200) + + self.assertEqual(len(response.data), n_parts) + + # Stocktake report should be available via the API, also + response = self.get(reverse('api-part-stocktake-report-list'), expected_code=200) + + self.assertEqual(len(response.data), 1) + + data = response.data[0] + + self.assertEqual(data['part_count'], 14) + self.assertEqual(data['user'], None) + self.assertTrue(data['report'].endswith('.csv')) + + def test_report_generate(self): + """Test API functionality for generating a new stocktake report""" + + url = reverse('api-part-stocktake-report-generate') + + # Permission denied, initially + self.assignRole('stocktake.view') + response = self.post(url, data={}, expected_code=403) + + # Stocktake functionality disabled + InvenTreeSetting.set_setting('STOCKTAKE_ENABLE', False, None) + self.assignRole('stocktake.add') + response = self.post(url, data={}, expected_code=400) + + self.assertIn('Stocktake functionality is not enabled', str(response.data)) + + InvenTreeSetting.set_setting('STOCKTAKE_ENABLE', True, None) + response = self.post(url, data={}, expected_code=400) + self.assertIn('Background worker check failed', str(response.data)) diff --git a/InvenTree/part/test_bom_import.py b/InvenTree/part/test_bom_import.py index 73410ea350..d7d3367bb8 100644 --- a/InvenTree/part/test_bom_import.py +++ b/InvenTree/part/test_bom_import.py @@ -17,26 +17,35 @@ class BomUploadTest(InvenTreeAPITestCase): 'part.change', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Create BOM data as part of setup routine""" - super().setUp() + super().setUpTestData() - self.part = Part.objects.create( + cls.part = Part.objects.create( name='Assembly', description='An assembled part', assembly=True, component=False, ) + parts = [] + for i in range(10): - Part.objects.create( - name=f"Component {i}", - IPN=f"CMP_{i}", - description="A subcomponent that can be used in a BOM", - component=True, - assembly=False, + parts.append( + Part( + name=f"Component {i}", + IPN=f"CMP_{i}", + description="A subcomponent that can be used in a BOM", + component=True, + assembly=False, + lft=0, rght=0, + level=0, tree_id=0, + ) ) + Part.objects.bulk_create(parts) + def post_bom(self, filename, file_data, clear_existing=None, expected_code=None, content_type='text/plain'): """Helper function for submitting a BOM file""" bom_file = SimpleUploadedFile( diff --git a/InvenTree/part/test_bom_item.py b/InvenTree/part/test_bom_item.py index 266ae94aec..5148ea7048 100644 --- a/InvenTree/part/test_bom_item.py +++ b/InvenTree/part/test_bom_item.py @@ -66,7 +66,7 @@ class BomItemTest(TestCase): def test_integer_quantity(self): """Test integer validation for BomItem.""" - p = Part.objects.create(name="test", description="d", component=True, trackable=True) + p = Part.objects.create(name="test", description="part description", component=True, trackable=True) # Creation of a BOMItem with a non-integer quantity of a trackable Part should fail with self.assertRaises(django_exceptions.ValidationError): @@ -210,10 +210,10 @@ class BomItemTest(TestCase): self.assertEqual(assembly.can_build, 0) # Create some component items - c1 = Part.objects.create(name="C1", description="C1") - c2 = Part.objects.create(name="C2", description="C2") - c3 = Part.objects.create(name="C3", description="C3") - c4 = Part.objects.create(name="C4", description="C4") + c1 = Part.objects.create(name="C1", description="Part C1 - this is just the part description") + c2 = Part.objects.create(name="C2", description="Part C2 - this is just the part description") + c3 = Part.objects.create(name="C3", description="Part C3 - this is just the part description") + c4 = Part.objects.create(name="C4", description="Part C4 - this is just the part description") for p in [c1, c2, c3, c4]: # Ensure we have stock @@ -245,3 +245,21 @@ class BomItemTest(TestCase): ) self.assertEqual(assembly.can_build, 20) + + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [BomItem]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) diff --git a/InvenTree/part/test_category.py b/InvenTree/part/test_category.py index 7aa94f5535..f484314415 100644 --- a/InvenTree/part/test_category.py +++ b/InvenTree/part/test_category.py @@ -19,15 +19,19 @@ class CategoryTest(TestCase): 'params', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Extract some interesting categories for time-saving""" - self.electronics = PartCategory.objects.get(name='Electronics') - self.mechanical = PartCategory.objects.get(name='Mechanical') - self.resistors = PartCategory.objects.get(name='Resistors') - self.capacitors = PartCategory.objects.get(name='Capacitors') - self.fasteners = PartCategory.objects.get(name='Fasteners') - self.ic = PartCategory.objects.get(name='IC') - self.transceivers = PartCategory.objects.get(name='Transceivers') + + super().setUpTestData() + + cls.electronics = PartCategory.objects.get(name='Electronics') + cls.mechanical = PartCategory.objects.get(name='Mechanical') + cls.resistors = PartCategory.objects.get(name='Resistors') + cls.capacitors = PartCategory.objects.get(name='Capacitors') + cls.fasteners = PartCategory.objects.get(name='Fasteners') + cls.ic = PartCategory.objects.get(name='IC') + cls.transceivers = PartCategory.objects.get(name='Transceivers') def test_parents(self): """Test that the parent fields are properly set, based on the test fixtures.""" @@ -256,8 +260,6 @@ class CategoryTest(TestCase): # At this point, we are confident that the tree is correctly structured - # Add some parts to category B3 - for i in range(10): Part.objects.create( name=f'Part {i}', diff --git a/InvenTree/part/test_migrations.py b/InvenTree/part/test_migrations.py index f3562af872..afa2078bf1 100644 --- a/InvenTree/part/test_migrations.py +++ b/InvenTree/part/test_migrations.py @@ -46,3 +46,39 @@ class TestForwardMigrations(MigratorTestCase): for name in ['A', 'C', 'E']: part = Part.objects.get(name=name) self.assertEqual(part.description, f"My part {name}") + + +class TestBomItemMigrations(MigratorTestCase): + """Tests for BomItem migrations""" + + migrate_from = ('part', '0002_auto_20190520_2204') + migrate_to = ('part', helpers.getNewestMigrationFile('part')) + + def prepare(self): + """Create intial dataset""" + + Part = self.old_state.apps.get_model('part', 'part') + BomItem = self.old_state.apps.get_model('part', 'bomitem') + + a = Part.objects.create(name='Part A', description='My part A') + b = Part.objects.create(name='Part B', description='My part B') + c = Part.objects.create(name='Part C', description='My part C') + + BomItem.objects.create(part=a, sub_part=b, quantity=1) + BomItem.objects.create(part=a, sub_part=c, quantity=1) + + self.assertEqual(BomItem.objects.count(), 2) + + # Initially we don't have the 'validated' field + with self.assertRaises(AttributeError): + print(b.validated) + + def test_validated_field(self): + """Test that the 'validated' field is added to the BomItem objects""" + + BomItem = self.new_state.apps.get_model('part', 'bomitem') + + self.assertEqual(BomItem.objects.count(), 2) + + for bom_item in BomItem.objects.all(): + self.assertFalse(bom_item.validated) diff --git a/InvenTree/part/test_param.py b/InvenTree/part/test_param.py index 7a13bfa6ce..8b8906e0ea 100644 --- a/InvenTree/part/test_param.py +++ b/InvenTree/part/test_param.py @@ -3,7 +3,7 @@ import django.core.exceptions as django_exceptions from django.test import TestCase, TransactionTestCase -from .models import (Part, PartCategory, PartCategoryParameterTemplate, +from .models import (PartCategory, PartCategoryParameterTemplate, PartParameter, PartParameterTemplate) @@ -43,6 +43,24 @@ class TestParams(TestCase): t3.full_clean() t3.save() # pragma: no cover + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [PartParameterTemplate]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) + class TestCategoryTemplates(TransactionTestCase): """Test class for PartCategoryParameterTemplate model""" @@ -70,21 +88,3 @@ class TestCategoryTemplates(TransactionTestCase): n = PartCategoryParameterTemplate.objects.all().count() self.assertEqual(n, 3) - - # Get test part - part = Part.objects.get(pk=1) - - # Get part parameters count - n_param = part.get_parameters().count() - - add_category_templates = { - 'main': True, - 'parent': True, - } - - # Save it with category parameters - part.save(**{'add_category_templates': add_category_templates}) - - # Check new part parameters count - # Only 2 parameters should be added as one already existed with same template - self.assertEqual(n_param + 2, part.get_parameters().count()) diff --git a/InvenTree/part/test_part.py b/InvenTree/part/test_part.py index 92178ae728..d502b659f8 100644 --- a/InvenTree/part/test_part.py +++ b/InvenTree/part/test_part.py @@ -134,14 +134,16 @@ class PartTest(TestCase): 'part_pricebreaks' ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Create some Part instances as part of init routine""" - super().setUp() - self.r1 = Part.objects.get(name='R_2K2_0805') - self.r2 = Part.objects.get(name='R_4K7_0603') + super().setUpTestData() - self.c1 = Part.objects.get(name='C_22N_0805') + cls.r1 = Part.objects.get(name='R_2K2_0805') + cls.r2 = Part.objects.get(name='R_4K7_0603') + + cls.c1 = Part.objects.get(name='C_22N_0805') Part.objects.rebuild() @@ -169,7 +171,7 @@ class PartTest(TestCase): def test_str(self): """Test string representation of a Part""" p = Part.objects.get(pk=100) - self.assertEqual(str(p), "BOB | Bob | A2 - Can we build it?") + self.assertEqual(str(p), "BOB | Bob | A2 - Can we build it? Yes we can!") def test_duplicate(self): """Test that we cannot create a "duplicate" Part.""" @@ -272,21 +274,22 @@ class PartTest(TestCase): self.assertEqual(float(self.r1.get_internal_price(10)), 0.5) def test_metadata(self): - """Unit tests for the Part metadata field.""" - p = Part.objects.get(pk=1) - self.assertIsNone(p.metadata) + """Unit tests for the metadata field.""" + for model in [Part]: + p = model.objects.first() + self.assertIsNone(p.metadata) - self.assertIsNone(p.get_metadata('test')) - self.assertEqual(p.get_metadata('test', backup_value=123), 123) + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) - # Test update via the set_metadata() method - p.set_metadata('test', 3) - self.assertEqual(p.get_metadata('test'), 3) + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) - for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: - p.set_metadata(k, k) + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) - self.assertEqual(len(p.metadata.keys()), 4) + self.assertEqual(len(p.metadata.keys()), 4) def test_related(self): """Unit tests for the PartRelated model""" @@ -529,15 +532,16 @@ class PartSubscriptionTests(InvenTreeTestCase): 'part', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Create category and part data as part of setup routine""" - super().setUp() + super().setUpTestData() - # electronics / IC / MCU - self.category = PartCategory.objects.get(pk=4) + # Electronics / IC / MCU + cls.category = PartCategory.objects.get(pk=4) - self.part = Part.objects.create( - category=self.category, + cls.part = Part.objects.create( + category=cls.category, name='STM32F103', description='Currently worth a lot of money', is_template=True, @@ -629,14 +633,16 @@ class BaseNotificationIntegrationTest(InvenTreeTestCase): 'stock' ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Add an email address as part of initialization""" - super().setUp() - # Add Mailadress - EmailAddress.objects.create(user=self.user, email='test@testing.com') + super().setUpTestData() + + # Add email address + EmailAddress.objects.create(user=cls.user, email='test@testing.com') # Define part that will be tested - self.part = Part.objects.get(name='R_2K2_0805') + cls.part = Part.objects.get(name='R_2K2_0805') def _notification_run(self, run_class=None): """Run a notification test suit through. diff --git a/InvenTree/part/test_pricing.py b/InvenTree/part/test_pricing.py index 8e715e4d7c..e470b2389d 100644 --- a/InvenTree/part/test_pricing.py +++ b/InvenTree/part/test_pricing.py @@ -2,7 +2,6 @@ from django.core.exceptions import ObjectDoesNotExist -from djmoney.contrib.exchange.models import ExchangeBackend, Rate from djmoney.money import Money import common.models @@ -18,34 +17,11 @@ from InvenTree.status_codes import PurchaseOrderStatus class PartPricingTests(InvenTreeTestCase): """Unit tests for part pricing calculations""" - def generate_exchange_rates(self): - """Generate some exchange rates to work with""" - - rates = { - 'AUD': 1.5, - 'CAD': 1.7, - 'GBP': 0.9, - 'USD': 1.0, - } - - # Create a dummy backend - ExchangeBackend.objects.create( - name='InvenTreeExchange', - base_currency='USD', - ) - - backend = ExchangeBackend.objects.get(name='InvenTreeExchange') - - for currency, rate in rates.items(): - Rate.objects.create( - currency=currency, - value=rate, - backend=backend, - ) - def setUp(self): """Setup routines""" + super().setUp() + self.generate_exchange_rates() # Create a new part for performing pricing calculations @@ -55,8 +31,6 @@ class PartPricingTests(InvenTreeTestCase): assembly=True ) - return super().setUp() - def create_price_breaks(self): """Create some price breaks for the part, in various currencies""" @@ -241,7 +215,7 @@ class PartPricingTests(InvenTreeTestCase): # Create a part p = part.models.Part.objects.create( name='Test part for pricing', - description='hello world', + description='hello world, this is a part description', ) # Create some stock items @@ -448,3 +422,40 @@ class PartPricingTests(InvenTreeTestCase): from django_q.models import OrmQ self.assertEqual(OrmQ.objects.count(), 101) + + def test_delete_part_with_stock_items(self): + """Test deleting a part instance with stock items. + + This is to test a specific edge condition which was discovered that caused an IntegrityError. + Ref: https://github.com/inventree/InvenTree/issues/4419 + + Essentially a series of on_delete listeners caused a new PartPricing object to be created, + but it pointed to a Part instance which was slated to be deleted inside an atomic transaction. + """ + + p = part.models.Part.objects.create( + name="my part", + description="my part description", + active=False, + ) + + # Create some stock items + for _idx in range(3): + stock.models.StockItem.objects.create( + part=p, + quantity=10, + purchase_price=Money(10, 'USD') + ) + + # Check that a PartPricing object exists + self.assertTrue(part.models.PartPricing.objects.filter(part=p).exists()) + + # Delete the part + p.delete() + + # Check that the PartPricing object has been deleted + self.assertFalse(part.models.PartPricing.objects.filter(part=p).exists()) + + # Try to update pricing (should fail gracefully as the Part has been deleted) + p.schedule_pricing_update(create=False) + self.assertFalse(part.models.PartPricing.objects.filter(part=p).exists()) diff --git a/InvenTree/part/test_views.py b/InvenTree/part/test_views.py index 469ef4ec8e..5471da647b 100644 --- a/InvenTree/part/test_views.py +++ b/InvenTree/part/test_views.py @@ -113,28 +113,3 @@ class PartDetailTest(PartViewTestCase): response = self.client.get(reverse('api-bom-download', args=(1,)), HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, 200) self.assertIn('streaming_content', dir(response)) - - -class PartQRTest(PartViewTestCase): - """Tests for the Part QR Code AJAX view.""" - - def test_html_redirect(self): - """A HTML request for a QR code should be redirected (use an AJAX request instead)""" - response = self.client.get(reverse('api-part-qr', args=(1,))) - self.assertEqual(response.status_code, 302) - - def test_valid_part(self): - """Test QR code response for a Part""" - response = self.client.get(reverse('api-part-qr', args=(1,)), HTTP_X_REQUESTED_WITH='XMLHttpRequest') - self.assertEqual(response.status_code, 200) - - data = str(response.content) - - self.assertIn('Part QR Code', data) - self.assertIn('\d+)/', include(part_detail_urls)), + path(r'/', include(part_detail_urls)), # Part category re_path(r'^category/', include(category_urls)), diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index b662f535d2..93b0887164 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -16,8 +16,7 @@ from common.models import InvenTreeSetting from common.views import FileManagementAjaxView, FileManagementFormView from company.models import SupplierPart from InvenTree.helpers import str2bool, str2int -from InvenTree.views import (AjaxUpdateView, AjaxView, InvenTreeRoleMixin, - QRCodeView) +from InvenTree.views import AjaxUpdateView, AjaxView, InvenTreeRoleMixin from plugin.views import InvenTreePluginViewMixin from stock.models import StockItem, StockLocation @@ -372,22 +371,6 @@ class PartDetailFromIPN(PartDetail): return super(PartDetailFromIPN, self).get(request, *args, **kwargs) -class PartQRCode(QRCodeView): - """View for displaying a QR code for a Part object.""" - - ajax_form_title = _("Part QR Code") - - role_required = 'part.view' - - def get_qr_data(self): - """Generate QR code data for the Part.""" - try: - part = Part.objects.get(id=self.pk) - return part.format_barcode() - except Part.DoesNotExist: - return None - - class PartImageSelect(AjaxUpdateView): """View for selecting Part image from existing images.""" diff --git a/InvenTree/plugin/api.py b/InvenTree/plugin/api.py index 029cf2b20e..7491b13587 100644 --- a/InvenTree/plugin/api.py +++ b/InvenTree/plugin/api.py @@ -1,14 +1,15 @@ """API for the plugin app.""" -from django.urls import include, re_path +from django.urls import include, path, re_path from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters, permissions, status +from rest_framework import permissions, status from rest_framework.exceptions import NotFound from rest_framework.response import Response import plugin.serializers as PluginSerializers from common.api import GlobalSettingsPermissions +from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import (CreateAPI, ListAPI, RetrieveUpdateAPI, RetrieveUpdateDestroyAPI, UpdateAPI) from InvenTree.permissions import IsSuperuser @@ -56,11 +57,7 @@ class PluginList(ListAPI): return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'active', @@ -255,7 +252,7 @@ plugin_api_urls = [ ])), # Detail views for a single PluginConfig item - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^settings/(?P\w+)/', PluginSettingDetail.as_view(), name='api-plugin-setting-detail-pk'), re_path(r'^activate/', PluginActivate.as_view(), name='api-plugin-detail-activate'), re_path(r'^.*$', PluginDetail.as_view(), name='api-plugin-detail'), diff --git a/InvenTree/plugin/base/event/events.py b/InvenTree/plugin/base/event/events.py index 61bdb6ae91..3b899d4ca9 100644 --- a/InvenTree/plugin/base/event/events.py +++ b/InvenTree/plugin/base/event/events.py @@ -125,6 +125,8 @@ def allow_table_event(table_name): 'common_webhookendpoint', 'common_webhookmessage', 'part_partpricing', + 'part_partstocktake', + 'part_partstocktakereport', ] if table_name in ignore_tables: diff --git a/InvenTree/plugin/base/integration/mixins.py b/InvenTree/plugin/base/integration/mixins.py index 55adb3e4c1..7faa21b061 100644 --- a/InvenTree/plugin/base/integration/mixins.py +++ b/InvenTree/plugin/base/integration/mixins.py @@ -5,6 +5,8 @@ import logging import requests +import part.models +import stock.models from plugin.helpers import (MixinNotImplementedError, render_template, render_text) @@ -45,42 +47,45 @@ class ValidationMixin: super().__init__() self.add_mixin('validation', True, __class__) - def validate_part_name(self, name: str): + def validate_part_name(self, name: str, part: part.models.Part): """Perform validation on a proposed Part name Arguments: name: The proposed part name + part: The part instance we are validating against Returns: - None or True + None or True (refer to class docstring) Raises: ValidationError if the proposed name is objectionable """ return None - def validate_part_ipn(self, ipn: str): + def validate_part_ipn(self, ipn: str, part: part.models.Part): """Perform validation on a proposed Part IPN (internal part number) Arguments: ipn: The proposed part IPN + part: The Part instance we are validating against Returns: - None or True + None or True (refer to class docstring) Raises: ValidationError if the proposed IPN is objectionable """ return None - def validate_batch_code(self, batch_code: str): + def validate_batch_code(self, batch_code: str, item: stock.models.StockItem): """Validate the supplied batch code Arguments: batch_code: The proposed batch code (string) + item: The StockItem instance we are validating against Returns: - None or True + None or True (refer to class docstring) Raises: ValidationError if the proposed batch code is objectionable @@ -95,14 +100,15 @@ class ValidationMixin: """ return None - def validate_serial_number(self, serial: str): - """Validate the supplied serial number + def validate_serial_number(self, serial: str, part: part.models.Part): + """Validate the supplied serial number. Arguments: serial: The proposed serial number (string) + part: The Part instance for which this serial number is being validated Returns: - None or True + None or True (refer to class docstring) Raises: ValidationError if the proposed serial is objectionable diff --git a/InvenTree/plugin/builtin/barcodes/inventree_barcode.py b/InvenTree/plugin/builtin/barcodes/inventree_barcode.py index 36a253086e..5d1d016139 100644 --- a/InvenTree/plugin/builtin/barcodes/inventree_barcode.py +++ b/InvenTree/plugin/builtin/barcodes/inventree_barcode.py @@ -11,12 +11,14 @@ import json from django.utils.translation import gettext_lazy as _ -from company.models import SupplierPart +import build.models +import company.models +import order.models +import part.models +import stock.models from InvenTree.helpers import hash_barcode -from part.models import Part from plugin import InvenTreePlugin from plugin.mixins import BarcodeMixin -from stock.models import StockItem, StockLocation class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): @@ -33,10 +35,14 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): """Returns a list of database models which support barcode functionality""" return [ - Part, - StockItem, - StockLocation, - SupplierPart, + build.models.Build, + company.models.SupplierPart, + order.models.PurchaseOrder, + order.models.ReturnOrder, + order.models.SalesOrder, + part.models.Part, + stock.models.StockItem, + stock.models.StockLocation, ] def format_matched_response(self, label, model, instance): @@ -94,7 +100,8 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin): if label in barcode_dict: try: - instance = model.objects.get(pk=barcode_dict[label]) + pk = int(barcode_dict[label]) + instance = model.objects.get(pk=pk) return self.format_matched_response(label, model, instance) except (ValueError, model.DoesNotExist): pass diff --git a/InvenTree/plugin/registry.py b/InvenTree/plugin/registry.py index dc99d98c36..ed76b974f9 100644 --- a/InvenTree/plugin/registry.py +++ b/InvenTree/plugin/registry.py @@ -115,7 +115,7 @@ class PluginsRegistry: full_reload (bool, optional): Reload everything - including plugin mechanism. Defaults to False. """ - logger.info('Start loading plugins') + logger.info('Loading plugins') # Set maintanace mode _maintenance = bool(get_maintenance_mode()) @@ -168,8 +168,12 @@ class PluginsRegistry: logger.info('Finished loading plugins') - def unload_plugins(self): - """Unload and deactivate all IntegrationPlugins.""" + def unload_plugins(self, force_reload: bool = False): + """Unload and deactivate all IntegrationPlugins. + + Args: + force_reload (bool, optional): Also reload base apps. Defaults to False. + """ logger.info('Start unloading plugins') @@ -182,7 +186,7 @@ class PluginsRegistry: self._clean_registry() # deactivate all integrations - self._deactivate_plugins() + self._deactivate_plugins(force_reload=force_reload) # remove maintenance if not _maintenance: @@ -190,11 +194,12 @@ class PluginsRegistry: logger.info('Finished unloading plugins') - def reload_plugins(self, full_reload: bool = False): + def reload_plugins(self, full_reload: bool = False, force_reload: bool = False): """Safely reload. Args: full_reload (bool, optional): Reload everything - including plugin mechanism. Defaults to False. + force_reload (bool, optional): Also reload base apps. Defaults to False. """ # Do not reload whe currently loading if self.is_loading: @@ -203,8 +208,8 @@ class PluginsRegistry: logger.info('Start reloading plugins') with maintenance_mode_on(): - self.unload_plugins() - self.load_plugins(full_reload) + self.unload_plugins(force_reload=force_reload) + self.load_plugins(full_reload=full_reload) logger.info('Finished reloading plugins') @@ -274,7 +279,7 @@ class PluginsRegistry: # Collect plugins from paths for plugin in self.plugin_dirs(): - logger.info(f"Loading plugins from directory '{plugin}'") + logger.debug(f"Loading plugins from directory '{plugin}'") parent_path = None parent_obj = Path(plugin) @@ -312,7 +317,7 @@ class PluginsRegistry: # Log collected plugins logger.info(f'Collected {len(collected_plugins)} plugins!') - logger.info(", ".join([a.__module__ for a in collected_plugins])) + logger.debug(", ".join([a.__module__ for a in collected_plugins])) return collected_plugins @@ -389,7 +394,7 @@ class PluginsRegistry: self.plugins_inactive[key] = plugin.db self.plugins_full[key] = plugin - logger.info('Starting plugin initialisation') + logger.debug('Starting plugin initialisation') # Initialize plugins for plg in self.plugin_modules: @@ -431,9 +436,10 @@ class PluginsRegistry: # Initialize package - we can be sure that an admin has activated the plugin logger.info(f'Loading plugin `{plg_name}`') + try: plg_i: InvenTreePlugin = plg() - logger.info(f'Loaded plugin `{plg_name}`') + logger.debug(f'Loaded plugin `{plg_name}`') except Exception as error: handle_error(error, log_name='init') # log error and raise it -> disable plugin @@ -447,11 +453,13 @@ class PluginsRegistry: # Disable plugin safe_reference(plugin=plg_i, key=plg_key, active=False) - _msg = _(f'Plugin `{plg_name}` is not compatible with the current InvenTree version {version.inventreeVersion()}!') - if plg_i.MIN_VERSION: - _msg += _(f'Plugin requires at least version {plg_i.MIN_VERSION}') - if plg_i.MAX_VERSION: - _msg += _(f'Plugin requires at most version {plg_i.MAX_VERSION}') + p = plg_name + v = version.inventreeVersion() + _msg = _(f"Plugin '{p}' is not compatible with the current InvenTree version {v}") + if v := plg_i.MIN_VERSION: + _msg += _(f'Plugin requires at least version {v}') + if v := plg_i.MAX_VERSION: + _msg += _(f'Plugin requires at most version {v}') # Log to error stack log_error(_msg, reference='init') else: @@ -476,14 +484,15 @@ class PluginsRegistry: logger.info('Done activating') - def _deactivate_plugins(self): - """Run deactivation functions for all plugins.""" + def _deactivate_plugins(self, force_reload: bool = False): + """Run deactivation functions for all plugins. - for mixin in self.mixin_order: - if hasattr(mixin, '_deactivate_mixin'): - mixin._deactivate_mixin(self) - - logger.info('Done deactivating') + Args: + force_reload (bool, optional): Also reload base apps. Defaults to False. + """ + self.deactivate_plugin_app(force_reload=force_reload) + self.deactivate_plugin_schedule() + self.deactivate_plugin_settings() # endregion # region mixin specific loading ... @@ -518,6 +527,53 @@ class PluginsRegistry: self._try_reload(apps.set_installed_apps, settings.INSTALLED_APPS) self.is_loading = False + def deactivate_plugin_app(self, force_reload: bool = False): + """Deactivate AppMixin plugins - some magic required. + + Args: + force_reload (bool, optional): Also reload base apps. Defaults to False. + """ + # unregister models from admin + for plugin_path in self.installed_apps: + models = [] # the modelrefs need to be collected as poping an item in a iter is not welcomed + app_name = plugin_path.split('.')[-1] + try: + app_config = apps.get_app_config(app_name) + + # check all models + for model in app_config.get_models(): + # remove model from admin site + try: + admin.site.unregister(model) + except Exception: # pragma: no cover + pass + models += [model._meta.model_name] + except LookupError: # pragma: no cover + # if an error occurs the app was never loaded right -> so nothing to do anymore + logger.debug(f'{app_name} App was not found during deregistering') + break + + # unregister the models (yes, models are just kept in multilevel dicts) + for model in models: + # remove model from general registry + apps.all_models[plugin_path].pop(model) + + # clear the registry for that app + # so that the import trick will work on reloading the same plugin + # -> the registry is kept for the whole lifecycle + if models and app_name in apps.all_models: + apps.all_models.pop(app_name) + + # remove plugin from installed_apps + self._clean_installed_apps() + + # reset load flag and reload apps + settings.INTEGRATION_APPS_LOADED = False + self._reload_apps(force_reload=force_reload) + + # update urls to remove the apps from the site admin + self._update_urls() + def _clean_installed_apps(self): for plugin in self.installed_apps: if plugin in settings.INSTALLED_APPS: diff --git a/InvenTree/plugin/samples/integration/validation_sample.py b/InvenTree/plugin/samples/integration/validation_sample.py index aac6b0cd8e..a889dcdfc7 100644 --- a/InvenTree/plugin/samples/integration/validation_sample.py +++ b/InvenTree/plugin/samples/integration/validation_sample.py @@ -9,13 +9,16 @@ from plugin.mixins import SettingsMixin, ValidationMixin class CustomValidationMixin(SettingsMixin, ValidationMixin, InvenTreePlugin): - """A sample plugin class for demonstrating custom validation functions""" + """A sample plugin class for demonstrating custom validation functions. + + Simple of examples of custom validator code. + """ NAME = "CustomValidator" SLUG = "validator" TITLE = "Custom Validator Plugin" DESCRIPTION = "A sample plugin for demonstrating custom validation functionality" - VERSION = "0.1" + VERSION = "0.2" SETTINGS = { 'ILLEGAL_PART_CHARS': { @@ -35,15 +38,30 @@ class CustomValidationMixin(SettingsMixin, ValidationMixin, InvenTreePlugin): 'default': False, 'validator': bool, }, + 'SERIAL_MUST_MATCH_PART': { + 'name': 'Serial must match part', + 'description': 'First letter of serial number must match first letter of part name', + 'default': False, + 'validator': bool, + }, 'BATCH_CODE_PREFIX': { 'name': 'Batch prefix', 'description': 'Required prefix for batch code', - 'default': '', - } + 'default': 'B', + }, } - def validate_part_name(self, name: str): - """Validate part name""" + def validate_part_name(self, name: str, part): + """Custom validation for Part name field: + + - Name must be shorter than the description field + - Name cannot contain illegal characters + + These examples are silly, but serve to demonstrate how the feature could be used + """ + + if len(part.description) < len(name): + raise ValidationError("Part description cannot be shorter than the name") illegal_chars = self.get_setting('ILLEGAL_PART_CHARS') @@ -51,26 +69,41 @@ class CustomValidationMixin(SettingsMixin, ValidationMixin, InvenTreePlugin): if c in name: raise ValidationError(f"Illegal character in part name: '{c}'") - def validate_part_ipn(self, ipn: str): - """Validate part IPN""" + def validate_part_ipn(self, ipn: str, part): + """Validate part IPN + + These examples are silly, but serve to demonstrate how the feature could be used + """ if self.get_setting('IPN_MUST_CONTAIN_Q') and 'Q' not in ipn: raise ValidationError("IPN must contain 'Q'") - def validate_serial_number(self, serial: str): - """Validate serial number for a given StockItem""" + def validate_serial_number(self, serial: str, part): + """Validate serial number for a given StockItem + + These examples are silly, but serve to demonstrate how the feature could be used + """ if self.get_setting('SERIAL_MUST_BE_PALINDROME'): if serial != serial[::-1]: raise ValidationError("Serial must be a palindrome") - def validate_batch_code(self, batch_code: str): - """Ensure that a particular batch code meets specification""" + if self.get_setting('SERIAL_MUST_MATCH_PART'): + # Serial must start with the same letter as the linked part, for some reason + if serial[0] != part.name[0]: + raise ValidationError("Serial number must start with same letter as part") + + def validate_batch_code(self, batch_code: str, item): + """Ensure that a particular batch code meets specification. + + These examples are silly, but serve to demonstrate how the feature could be used + """ prefix = self.get_setting('BATCH_CODE_PREFIX') - if not batch_code.startswith(prefix): - raise ValidationError(f"Batch code must start with '{prefix}'") + if len(batch_code) > 0: + if prefix and not batch_code.startswith(prefix): + raise ValidationError(f"Batch code must start with '{prefix}'") def generate_batch_code(self): """Generate a new batch code.""" diff --git a/InvenTree/plugin/serializers.py b/InvenTree/plugin/serializers.py index 913ed66011..2f902e3d2a 100644 --- a/InvenTree/plugin/serializers.py +++ b/InvenTree/plugin/serializers.py @@ -10,6 +10,7 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from common.serializers import GenericReferencedSettingSerializer +from InvenTree.tasks import check_for_migrations, offload_task from plugin.models import NotificationUserSetting, PluginConfig, PluginSetting @@ -18,11 +19,6 @@ class MetadataSerializer(serializers.ModelSerializer): metadata = serializers.JSONField(required=True) - def __init__(self, model_type, *args, **kwargs): - """Initialize the metadata serializer with information on the model type""" - self.Meta.model = model_type - super().__init__(*args, **kwargs) - class Meta: """Metaclass options.""" @@ -30,6 +26,11 @@ class MetadataSerializer(serializers.ModelSerializer): 'metadata', ] + def __init__(self, model_type, *args, **kwargs): + """Initialize the metadata serializer with information on the model type""" + self.Meta.model = model_type + super().__init__(*args, **kwargs) + def update(self, instance, data): """Perform update on the metadata field: @@ -48,9 +49,6 @@ class MetadataSerializer(serializers.ModelSerializer): class PluginConfigSerializer(serializers.ModelSerializer): """Serializer for a PluginConfig.""" - meta = serializers.DictField(read_only=True) - mixins = serializers.DictField(read_only=True) - class Meta: """Meta for serializer.""" model = PluginConfig @@ -62,10 +60,21 @@ class PluginConfigSerializer(serializers.ModelSerializer): 'mixins', ] + meta = serializers.DictField(read_only=True) + mixins = serializers.DictField(read_only=True) + class PluginConfigInstallSerializer(serializers.Serializer): """Serializer for installing a new plugin.""" + class Meta: + """Meta for serializer.""" + fields = [ + 'url', + 'packagename', + 'confirm', + ] + url = serializers.CharField( required=False, allow_blank=True, @@ -83,14 +92,6 @@ class PluginConfigInstallSerializer(serializers.Serializer): help_text=_('This will install this plugin now into the current instance. The instance will go into maintenance.') ) - class Meta: - """Meta for serializer.""" - fields = [ - 'url', - 'packagename', - 'confirm', - ] - def validate(self, data): """Validate inputs. @@ -156,6 +157,9 @@ class PluginConfigInstallSerializer(serializers.Serializer): with open(settings.PLUGIN_FILE, "a") as plugin_file: plugin_file.write(f'{" ".join(install_name)} # Installed {timezone.now()} by {str(self.context["request"].user)}\n') + # Check for migrations + offload_task(check_for_migrations, worker=True) + return ret diff --git a/InvenTree/plugin/test_plugin.py b/InvenTree/plugin/test_plugin.py index 953915841d..c8d51f4944 100644 --- a/InvenTree/plugin/test_plugin.py +++ b/InvenTree/plugin/test_plugin.py @@ -66,25 +66,29 @@ class PluginTagTests(TestCase): class InvenTreePluginTests(TestCase): """Tests for InvenTreePlugin.""" - def setUp(self): + @classmethod + def setUpTestData(cls): """Setup for all tests.""" - self.plugin = InvenTreePlugin() + + super().setUpTestData() + + cls.plugin = InvenTreePlugin() class NamedPlugin(InvenTreePlugin): """a named plugin.""" NAME = 'abc123' - self.named_plugin = NamedPlugin() + cls.named_plugin = NamedPlugin() class SimpleInvenTreePlugin(InvenTreePlugin): NAME = 'SimplePlugin' - self.plugin_simple = SimpleInvenTreePlugin() + cls.plugin_simple = SimpleInvenTreePlugin() class OldInvenTreePlugin(InvenTreePlugin): PLUGIN_SLUG = 'old' - self.plugin_old = OldInvenTreePlugin() + cls.plugin_old = OldInvenTreePlugin() class NameInvenTreePlugin(InvenTreePlugin): NAME = 'Aplugin' @@ -97,8 +101,8 @@ class InvenTreePluginTests(TestCase): WEBSITE = 'https://aa.bb/cc' LICENSE = 'MIT' - self.plugin_name = NameInvenTreePlugin() - self.plugin_sample = SampleIntegrationPlugin() + cls.plugin_name = NameInvenTreePlugin() + cls.plugin_sample = SampleIntegrationPlugin() class VersionInvenTreePlugin(InvenTreePlugin): NAME = 'Version' @@ -106,7 +110,7 @@ class InvenTreePluginTests(TestCase): MIN_VERSION = '0.1.0' MAX_VERSION = '0.1.3' - self.plugin_version = VersionInvenTreePlugin() + cls.plugin_version = VersionInvenTreePlugin() def test_basic_plugin_init(self): """Check if a basic plugin intis.""" diff --git a/InvenTree/report/admin.py b/InvenTree/report/admin.py index adf813aede..94acf89e98 100644 --- a/InvenTree/report/admin.py +++ b/InvenTree/report/admin.py @@ -3,7 +3,8 @@ from django.contrib import admin from .models import (BillOfMaterialsReport, BuildReport, PurchaseOrderReport, - ReportAsset, ReportSnippet, SalesOrderReport, TestReport) + ReportAsset, ReportSnippet, ReturnOrderReport, + SalesOrderReport, TestReport) class ReportTemplateAdmin(admin.ModelAdmin): @@ -28,4 +29,5 @@ admin.site.register(TestReport, ReportTemplateAdmin) admin.site.register(BuildReport, ReportTemplateAdmin) admin.site.register(BillOfMaterialsReport, ReportTemplateAdmin) admin.site.register(PurchaseOrderReport, ReportTemplateAdmin) +admin.site.register(ReturnOrderReport, ReportTemplateAdmin) admin.site.register(SalesOrderReport, ReportTemplateAdmin) diff --git a/InvenTree/report/api.py b/InvenTree/report/api.py index 738c7b859b..1ad42b5238 100644 --- a/InvenTree/report/api.py +++ b/InvenTree/report/api.py @@ -5,10 +5,11 @@ from django.core.files.base import ContentFile from django.http import HttpResponse from django.template.exceptions import TemplateDoesNotExist from django.urls import include, path, re_path +from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ +from django.views.decorators.cache import cache_page, never_cache from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters from rest_framework.response import Response import build.models @@ -16,13 +17,16 @@ import common.models import InvenTree.helpers import order.models import part.models +from InvenTree.api import MetadataView +from InvenTree.filters import InvenTreeSearchFilter from InvenTree.mixins import ListAPI, RetrieveAPI, RetrieveUpdateDestroyAPI from stock.models import StockItem, StockItemAttachment from .models import (BillOfMaterialsReport, BuildReport, PurchaseOrderReport, - SalesOrderReport, TestReport) + ReturnOrderReport, SalesOrderReport, TestReport) from .serializers import (BOMReportSerializer, BuildReportSerializer, PurchaseOrderReportSerializer, + ReturnOrderReportSerializer, SalesOrderReportSerializer, TestReportSerializer) @@ -31,7 +35,7 @@ class ReportListView(ListAPI): filter_backends = [ DjangoFilterBackend, - filters.SearchFilter, + InvenTreeSearchFilter, ] filterset_fields = [ @@ -44,122 +48,109 @@ class ReportListView(ListAPI): ] -class StockItemReportMixin: - """Mixin for extracting stock items from query params.""" +class ReportFilterMixin: + """Mixin for extracting multiple objects from query params. - def get_items(self): - """Return a list of requested stock items.""" - items = [] + Each subclass *must* have an attribute called 'ITEM_KEY', + which is used to determine what 'key' is used in the query parameters. - params = self.request.query_params - - for key in ['item', 'item[]', 'items', 'items[]']: - if key in params: - items = params.getlist(key, []) - break - - valid_ids = [] - - for item in items: - try: - valid_ids.append(int(item)) - except (ValueError): - pass - - # List of StockItems which match provided values - valid_items = StockItem.objects.filter(pk__in=valid_ids) - - return valid_items - - -class BuildReportMixin: - """Mixin for extracting Build items from query params.""" - - def get_builds(self): - """Return a list of requested Build objects.""" - builds = [] - - params = self.request.query_params - - for key in ['build', 'build[]', 'builds', 'builds[]']: - - if key in params: - builds = params.getlist(key, []) - - break - - valid_ids = [] - - for b in builds: - try: - valid_ids.append(int(b)) - except (ValueError): - continue - - return build.models.Build.objects.filter(pk__in=valid_ids) - - -class OrderReportMixin: - """Mixin for extracting order items from query params. - - requires the OrderModel class attribute to be set! + This mixin defines a 'get_items' method which provides a generic implementation + to return a list of matching database model instances """ - def get_orders(self): - """Return a list of order objects.""" - orders = [] + # Database model for instances to actually be "printed" against this report template + ITEM_MODEL = None - params = self.request.query_params + # Default key for looking up database model instances + ITEM_KEY = 'item' - for key in ['order', 'order[]', 'orders', 'orders[]']: - if key in params: - orders = params.getlist(key, []) + def get_items(self): + """Return a list of database objects from query parameters""" + + if not self.ITEM_MODEL: + raise NotImplementedError(f"ITEM_MODEL attribute not defined for {__class__}") + + ids = [] + + # Construct a list of possible query parameter value options + # e.g. if self.ITEM_KEY = 'order' -> ['order', 'order[]', 'orders', 'orders[]'] + for k in [self.ITEM_KEY + x for x in ['', '[]', 's', 's[]']]: + if ids := self.request.query_params.getlist(k, []): + # Return the first list of matches break + # Next we must validated each provided object ID valid_ids = [] - for o in orders: + for id in ids: try: - valid_ids.append(int(o)) - except (ValueError): + valid_ids.append(int(id)) + except ValueError: pass - valid_orders = self.OrderModel.objects.filter(pk__in=valid_ids) + # Filter queryset by matching ID values + return self.ITEM_MODEL.objects.filter(pk__in=valid_ids) - return valid_orders - - -class PartReportMixin: - """Mixin for extracting part items from query params.""" - - def get_parts(self): - """Return a list of requested part objects.""" - parts = [] - - params = self.request.query_params - - for key in ['part', 'part[]', 'parts', 'parts[]']: - - if key in params: - parts = params.getlist(key, []) - - valid_ids = [] - - for p in parts: - try: - valid_ids.append(int(p)) - except (ValueError): - continue - - # Extract a valid set of Part objects - valid_parts = part.models.Part.objects.filter(pk__in=valid_ids) - - return valid_parts + def filter_queryset(self, queryset): + """Filter the queryset based on the provided report ID values. + + As each 'report' instance may optionally define its own filters, + the resulting queryset is the 'union' of the two + """ + + queryset = super().filter_queryset(queryset) + + items = self.get_items() + + if len(items) > 0: + """At this point, we are basically forced to be inefficient: + + We need to compare the 'filters' string of each report template, + and see if it matches against each of the requested items. + + In practice, this is not too bad. + """ + + valid_report_ids = set() + + for report in queryset.all(): + matches = True + + try: + filters = InvenTree.helpers.validateFilterString(report.filters) + except ValidationError: + continue + + for item in items: + item_query = self.ITEM_MODEL.objects.filter(pk=item.pk) + + try: + if not item_query.filter(**filters).exists(): + matches = False + break + except FieldError: + matches = False + break + + # Matched all items + if matches: + valid_report_ids.add(report.pk) + + # Reduce queryset to only valid matches + queryset = queryset.filter(pk__in=[pk for pk in valid_report_ids]) + + return queryset +@method_decorator(cache_page(5), name='dispatch') class ReportPrintMixin: """Mixin for printing reports.""" + @method_decorator(never_cache) + def dispatch(self, *args, **kwargs): + """Prevent caching when printing report templates""" + return super().dispatch(*args, **kwargs) + def report_callback(self, object, report, request): """Callback function for each object/report combination. @@ -185,7 +176,7 @@ class ReportPrintMixin: outputs = [] # In debug mode, generate single HTML output, rather than PDF - debug_mode = common.models.InvenTreeSetting.get_setting('REPORT_DEBUG_MODE') + debug_mode = common.models.InvenTreeSetting.get_setting('REPORT_DEBUG_MODE', cache=False) # Start with a default report name report_name = "report.pdf" @@ -254,7 +245,7 @@ class ReportPrintMixin: status=400, ) - inline = common.models.InvenTreeUserSetting.get_setting('REPORT_INLINE', user=request.user) + inline = common.models.InvenTreeUserSetting.get_setting('REPORT_INLINE', user=request.user, cache=False) return InvenTree.helpers.DownloadFile( pdf, @@ -263,8 +254,25 @@ class ReportPrintMixin: inline=inline, ) + def get(self, request, *args, **kwargs): + """Default implementation of GET for a print endpoint. -class StockItemTestReportList(ReportListView, StockItemReportMixin): + Note that it expects the class has defined a get_items() method + """ + items = self.get_items() + return self.print(request, items) + + +class StockItemTestReportMixin(ReportFilterMixin): + """Mixin for StockItemTestReport report template""" + + ITEM_MODEL = StockItem + ITEM_KEY = 'item' + queryset = TestReport.objects.all() + serializer_class = TestReportSerializer + + +class StockItemTestReportList(StockItemTestReportMixin, ReportListView): """API endpoint for viewing list of TestReport objects. Filterable by: @@ -272,81 +280,28 @@ class StockItemTestReportList(ReportListView, StockItemReportMixin): - enabled: Filter by enabled / disabled status - item: Filter by stock item(s) """ - - queryset = TestReport.objects.all() - serializer_class = TestReportSerializer - - def filter_queryset(self, queryset): - """Custom queryset filtering""" - queryset = super().filter_queryset(queryset) - - # List of StockItem objects to match against - items = self.get_items() - - if len(items) > 0: - """ - We wish to filter by stock items. - - We need to compare the 'filters' string of each report, - and see if it matches against each of the specified stock items. - - TODO: In the future, perhaps there is a way to make this more efficient. - """ - - valid_report_ids = set() - - for report in queryset.all(): - - matches = True - - # Filter string defined for the report object - try: - filters = InvenTree.helpers.validateFilterString(report.filters) - except Exception: - continue - - for item in items: - item_query = StockItem.objects.filter(pk=item.pk) - - try: - if not item_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - if matches: - valid_report_ids.add(report.pk) - else: - continue - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=[pk for pk in valid_report_ids]) - return queryset + pass -class StockItemTestReportDetail(RetrieveUpdateDestroyAPI): +class StockItemTestReportDetail(StockItemTestReportMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single TestReport object.""" - - queryset = TestReport.objects.all() - serializer_class = TestReportSerializer + pass -class StockItemTestReportPrint(RetrieveAPI, StockItemReportMixin, ReportPrintMixin): +class StockItemTestReportPrint(StockItemTestReportMixin, ReportPrintMixin, RetrieveAPI): """API endpoint for printing a TestReport object.""" - queryset = TestReport.objects.all() - serializer_class = TestReportSerializer - def report_callback(self, item, report, request): """Callback to (optionally) save a copy of the generated report""" - if common.models.InvenTreeSetting.get_setting('REPORT_ATTACH_TEST_REPORT'): + if common.models.InvenTreeSetting.get_setting('REPORT_ATTACH_TEST_REPORT', cache=False): # Construct a PDF file object - pdf = report.get_document().write_pdf() - pdf_content = ContentFile(pdf, "test_report.pdf") + try: + pdf = report.get_document().write_pdf() + pdf_content = ContentFile(pdf, "test_report.pdf") + except TemplateDoesNotExist: + return StockItemAttachment.objects.create( attachment=pdf_content, @@ -355,14 +310,18 @@ class StockItemTestReportPrint(RetrieveAPI, StockItemReportMixin, ReportPrintMix comment=_("Test report") ) - def get(self, request, *args, **kwargs): - """Check if valid stock item(s) have been provided.""" - items = self.get_items() - return self.print(request, items) +class BOMReportMixin(ReportFilterMixin): + """Mixin for BillOfMaterialsReport report template""" + + ITEM_MODEL = part.models.Part + ITEM_KEY = 'part' + + queryset = BillOfMaterialsReport.objects.all() + serializer_class = BOMReportSerializer -class BOMReportList(ReportListView, PartReportMixin): +class BOMReportList(BOMReportMixin, ReportListView): """API endpoint for viewing a list of BillOfMaterialReport objects. Filterably by: @@ -370,80 +329,30 @@ class BOMReportList(ReportListView, PartReportMixin): - enabled: Filter by enabled / disabled status - part: Filter by part(s) """ - - queryset = BillOfMaterialsReport.objects.all() - serializer_class = BOMReportSerializer - - def filter_queryset(self, queryset): - """Custom queryset filtering""" - queryset = super().filter_queryset(queryset) - - # List of Part objects to match against - parts = self.get_parts() - - if len(parts) > 0: - """ - We wish to filter by part(s). - - We need to compare the 'filters' string of each report, - and see if it matches against each of the specified parts. - """ - - valid_report_ids = set() - - for report in queryset.all(): - - matches = True - - try: - filters = InvenTree.helpers.validateFilterString(report.filters) - except ValidationError: - # Filters are ill-defined - continue - - for p in parts: - part_query = part.models.Part.objects.filter(pk=p.pk) - - try: - if not part_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - if matches: - valid_report_ids.add(report.pk) - else: - continue - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=[pk for pk in valid_report_ids]) - - return queryset + pass -class BOMReportDetail(RetrieveUpdateDestroyAPI): +class BOMReportDetail(BOMReportMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single BillOfMaterialReport object.""" - - queryset = BillOfMaterialsReport.objects.all() - serializer_class = BOMReportSerializer + pass -class BOMReportPrint(RetrieveAPI, PartReportMixin, ReportPrintMixin): +class BOMReportPrint(BOMReportMixin, ReportPrintMixin, RetrieveAPI): """API endpoint for printing a BillOfMaterialReport object.""" - - queryset = BillOfMaterialsReport.objects.all() - serializer_class = BOMReportSerializer - - def get(self, request, *args, **kwargs): - """Check if valid part item(s) have been provided.""" - parts = self.get_parts() - - return self.print(request, parts) + pass -class BuildReportList(ReportListView, BuildReportMixin): +class BuildReportMixin(ReportFilterMixin): + """Mixin for the BuildReport report template""" + + ITEM_MODEL = build.models.Build + ITEM_KEY = 'build' + + queryset = BuildReport.objects.all() + serializer_class = BuildReportSerializer + + +class BuildReportList(BuildReportMixin, ReportListView): """API endpoint for viewing a list of BuildReport objects. Can be filtered by: @@ -451,236 +360,92 @@ class BuildReportList(ReportListView, BuildReportMixin): - enabled: Filter by enabled / disabled status - build: Filter by Build object """ - - queryset = BuildReport.objects.all() - serializer_class = BuildReportSerializer - - def filter_queryset(self, queryset): - """Custom queryset filtering""" - queryset = super().filter_queryset(queryset) - - # List of Build objects to match against - builds = self.get_builds() - - if len(builds) > 0: - """ - We wish to filter by Build(s) - - We need to compare the 'filters' string of each report, - and see if it matches against each of the specified parts - - # TODO: This code needs some refactoring! - """ - - valid_build_ids = set() - - for report in queryset.all(): - - matches = True - - try: - filters = InvenTree.helpers.validateFilterString(report.filters) - except ValidationError: - continue - - for b in builds: - build_query = build.models.Build.objects.filter(pk=b.pk) - - try: - if not build_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - if matches: - valid_build_ids.add(report.pk) - else: - continue - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=[pk for pk in valid_build_ids]) - - return queryset + pass -class BuildReportDetail(RetrieveUpdateDestroyAPI): +class BuildReportDetail(BuildReportMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single BuildReport object.""" - - queryset = BuildReport.objects.all() - serializer_class = BuildReportSerializer + pass -class BuildReportPrint(RetrieveAPI, BuildReportMixin, ReportPrintMixin): +class BuildReportPrint(BuildReportMixin, ReportPrintMixin, RetrieveAPI): """API endpoint for printing a BuildReport.""" - - queryset = BuildReport.objects.all() - serializer_class = BuildReportSerializer - - def get(self, request, *ars, **kwargs): - """Perform a GET action to print the report""" - builds = self.get_builds() - - return self.print(request, builds) + pass -class PurchaseOrderReportList(ReportListView, OrderReportMixin): +class PurchaseOrderReportMixin(ReportFilterMixin): + """Mixin for the PurchaseOrderReport report template""" + + ITEM_MODEL = order.models.PurchaseOrder + ITEM_KEY = 'order' + + queryset = PurchaseOrderReport.objects.all() + serializer_class = PurchaseOrderReportSerializer + + +class PurchaseOrderReportList(PurchaseOrderReportMixin, ReportListView): """API list endpoint for the PurchaseOrderReport model""" - OrderModel = order.models.PurchaseOrder - - queryset = PurchaseOrderReport.objects.all() - serializer_class = PurchaseOrderReportSerializer - - def filter_queryset(self, queryset): - """Custom queryset filter for the PurchaseOrderReport list""" - queryset = super().filter_queryset(queryset) - - orders = self.get_orders() - - if len(orders) > 0: - """ - We wish to filter by purchase orders. - - We need to compare the 'filters' string of each report, - and see if it matches against each of the specified orders. - - TODO: In the future, perhaps there is a way to make this more efficient. - """ - - valid_report_ids = set() - - for report in queryset.all(): - - matches = True - - # Filter string defined for the report object - try: - filters = InvenTree.helpers.validateFilterString(report.filters) - except Exception: - continue - - for o in orders: - order_query = order.models.PurchaseOrder.objects.filter(pk=o.pk) - - try: - if not order_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - if matches: - valid_report_ids.add(report.pk) - else: - continue - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=[pk for pk in valid_report_ids]) - - return queryset + pass -class PurchaseOrderReportDetail(RetrieveUpdateDestroyAPI): +class PurchaseOrderReportDetail(PurchaseOrderReportMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single PurchaseOrderReport object.""" - - queryset = PurchaseOrderReport.objects.all() - serializer_class = PurchaseOrderReportSerializer + pass -class PurchaseOrderReportPrint(RetrieveAPI, OrderReportMixin, ReportPrintMixin): +class PurchaseOrderReportPrint(PurchaseOrderReportMixin, ReportPrintMixin, RetrieveAPI): """API endpoint for printing a PurchaseOrderReport object.""" - - OrderModel = order.models.PurchaseOrder - - queryset = PurchaseOrderReport.objects.all() - serializer_class = PurchaseOrderReportSerializer - - def get(self, request, *args, **kwargs): - """Perform GET request to print the report""" - orders = self.get_orders() - - return self.print(request, orders) + pass -class SalesOrderReportList(ReportListView, OrderReportMixin): +class SalesOrderReportMixin(ReportFilterMixin): + """Mixin for the SalesOrderReport report template""" + + ITEM_MODEL = order.models.SalesOrder + ITEM_KEY = 'order' + + queryset = SalesOrderReport.objects.all() + serializer_class = SalesOrderReportSerializer + + +class SalesOrderReportList(SalesOrderReportMixin, ReportListView): """API list endpoint for the SalesOrderReport model""" - OrderModel = order.models.SalesOrder - - queryset = SalesOrderReport.objects.all() - serializer_class = SalesOrderReportSerializer - - def filter_queryset(self, queryset): - """Custom queryset filtering for the SalesOrderReport API list""" - queryset = super().filter_queryset(queryset) - - orders = self.get_orders() - - if len(orders) > 0: - """ - We wish to filter by purchase orders. - - We need to compare the 'filters' string of each report, - and see if it matches against each of the specified orders. - - TODO: In the future, perhaps there is a way to make this more efficient. - """ - - valid_report_ids = set() - - for report in queryset.all(): - - matches = True - - # Filter string defined for the report object - try: - filters = InvenTree.helpers.validateFilterString(report.filters) - except Exception: - continue - - for o in orders: - order_query = order.models.SalesOrder.objects.filter(pk=o.pk) - - try: - if not order_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - if matches: - valid_report_ids.add(report.pk) - else: - continue - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=[pk for pk in valid_report_ids]) - - return queryset + pass -class SalesOrderReportDetail(RetrieveUpdateDestroyAPI): +class SalesOrderReportDetail(SalesOrderReportMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single SalesOrderReport object.""" - - queryset = SalesOrderReport.objects.all() - serializer_class = SalesOrderReportSerializer + pass -class SalesOrderReportPrint(RetrieveAPI, OrderReportMixin, ReportPrintMixin): +class SalesOrderReportPrint(SalesOrderReportMixin, ReportPrintMixin, RetrieveAPI): """API endpoint for printing a PurchaseOrderReport object.""" + pass - OrderModel = order.models.SalesOrder - queryset = SalesOrderReport.objects.all() - serializer_class = SalesOrderReportSerializer +class ReturnOrderReportMixin(ReportFilterMixin): + """Mixin for the ReturnOrderReport report template""" - def get(self, request, *args, **kwargs): - """Perform a GET request to print the report""" - orders = self.get_orders() + ITEM_MODEL = order.models.ReturnOrder + ITEM_KEY = 'order' - return self.print(request, orders) + queryset = ReturnOrderReport.objects.all() + serializer_class = ReturnOrderReportSerializer + + +class ReturnOrderReportList(ReturnOrderReportMixin, ReportListView): + """API list endpoint for the ReturnOrderReport model""" + pass + + +class ReturnOrderReportDetail(ReturnOrderReportMixin, RetrieveUpdateDestroyAPI): + """API endpoint for a single ReturnOrderReport object""" + pass + + +class ReturnOrderReportPrint(ReturnOrderReportMixin, ReportPrintMixin, RetrieveAPI): + """API endpoint for printing a ReturnOrderReport object""" + pass report_api_urls = [ @@ -688,8 +453,9 @@ report_api_urls = [ # Purchase order reports re_path(r'po/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/', PurchaseOrderReportPrint.as_view(), name='api-po-report-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': PurchaseOrderReport}, name='api-po-report-metadata'), path('', PurchaseOrderReportDetail.as_view(), name='api-po-report-detail'), ])), @@ -700,19 +466,31 @@ report_api_urls = [ # Sales order reports re_path(r'so/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/', SalesOrderReportPrint.as_view(), name='api-so-report-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': SalesOrderReport}, name='api-so-report-metadata'), path('', SalesOrderReportDetail.as_view(), name='api-so-report-detail'), ])), path('', SalesOrderReportList.as_view(), name='api-so-report-list'), ])), + # Return order reports + re_path(r'ro/', include([ + path(r'/', include([ + path(r'print/', ReturnOrderReportPrint.as_view(), name='api-return-order-report-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': ReturnOrderReport}, name='api-so-report-metadata'), + path('', ReturnOrderReportDetail.as_view(), name='api-return-order-report-detail'), + ])), + path('', ReturnOrderReportList.as_view(), name='api-return-order-report-list'), + ])), + # Build reports re_path(r'build/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/?', BuildReportPrint.as_view(), name='api-build-report-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': BuildReport}, name='api-build-report-metadata'), re_path(r'^.$', BuildReportDetail.as_view(), name='api-build-report-detail'), ])), @@ -724,8 +502,9 @@ report_api_urls = [ re_path(r'bom/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/?', BOMReportPrint.as_view(), name='api-bom-report-print'), + re_path(r'metadata/', MetadataView.as_view(), {'model': BillOfMaterialsReport}, name='api-bom-report-metadata'), re_path(r'^.*$', BOMReportDetail.as_view(), name='api-bom-report-detail'), ])), @@ -736,8 +515,9 @@ report_api_urls = [ # Stock item test reports re_path(r'test/', include([ # Detail views - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'print/?', StockItemTestReportPrint.as_view(), name='api-stockitem-testreport-print'), + re_path(r'metadata/', MetadataView.as_view(), {'report': TestReport}, name='api-stockitem-testreport-metadata'), re_path(r'^.*$', StockItemTestReportDetail.as_view(), name='api-stockitem-testreport-detail'), ])), diff --git a/InvenTree/report/apps.py b/InvenTree/report/apps.py index 63c994fa87..64eb80702a 100644 --- a/InvenTree/report/apps.py +++ b/InvenTree/report/apps.py @@ -8,8 +8,6 @@ from pathlib import Path from django.apps import AppConfig from django.conf import settings -from InvenTree.ready import canAppAccessDatabase - logger = logging.getLogger("inventree") @@ -19,12 +17,21 @@ class ReportConfig(AppConfig): def ready(self): """This function is called whenever the report app is loaded.""" + + from InvenTree.ready import canAppAccessDatabase + + # Configure logging for PDF generation (disable "info" messages) + logging.getLogger('fontTools').setLevel(logging.WARNING) + logging.getLogger('weasyprint').setLevel(logging.WARNING) + + # Create entries for default report templates if canAppAccessDatabase(allow_test=True): self.create_default_test_reports() self.create_default_build_reports() self.create_default_bill_of_materials_reports() self.create_default_purchase_order_reports() self.create_default_sales_order_reports() + self.create_default_return_order_reports() def create_default_reports(self, model, reports): """Copy defualt report files across to the media directory.""" @@ -174,3 +181,23 @@ class ReportConfig(AppConfig): ] self.create_default_reports(SalesOrderReport, reports) + + def create_default_return_order_reports(self): + """Create database entries for the default ReturnOrderReport templates""" + + try: + from report.models import ReturnOrderReport + except Exception: # pragma: no cover + # Database not yet ready + return + + # List of templates to copy across + reports = [ + { + 'file': 'inventree_return_order_report.html', + 'name': 'InvenTree Return Order', + 'description': 'Return Order example report', + } + ] + + self.create_default_reports(ReturnOrderReport, reports) diff --git a/InvenTree/report/migrations/0017_auto_20230317_0816.py b/InvenTree/report/migrations/0017_auto_20230317_0816.py new file mode 100644 index 0000000000..27088a566c --- /dev/null +++ b/InvenTree/report/migrations/0017_auto_20230317_0816.py @@ -0,0 +1,38 @@ +# Generated by Django 3.2.18 on 2023-03-17 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0016_auto_20210513_1303'), + ] + + operations = [ + migrations.AddField( + model_name='billofmaterialsreport', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='buildreport', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='purchaseorderreport', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='salesorderreport', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + migrations.AddField( + model_name='testreport', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/report/migrations/0018_returnorderreport.py b/InvenTree/report/migrations/0018_returnorderreport.py new file mode 100644 index 0000000000..8bdbb6ebe8 --- /dev/null +++ b/InvenTree/report/migrations/0018_returnorderreport.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2.18 on 2023-03-15 11:17 + +import django.core.validators +from django.db import migrations, models +import report.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0017_auto_20230317_0816'), + ] + + operations = [ + migrations.CreateModel( + name='ReturnOrderReport', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), + ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), + ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), + ('filename_pattern', models.CharField(default='report.pdf', help_text='Pattern for generating report filenames', max_length=100, verbose_name='Filename Pattern')), + ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), + ('filters', models.CharField(blank=True, help_text='Return order query filters', max_length=250, validators=[report.models.validate_return_order_filters], verbose_name='Filters')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/report/migrations/0019_returnorderreport_metadata.py b/InvenTree/report/migrations/0019_returnorderreport_metadata.py new file mode 100644 index 0000000000..993f4045d5 --- /dev/null +++ b/InvenTree/report/migrations/0019_returnorderreport_metadata.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-03-23 11:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0018_returnorderreport'), + ] + + operations = [ + migrations.AddField( + model_name='returnorderreport', + name='metadata', + field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), + ), + ] diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index ea454d581d..9776fb0077 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -21,6 +21,7 @@ import order.models import part.models import stock.models from InvenTree.helpers import validateFilterString +from plugin.models import MetadataMixin try: from django_weasyprint import WeasyTemplateResponseMixin @@ -67,6 +68,11 @@ def validate_sales_order_filters(filters): return validateFilterString(filters, model=order.models.SalesOrder) +def validate_return_order_filters(filters): + """Validate filter string against ReturnOrder model""" + return validateFilterString(filters, model=order.models.ReturnOrder) + + class WeasyprintReportMixin(WeasyTemplateResponseMixin): """Class for rendering a HTML template to a PDF.""" @@ -174,12 +180,16 @@ class ReportBase(models.Model): ) -class ReportTemplateBase(ReportBase): +class ReportTemplateBase(MetadataMixin, ReportBase): """Reporting template model. Able to be passed context data """ + class Meta: + """Metaclass options. Abstract ensures no database table is created.""" + abstract = True + # Pass a single top-level object to the report template object_to_print = None @@ -255,11 +265,6 @@ class ReportTemplateBase(ReportBase): help_text=_('Report template is enabled'), ) - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" - - abstract = True - class TestReport(ReportTemplateBase): """Render a TestReport against a StockItem object.""" @@ -303,6 +308,30 @@ class TestReport(ReportTemplateBase): return items.exists() + def get_test_keys(self, stock_item): + """Construct a flattened list of test 'keys' for this StockItem: + + - First, any 'required' tests + - Second, any 'non required' tests + - Finally, any test results which do not match a test + """ + + keys = [] + + for test in stock_item.part.getTestTemplates(required=True): + if test.key not in keys: + keys.append(test.key) + + for test in stock_item.part.getTestTemplates(required=False): + if test.key not in keys: + keys.append(test.key) + + for result in stock_item.testResultList(include_installed=self.include_installed): + if result.key not in keys: + keys.append(result.key) + + return list(keys) + def get_context_data(self, request): """Return custom context data for the TestReport template""" stock_item = self.object_to_print @@ -312,6 +341,9 @@ class TestReport(ReportTemplateBase): 'serial': stock_item.serial, 'part': stock_item.part, 'parameters': stock_item.part.parameters_map(), + 'test_keys': self.get_test_keys(stock_item), + 'test_template_list': stock_item.part.getTestTemplates(), + 'test_template_map': stock_item.part.getTestTemplateMap(), 'results': stock_item.testResultMap(include_installed=self.include_installed), 'result_list': stock_item.testResultList(include_installed=self.include_installed), 'installed_items': stock_item.get_installed_items(cascade=True), @@ -468,6 +500,45 @@ class SalesOrderReport(ReportTemplateBase): } +class ReturnOrderReport(ReportTemplateBase): + """Render a custom report against a ReturnOrder object""" + + @staticmethod + def get_api_url(): + """Return the API URL associated with the ReturnOrderReport model""" + return reverse('api-return-order-report-list') + + @classmethod + def getSubdir(cls): + """Return the directory where the ReturnOrderReport templates are stored""" + return 'returnorder' + + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Filters'), + help_text=_('Return order query filters'), + validators=[ + validate_return_order_filters, + ] + ) + + def get_context_data(self, request): + """Return custom context data for the ReturnOrderReport template""" + + order = self.object_to_print + + return { + 'order': order, + 'description': order.description, + 'reference': order.reference, + 'customer': order.customer, + 'lines': order.lines, + 'extra_lines': order.extra_lines, + 'title': str(order), + } + + def rename_snippet(instance, filename): """Function to rename a report snippet once uploaded""" diff --git a/InvenTree/report/serializers.py b/InvenTree/report/serializers.py index 50e9592373..330279834f 100644 --- a/InvenTree/report/serializers.py +++ b/InvenTree/report/serializers.py @@ -4,96 +4,83 @@ from InvenTree.serializers import (InvenTreeAttachmentSerializerField, InvenTreeModelSerializer) from .models import (BillOfMaterialsReport, BuildReport, PurchaseOrderReport, - SalesOrderReport, TestReport) + ReturnOrderReport, SalesOrderReport, TestReport) -class TestReportSerializer(InvenTreeModelSerializer): - """Serializer class for the TestReport model""" +class ReportSerializerBase(InvenTreeModelSerializer): + """Base class for report serializer""" template = InvenTreeAttachmentSerializerField(required=True) + @staticmethod + def report_fields(): + """Generic serializer fields for a report template""" + + return [ + 'pk', + 'name', + 'description', + 'template', + 'filters', + 'enabled', + ] + + +class TestReportSerializer(ReportSerializerBase): + """Serializer class for the TestReport model""" + class Meta: """Metaclass options.""" model = TestReport - fields = [ - 'pk', - 'name', - 'description', - 'template', - 'filters', - 'enabled', - ] + fields = ReportSerializerBase.report_fields() -class BuildReportSerializer(InvenTreeModelSerializer): +class BuildReportSerializer(ReportSerializerBase): """Serializer class for the BuildReport model""" - template = InvenTreeAttachmentSerializerField(required=True) - class Meta: """Metaclass options.""" model = BuildReport - fields = [ - 'pk', - 'name', - 'description', - 'template', - 'filters', - 'enabled', - ] + fields = ReportSerializerBase.report_fields() -class BOMReportSerializer(InvenTreeModelSerializer): +class BOMReportSerializer(ReportSerializerBase): """Serializer class for the BillOfMaterialsReport model""" - template = InvenTreeAttachmentSerializerField(required=True) class Meta: """Metaclass options.""" model = BillOfMaterialsReport - fields = [ - 'pk', - 'name', - 'description', - 'template', - 'filters', - 'enabled', - ] + fields = ReportSerializerBase.report_fields() -class PurchaseOrderReportSerializer(InvenTreeModelSerializer): +class PurchaseOrderReportSerializer(ReportSerializerBase): """Serializer class for the PurchaseOrdeReport model""" - template = InvenTreeAttachmentSerializerField(required=True) class Meta: """Metaclass options.""" model = PurchaseOrderReport - fields = [ - 'pk', - 'name', - 'description', - 'template', - 'filters', - 'enabled', - ] + fields = ReportSerializerBase.report_fields() -class SalesOrderReportSerializer(InvenTreeModelSerializer): +class SalesOrderReportSerializer(ReportSerializerBase): """Serializer class for the SalesOrderReport model""" - template = InvenTreeAttachmentSerializerField(required=True) class Meta: """Metaclass options.""" model = SalesOrderReport - fields = [ - 'pk', - 'name', - 'description', - 'template', - 'filters', - 'enabled', - ] + fields = ReportSerializerBase.report_fields() + + +class ReturnOrderReportSerializer(ReportSerializerBase): + """Serializer class for the ReturnOrderReport model""" + + class Meta: + """Metaclass options""" + + model = ReturnOrderReport + fields = ReportSerializerBase.report_fields() diff --git a/InvenTree/report/templates/report/inventree_order_report_base.html b/InvenTree/report/templates/report/inventree_order_report_base.html new file mode 100644 index 0000000000..f9adc114cd --- /dev/null +++ b/InvenTree/report/templates/report/inventree_order_report_base.html @@ -0,0 +1,70 @@ +{% extends "report/inventree_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load barcode %} +{% load inventree_extras %} +{% load markdownify %} + +{% block page_margin %} +margin: 2cm; +margin-top: 4cm; +{% endblock %} + +{% block bottom_left %} +content: "v{{report_revision}} - {{ date.isoformat }}"; +{% endblock %} + +{% block bottom_center %} +content: "{% inventree_version shortstring=True %}"; +{% endblock %} + +{% block style %} + +.header-right { + text-align: right; + float: right; +} + +.logo { + height: 20mm; + vertical-align: middle; +} + +.thumb-container { + width: 32px; + display: inline; +} + + +.part-thumb { + max-width: 32px; + max-height: 32px; + display: inline; +} + +.part-text { + display: inline; +} + +table { + border: 1px solid #eee; + border-radius: 3px; + border-collapse: collapse; + width: 100%; + font-size: 80%; +} + +table td { + border: 1px solid #eee; +} + +table td.shrink { + white-space: nowrap +} + +table td.expand { + width: 99% +} + +{% endblock %} diff --git a/InvenTree/report/templates/report/inventree_po_report.html b/InvenTree/report/templates/report/inventree_po_report.html index 3da23dfd9f..184ea896e1 100644 --- a/InvenTree/report/templates/report/inventree_po_report.html +++ b/InvenTree/report/templates/report/inventree_po_report.html @@ -1,115 +1 @@ -{% extends "report/inventree_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load barcode %} -{% load inventree_extras %} - -{% block page_margin %} -margin: 2cm; -margin-top: 4cm; -{% endblock %} - -{% block bottom_left %} -content: "v{{report_revision}} - {{ date.isoformat }}"; -{% endblock %} - -{% block bottom_center %} -content: "{% inventree_version shortstring=True %}"; -{% endblock %} - -{% block style %} - -.header-right { - text-align: right; - float: right; -} - -.logo { - height: 20mm; - vertical-align: middle; -} - -.thumb-container { - width: 32px; - display: inline; -} - - -.part-thumb { - max-width: 32px; - max-height: 32px; - display: inline; -} - -.part-text { - display: inline; -} - -table { - border: 1px solid #eee; - border-radius: 3px; - border-collapse: collapse; - width: 100%; - font-size: 80%; -} - -table td { - border: 1px solid #eee; -} - -table td.shrink { - white-space: nowrap -} - -table td.expand { - width: 99% -} - -{% endblock %} - -{% block header_content %} - - - -
-

{% trans "Purchase Order" %} {{ prefix }}{{ reference }}

- {% if supplier %}{{ supplier.name }}{% else %}{% trans "Supplier was deleted" %}{% endif %} -
- -{% endblock %} - -{% block page_content %} - -

{% trans "Line Items" %}

- - - - - - - - - - - - {% for line in lines.all %} - - - - - - - {% endfor %} - -
{% trans "Part" %}{% trans "Quantity" %}{% trans "Reference" %}{% trans "Note" %}
-
- -
-
- {{ line.part.part.full_name }} -
-
{% decimal line.quantity %}{{ line.reference }}{{ line.notes }}
- - -{% endblock %} +{% extends "report/inventree_po_report_base.html" %} diff --git a/InvenTree/report/templates/report/inventree_po_report_base.html b/InvenTree/report/templates/report/inventree_po_report_base.html new file mode 100644 index 0000000000..d6c5ee3ee3 --- /dev/null +++ b/InvenTree/report/templates/report/inventree_po_report_base.html @@ -0,0 +1,81 @@ +{% extends "report/inventree_order_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load barcode %} +{% load inventree_extras %} +{% load markdownify %} + +{% block header_content %} + + + +
+

{% trans "Purchase Order" %} {{ prefix }}{{ reference }}

+ {% if supplier %}{{ supplier.name }}{% else %}{% trans "Supplier was deleted" %}{% endif %} +
+ +{% endblock %} + +{% block page_content %} + +

{% trans "Line Items" %}

+ + + + + + + + + + + + + + {% for line in lines.all %} + + + + + + + + + {% endfor %} + + {% if extra_lines %} + + {% for line in extra_lines.all %} + + + + + + + + + {% endfor %} + {% endif %} + + + + + + + + + + + +
{% trans "Part" %}{% trans "Reference" %}{% trans "Quantity" %}{% trans "Unit Price" %}{% trans "Total Price" %}{% trans "Note" %}
+
+ +
+
+ {{ line.part.part.full_name }} +
+
{{ line.reference }}{% decimal line.quantity %}{% render_currency line.price decimal_places=2 %}{% render_currency line.total_line_price decimal_places=2 %}{{ line.notes }}
{% trans "Extra Line Items" %}
{{ line.reference }}{% decimal line.quantity %}{% render_currency line.price decimal_places=2 %}{% render_currency line.total_line_price decimal_places=2 %}{{ line.notes }}
{% trans "Total" %}{% render_currency order.total_price decimal_places=2 currency=order.supplier.currency %}
+ + +{% endblock %} diff --git a/InvenTree/report/templates/report/inventree_return_order_report.html b/InvenTree/report/templates/report/inventree_return_order_report.html new file mode 100644 index 0000000000..cece937a0e --- /dev/null +++ b/InvenTree/report/templates/report/inventree_return_order_report.html @@ -0,0 +1 @@ +{% extends "report/inventree_return_order_report_base.html" %} diff --git a/InvenTree/report/templates/report/inventree_return_order_report_base.html b/InvenTree/report/templates/report/inventree_return_order_report_base.html new file mode 100644 index 0000000000..93b2f30c06 --- /dev/null +++ b/InvenTree/report/templates/report/inventree_return_order_report_base.html @@ -0,0 +1,62 @@ +{% extends "report/inventree_order_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load barcode %} +{% load inventree_extras %} +{% load markdownify %} + +{% block header_content %} + + +
+

{% trans "Return Order" %} {{ prefix }}{{ reference }}

+ {% if customer %}{{ customer.name }}{% endif %} +
+{% endblock header_content %} + +{% block page_content %} +

{% trans "Line Items" %}

+ + + + + + + + + + + + {% for line in lines.all %} + + + + + + + {% endfor %} + + {% if extra_lines %} + + {% for line in extra_lines.all %} + + + + + + + {% endfor %} + {% endif %} + + +
{% trans "Part" %}{% trans "Serial Number" %}{% trans "Reference" %}{% trans "Note" %}
+
+ +
+
+ {{ line.item.part.full_name }} +
+
{{ line.item.serial }}{{ line.reference }}{{ line.notes }}
{% trans "Extra Line Items" %}
{{ line.reference }}{{ line.notes }}
+ +{% endblock page_content %} diff --git a/InvenTree/report/templates/report/inventree_so_report.html b/InvenTree/report/templates/report/inventree_so_report.html index 4e39d8cdba..dbb4543bf3 100644 --- a/InvenTree/report/templates/report/inventree_so_report.html +++ b/InvenTree/report/templates/report/inventree_so_report.html @@ -1,116 +1 @@ -{% extends "report/inventree_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load barcode %} -{% load inventree_extras %} -{% load markdownify %} - -{% block page_margin %} -margin: 2cm; -margin-top: 4cm; -{% endblock %} - -{% block bottom_left %} -content: "v{{report_revision}} - {{ date.isoformat }}"; -{% endblock %} - -{% block bottom_center %} -content: "{% inventree_version shortstring=True %}"; -{% endblock %} - -{% block style %} - -.header-right { - text-align: right; - float: right; -} - -.logo { - height: 20mm; - vertical-align: middle; -} - -.thumb-container { - width: 32px; - display: inline; -} - - -.part-thumb { - max-width: 32px; - max-height: 32px; - display: inline; -} - -.part-text { - display: inline; -} - -table { - border: 1px solid #eee; - border-radius: 3px; - border-collapse: collapse; - width: 100%; - font-size: 80%; -} - -table td { - border: 1px solid #eee; -} - -table td.shrink { - white-space: nowrap -} - -table td.expand { - width: 99% -} - -{% endblock %} - -{% block header_content %} - - - -
-

{% trans "Sales Order" %} {{ prefix }}{{ reference }}

- {{ customer.name }} -
- -{% endblock %} - -{% block page_content %} - -

{% trans "Line Items" %}

- - - - - - - - - - - - {% for line in lines.all %} - - - - - - - {% endfor %} - -
{% trans "Part" %}{% trans "Quantity" %}{% trans "Reference" %}{% trans "Note" %}
-
- -
-
- {{ line.part.full_name }} -
-
{% decimal line.quantity %}{{ line.reference }}{{ line.notes }}
- - -{% endblock %} +{% extends "report/inventree_so_report_base.html" %} diff --git a/InvenTree/report/templates/report/inventree_so_report_base.html b/InvenTree/report/templates/report/inventree_so_report_base.html new file mode 100644 index 0000000000..7ee4ca0edd --- /dev/null +++ b/InvenTree/report/templates/report/inventree_so_report_base.html @@ -0,0 +1,80 @@ +{% extends "report/inventree_order_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load barcode %} +{% load inventree_extras %} +{% load markdownify %} + +{% block header_content %} + + + +
+

{% trans "Sales Order" %} {{ prefix }}{{ reference }}

+ {{ customer.name }} +
+ +{% endblock %} + +{% block page_content %} + +

{% trans "Line Items" %}

+ + + + + + + + + + + + + + {% for line in lines.all %} + + + + + + + + + {% endfor %} + + {% if extra_lines %} + + {% for line in extra_lines.all %} + + + + + + + + + {% endfor %} + {% endif %} + + + + + + + + + + +
{% trans "Part" %}{% trans "Reference" %}{% trans "Quantity" %}{% trans "Unit Price" %}{% trans "Total Price" %}{% trans "Note" %}
+
+ +
+
+ {{ line.part.full_name }} +
+
{{ line.reference }}{% decimal line.quantity %}{% render_currency line.price %}{% render_currency line.total_line_price %}{{ line.notes }}
{% trans "Extra Line Items" %}
{{ line.reference }}{% decimal line.quantity %}{% render_currency line.price %}{% render_currency line.total_line_price %}{{ line.notes }}
{% trans "Total" %}{% render_currency order.total_price currency=order.customer.currency %}
+ + +{% endblock %} diff --git a/InvenTree/report/templates/report/inventree_test_report_base.html b/InvenTree/report/templates/report/inventree_test_report_base.html index 7074cb0ca6..fbb5f34d3f 100644 --- a/InvenTree/report/templates/report/inventree_test_report_base.html +++ b/InvenTree/report/templates/report/inventree_test_report_base.html @@ -33,6 +33,15 @@ content: "{% trans 'Stock Item Test Report' %}"; color: #F55; } +.test-not-found { + color: #33A; +} + +.required-test-not-found { + color: #EEE; + background-color: #F55; +} + .container { padding: 5px; border: 1px solid; @@ -84,7 +93,7 @@ content: "{% trans 'Stock Item Test Report' %}";
-{% if resul_list|length > 0 %} +{% if test_keys|length > 0 %}

{% trans "Test Results" %}

@@ -101,22 +110,44 @@ content: "{% trans 'Stock Item Test Report' %}"; - {% for test in result_list %} + {% for key in test_keys %} + + {% getkey test_template_map key as test_template %} + {% getkey results key as test_result %} - - {% if test.result %} + + {% if test_result %} + {% if test_result.result %} {% else %} {% endif %} - - - + + + + {% else %} + {% if test_template.required %} + + {% else %} + + {% endif %} + {% endif %} {% endfor %}

{{ test.test }} + {% if test_template %} + {% render_html_text test_template.test_name bold=test_template.required %} + {% elif test_result %} + {% render_html_text test_result.test italic=True %} + {% else %} + + {{ key }} + {% endif %} + {% trans "Pass" %}{% trans "Fail" %}{{ test.value }}{{ test.user.username }}{{ test.date.date.isoformat }}{{ test_result.value }}{{ test_result.user.username }}{{ test_result.date.date.isoformat }}{% trans "No result (required)" %}{% trans "No result" %}
+{% else %} +No tests defined for this stock item {% endif %} {% if installed_items|length > 0 %} diff --git a/InvenTree/report/templatetags/report.py b/InvenTree/report/templatetags/report.py index 11e12f288a..c7f3365c04 100644 --- a/InvenTree/report/templatetags/report.py +++ b/InvenTree/report/templatetags/report.py @@ -19,17 +19,52 @@ logger = logging.getLogger('inventree') @register.simple_tag() -def getkey(value: dict, arg): +def getindex(container: list, index: int): + """Return the value contained at the specified index of the list. + + This function is provideed to get around template rendering limitations. + + Arguments: + container: A python list object + index: The index to retrieve from the list + """ + + # Index *must* be an integer + try: + index = int(index) + except ValueError: + return None + + if index < 0 or index >= len(container): + return None + + try: + value = container[index] + except IndexError: + value = None + + return value + + +@register.simple_tag() +def getkey(container: dict, key): """Perform key lookup in the provided dict object. This function is provided to get around template rendering limitations. Ref: https://stackoverflow.com/questions/1906129/dict-keys-with-spaces-in-django-templates Arguments: - value: A python dict object - arg: The 'key' to be found within the dict + container: A python dict object + key: The 'key' to be found within the dict """ - return value[arg] + if type(container) is not dict: + logger.warning("getkey() called with non-dict object") + return None + + if key in container: + return container[key] + else: + return None @register.simple_tag() @@ -184,3 +219,62 @@ def internal_link(link, text): return text return mark_safe(f'{text}') + + +@register.simple_tag() +def add(x, y, *args, **kwargs): + """Add two numbers together.""" + return x + y + + +@register.simple_tag() +def subtract(x, y): + """Subtract one number from another""" + return x - y + + +@register.simple_tag() +def multiply(x, y): + """Multiply two numbers together""" + return x * y + + +@register.simple_tag() +def divide(x, y): + """Divide one number by another""" + return x / y + + +@register.simple_tag +def render_currency(money, **kwargs): + """Render a currency / Money object""" + + return InvenTree.helpers.render_currency(money, **kwargs) + + +@register.simple_tag +def render_html_text(text: str, **kwargs): + """Render a text item with some simple html tags. + + kwargs: + bold: Boolean, whether bold (or not) + italic: Boolean, whether italic (or not) + heading: str, heading level e.g. 'h3' + """ + + tags = [] + + if kwargs.get('bold', False): + tags.append('strong') + + if kwargs.get('italic', False): + tags.append('em') + + if heading := kwargs.get('heading', ''): + tags.append(heading) + + output = ''.join([f'<{tag}>' for tag in tags]) + output += text + output += ''.join([f'' for tag in tags]) + + return mark_safe(output) diff --git a/InvenTree/report/tests.py b/InvenTree/report/tests.py index 7b1b9759e1..90b72f3980 100644 --- a/InvenTree/report/tests.py +++ b/InvenTree/report/tests.py @@ -29,6 +29,20 @@ class ReportTagTest(TestCase): """Enable or disable debug mode for reports""" InvenTreeSetting.set_setting('REPORT_DEBUG_MODE', value, change_user=None) + def test_getindex(self): + """Tests for the 'getindex' template tag""" + + fn = report_tags.getindex + data = [1, 2, 3, 4, 5, 6] + + # Out of bounds or invalid + self.assertEqual(fn(data, -1), None) + self.assertEqual(fn(data, 99), None) + self.assertEqual(fn(data, 'xx'), None) + + for idx in range(len(data)): + self.assertEqual(fn(data, idx), data[idx]) + def test_getkey(self): """Tests for the 'getkey' template tag""" @@ -137,6 +151,14 @@ class ReportTagTest(TestCase): logo = report_tags.logo_image() self.assertIn('inventree.png', logo) + def test_maths_tags(self): + """Simple tests for mathematical operator tags""" + + self.assertEqual(report_tags.add(1, 2), 3) + self.assertEqual(report_tags.subtract(10, 4.2), 5.8) + self.assertEqual(report_tags.multiply(2.3, 4), 9.2) + self.assertEqual(report_tags.divide(100, 5), 20) + class BarcodeTagTest(TestCase): """Unit tests for the barcode template tags""" @@ -250,7 +272,6 @@ class ReportTest(InvenTreeAPITestCase): reports = self.model.objects.all() n = len(reports) - # API endpoint must return correct number of reports self.assertEqual(len(response.data), n) @@ -273,6 +294,25 @@ class ReportTest(InvenTreeAPITestCase): response = self.get(url, {'enabled': False}) self.assertEqual(len(response.data), n) + def test_metadata(self): + """Unit tests for the metadata field.""" + if self.model is not None: + p = self.model.objects.first() + + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) + class TestReportTest(ReportTest): """Unit testing class for the stock item TestReport model""" @@ -367,7 +407,7 @@ class BuildReportTest(ReportTest): self.assertEqual(headers['Content-Disposition'], 'attachment; filename="report.pdf"') # Now, set the download type to be "inline" - inline = InvenTreeUserSetting.get_setting_object('REPORT_INLINE', user=self.user) + inline = InvenTreeUserSetting.get_setting_object('REPORT_INLINE', cache=False, user=self.user) inline.value = True inline.save() @@ -385,15 +425,27 @@ class BOMReportTest(ReportTest): detail_url = 'api-bom-report-detail' print_url = 'api-bom-report-print' + def setUp(self): + """Setup function for the bill of materials Report""" + self.copyReportTemplate('inventree_bill_of_materials_report.html', 'bill of materials report') + + return super().setUp() + class PurchaseOrderReportTest(ReportTest): - """Unit test class fort he PurchaseOrderReport model""" + """Unit test class for the PurchaseOrderReport model""" model = report_models.PurchaseOrderReport list_url = 'api-po-report-list' detail_url = 'api-po-report-detail' print_url = 'api-po-report-print' + def setUp(self): + """Setup function for the purchase order Report""" + self.copyReportTemplate('inventree_po_report.html', 'purchase order report') + + return super().setUp() + class SalesOrderReportTest(ReportTest): """Unit test class for the SalesOrderReport model""" @@ -402,3 +454,24 @@ class SalesOrderReportTest(ReportTest): list_url = 'api-so-report-list' detail_url = 'api-so-report-detail' print_url = 'api-so-report-print' + + def setUp(self): + """Setup function for the sales order Report""" + self.copyReportTemplate('inventree_so_report.html', 'sales order report') + + return super().setUp() + + +class ReturnOrderReportTest(ReportTest): + """Unit tests for the ReturnOrderReport model""" + + model = report_models.ReturnOrderReport + list_url = 'api-return-order-report-list' + detail_url = 'api-return-order-report-detail' + print_url = 'api-return-order-report-print' + + def setUp(self): + """Setup function for the ReturnOrderReport tests""" + self.copyReportTemplate('inventree_return_order_report.html', 'return order report') + + return super().setUp() diff --git a/InvenTree/stock/admin.py b/InvenTree/stock/admin.py index 7f16d2d5c8..4970254ed0 100644 --- a/InvenTree/stock/admin.py +++ b/InvenTree/stock/admin.py @@ -20,16 +20,6 @@ from .models import (StockItem, StockItemAttachment, StockItemTestResult, class LocationResource(InvenTreeResource): """Class for managing StockLocation data import/export.""" - id = Field(attribute='pk', column_name=_('Location ID')) - name = Field(attribute='name', column_name=_('Location Name')) - description = Field(attribute='description', column_name=_('Description')) - parent = Field(attribute='parent', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(StockLocation)) - parent_name = Field(attribute='parent__name', column_name=_('Parent Name'), readonly=True) - pathstring = Field(attribute='pathstring', column_name=_('Location Path')) - - # Calculated fields - items = Field(attribute='item_count', column_name=_('Stock Items'), widget=widgets.IntegerWidget()) - class Meta: """Metaclass options.""" @@ -46,6 +36,16 @@ class LocationResource(InvenTreeResource): 'owner', 'icon', ] + id = Field(attribute='id', column_name=_('Location ID'), widget=widgets.IntegerWidget()) + name = Field(attribute='name', column_name=_('Location Name')) + description = Field(attribute='description', column_name=_('Description')) + parent = Field(attribute='parent', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(StockLocation)) + parent_name = Field(attribute='parent__name', column_name=_('Parent Name'), readonly=True) + pathstring = Field(attribute='pathstring', column_name=_('Location Path')) + + # Calculated fields + items = Field(attribute='item_count', column_name=_('Stock Items'), widget=widgets.IntegerWidget(), readonly=True) + def after_import(self, dataset, result, using_transactions, dry_run, **kwargs): """Rebuild after import to keep tree intact.""" super().after_import(dataset, result, using_transactions, dry_run, **kwargs) @@ -80,40 +80,6 @@ class LocationAdmin(ImportExportModelAdmin): class StockItemResource(InvenTreeResource): """Class for managing StockItem data import/export.""" - id = Field(attribute='pk', column_name=_('Stock Item ID')) - part = Field(attribute='part', column_name=_('Part ID'), widget=widgets.ForeignKeyWidget(Part)) - part_name = Field(attribute='part__full_name', column_name=_('Part Name'), readonly=True) - quantity = Field(attribute='quantity', column_name=_('Quantity')) - serial = Field(attribute='serial', column_name=_('Serial')) - batch = Field(attribute='batch', column_name=_('Batch')) - status_label = Field(attribute='status_label', column_name=_('Status'), readonly=True) - location = Field(attribute='location', column_name=_('Location ID'), widget=widgets.ForeignKeyWidget(StockLocation)) - location_name = Field(attribute='location__name', column_name=_('Location Name'), readonly=True) - supplier_part = Field(attribute='supplier_part', column_name=_('Supplier Part ID'), widget=widgets.ForeignKeyWidget(SupplierPart)) - supplier = Field(attribute='supplier_part__supplier__id', column_name=_('Supplier ID'), readonly=True) - supplier_name = Field(attribute='supplier_part__supplier__name', column_name=_('Supplier Name'), readonly=True) - customer = Field(attribute='customer', column_name=_('Customer ID'), widget=widgets.ForeignKeyWidget(Company)) - belongs_to = Field(attribute='belongs_to', column_name=_('Installed In'), widget=widgets.ForeignKeyWidget(StockItem)) - build = Field(attribute='build', column_name=_('Build ID'), widget=widgets.ForeignKeyWidget(Build)) - parent = Field(attribute='parent', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(StockItem)) - sales_order = Field(attribute='sales_order', column_name=_('Sales Order ID'), widget=widgets.ForeignKeyWidget(SalesOrder)) - purchase_order = Field(attribute='purchase_order', column_name=_('Purchase Order ID'), widget=widgets.ForeignKeyWidget(PurchaseOrder)) - packaging = Field(attribute='packaging', column_name=_('Packaging')) - link = Field(attribute='link', column_name=_('Link')) - notes = Field(attribute='notes', column_name=_('Notes')) - - # Date management - updated = Field(attribute='updated', column_name=_('Last Updated'), widget=widgets.DateWidget()) - stocktake_date = Field(attribute='stocktake_date', column_name=_('Stocktake'), widget=widgets.DateWidget()) - expiry_date = Field(attribute='expiry_date', column_name=_('Expiry Date'), widget=widgets.DateWidget()) - - def after_import(self, dataset, result, using_transactions, dry_run, **kwargs): - """Rebuild after import to keep tree intact.""" - super().after_import(dataset, result, using_transactions, dry_run, **kwargs) - - # Rebuild the StockItem tree(s) - StockItem.objects.rebuild() - class Meta: """Metaclass options.""" @@ -131,6 +97,52 @@ class StockItemResource(InvenTreeResource): 'owner', ] + id = Field(attribute='pk', column_name=_('Stock Item ID'), widget=widgets.IntegerWidget()) + part = Field(attribute='part', column_name=_('Part ID'), widget=widgets.ForeignKeyWidget(Part)) + part_name = Field(attribute='part__full_name', column_name=_('Part Name'), readonly=True) + quantity = Field(attribute='quantity', column_name=_('Quantity'), widget=widgets.DecimalWidget()) + serial = Field(attribute='serial', column_name=_('Serial')) + batch = Field(attribute='batch', column_name=_('Batch')) + status_label = Field(attribute='status_label', column_name=_('Status'), readonly=True) + status = Field(attribute='status', column_name=_('Status Code'), widget=widgets.IntegerWidget()) + location = Field(attribute='location', column_name=_('Location ID'), widget=widgets.ForeignKeyWidget(StockLocation)) + location_name = Field(attribute='location__name', column_name=_('Location Name'), readonly=True) + supplier_part = Field(attribute='supplier_part', column_name=_('Supplier Part ID'), widget=widgets.ForeignKeyWidget(SupplierPart)) + supplier = Field(attribute='supplier_part__supplier__id', column_name=_('Supplier ID'), readonly=True, widget=widgets.IntegerWidget()) + supplier_name = Field(attribute='supplier_part__supplier__name', column_name=_('Supplier Name'), readonly=True) + customer = Field(attribute='customer', column_name=_('Customer ID'), widget=widgets.ForeignKeyWidget(Company)) + belongs_to = Field(attribute='belongs_to', column_name=_('Installed In'), widget=widgets.ForeignKeyWidget(StockItem)) + build = Field(attribute='build', column_name=_('Build ID'), widget=widgets.ForeignKeyWidget(Build)) + parent = Field(attribute='parent', column_name=_('Parent ID'), widget=widgets.ForeignKeyWidget(StockItem)) + sales_order = Field(attribute='sales_order', column_name=_('Sales Order ID'), widget=widgets.ForeignKeyWidget(SalesOrder)) + purchase_order = Field(attribute='purchase_order', column_name=_('Purchase Order ID'), widget=widgets.ForeignKeyWidget(PurchaseOrder)) + packaging = Field(attribute='packaging', column_name=_('Packaging')) + link = Field(attribute='link', column_name=_('Link')) + notes = Field(attribute='notes', column_name=_('Notes')) + + # Status fields (note that IntegerWidget exports better to excel than BooleanWidget) + is_building = Field(attribute='is_building', column_name=_('Building'), widget=widgets.IntegerWidget()) + review_needed = Field(attribute='review_needed', column_name=_('Review Needed'), widget=widgets.IntegerWidget()) + delete_on_deplete = Field(attribute='delete_on_deplete', column_name=_('Delete on Deplete'), widget=widgets.IntegerWidget()) + + # Date management + updated = Field(attribute='updated', column_name=_('Last Updated'), widget=widgets.DateWidget()) + stocktake_date = Field(attribute='stocktake_date', column_name=_('Stocktake'), widget=widgets.DateWidget()) + expiry_date = Field(attribute='expiry_date', column_name=_('Expiry Date'), widget=widgets.DateWidget()) + + def dehydrate_purchase_price(self, item): + """Render purchase pric as float""" + + if item.purchase_price is not None: + return float(item.purchase_price.amount) + + def after_import(self, dataset, result, using_transactions, dry_run, **kwargs): + """Rebuild after import to keep tree intact.""" + super().after_import(dataset, result, using_transactions, dry_run, **kwargs) + + # Rebuild the StockItem tree(s) + StockItem.objects.rebuild() + class StockItemAdmin(ImportExportModelAdmin): """Admin class for StockItem.""" diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 78bbf891d6..b54f311142 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -11,8 +11,7 @@ from django.urls import include, path, re_path from django.utils.translation import gettext_lazy as _ from django_filters import rest_framework as rest_filters -from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters, status +from rest_framework import status from rest_framework.response import Response from rest_framework.serializers import ValidationError @@ -23,18 +22,21 @@ from build.models import Build from company.models import Company, SupplierPart from company.serializers import CompanySerializer, SupplierPartSerializer from InvenTree.api import (APIDownloadMixin, AttachmentMixin, - ListCreateDestroyAPIView) -from InvenTree.filters import InvenTreeOrderingFilter + ListCreateDestroyAPIView, MetadataView, StatusView) +from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER, + SEARCH_ORDER_FILTER_ALIAS) from InvenTree.helpers import (DownloadFile, extract_serial_numbers, isNull, str2bool, str2int) from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI, ListAPI, ListCreateAPI, RetrieveAPI, - RetrieveUpdateAPI, RetrieveUpdateDestroyAPI) -from order.models import PurchaseOrder, SalesOrder, SalesOrderAllocation -from order.serializers import PurchaseOrderSerializer + RetrieveUpdateDestroyAPI) +from InvenTree.status_codes import StockHistoryCode, StockStatus +from order.models import (PurchaseOrder, ReturnOrder, SalesOrder, + SalesOrderAllocation) +from order.serializers import (PurchaseOrderSerializer, ReturnOrderSerializer, + SalesOrderSerializer) from part.models import BomItem, Part, PartCategory from part.serializers import PartBriefSerializer -from plugin.serializers import MetadataSerializer from stock.admin import LocationResource, StockItemResource from stock.models import (StockItem, StockItemAttachment, StockItemTestResult, StockItemTracking, StockLocation) @@ -80,16 +82,6 @@ class StockDetail(RetrieveUpdateDestroyAPI): return self.serializer_class(*args, **kwargs) -class StockMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating StockItem metadata.""" - - def get_serializer(self, *args, **kwargs): - """Return serializer.""" - return MetadataSerializer(StockItem, *args, **kwargs) - - queryset = StockItem.objects.all() - - class StockItemContextMixin: """Mixin class for adding StockItem object to serializer context.""" @@ -302,15 +294,12 @@ class StockLocationList(APIDownloadMixin, ListCreateAPI): return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'name', - 'structural' + 'structural', + 'external', ] search_fields = [ @@ -340,10 +329,7 @@ class StockLocationTree(ListAPI): queryset = StockLocation.objects.all() serializer_class = StockSerializers.LocationTreeSerializer - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - ] + filter_backends = ORDER_FILTER # Order by tree level (top levels first) and then name ordering = ['level', 'name'] @@ -352,6 +338,25 @@ class StockLocationTree(ListAPI): class StockFilter(rest_filters.FilterSet): """FilterSet for StockItem LIST API.""" + class Meta: + """Metaclass options for this filterset""" + + model = StockItem + + # Simple filter filters + fields = [ + 'supplier_part', + 'belongs_to', + 'build', + 'customer', + 'sales_order', + 'purchase_order', + ] + + # Relationship filters + manufactuer = rest_filters.ModelChoiceFilter(label='Manufacturer', queryset=Company.objects.filter(is_manufacturer=True), field_name='manufacturer_part__manufacturer') + supplier = rest_filters.ModelChoiceFilter(label='Supplier', queryset=Company.objects.filter(is_supplier=True), field_name='supplier_part__supplier') + # Part name filters name = rest_filters.CharFilter(label='Part name (case insensitive)', field_name='part__name', lookup_expr='iexact') name_contains = rest_filters.CharFilter(label='Part name contains (case insensitive)', field_name='part__name', lookup_expr='icontains') @@ -369,16 +374,56 @@ class StockFilter(rest_filters.FilterSet): min_stock = rest_filters.NumberFilter(label='Minimum stock', field_name='quantity', lookup_expr='gte') max_stock = rest_filters.NumberFilter(label='Maximum stock', field_name='quantity', lookup_expr='lte') + status = rest_filters.NumberFilter(label='Status Code', method='filter_status') + + def filter_status(self, queryset, name, value): + """Filter by integer status code""" + + return queryset.filter(status=value) + + allocated = rest_filters.BooleanFilter(label='Is Allocated', method='filter_allocated') + + def filter_allocated(self, queryset, name, value): + """Filter by whether or not the stock item is 'allocated'""" + + if str2bool(value): + # Filter StockItem with either build allocations or sales order allocations + return queryset.filter(Q(sales_order_allocations__isnull=False) | Q(allocations__isnull=False)) + else: + # Filter StockItem without build allocations or sales order allocations + return queryset.filter(Q(sales_order_allocations__isnull=True) & Q(allocations__isnull=True)) + + expired = rest_filters.BooleanFilter(label='Expired', method='filter_expired') + + def filter_expired(self, queryset, name, value): + """Filter by whether or not the stock item has expired""" + + if not common.settings.stock_expiry_enabled(): + return queryset + + if str2bool(value): + return queryset.filter(StockItem.EXPIRED_FILTER) + else: + return queryset.exclude(StockItem.EXPIRED_FILTER) + + external = rest_filters.BooleanFilter(label=_('External Location'), method='filter_external') + + def filter_external(self, queryset, name, value): + """Filter by whether or not the stock item is located in an external location""" + + if str2bool(value): + return queryset.filter(location__external=True) + else: + return queryset.exclude(location__external=True) + in_stock = rest_filters.BooleanFilter(label='In Stock', method='filter_in_stock') def filter_in_stock(self, queryset, name, value): """Filter by if item is in stock.""" if str2bool(value): - queryset = queryset.filter(StockItem.IN_STOCK_FILTER) + return queryset.filter(StockItem.IN_STOCK_FILTER) else: - queryset = queryset.exclude(StockItem.IN_STOCK_FILTER) - - return queryset + return queryset.exclude(StockItem.IN_STOCK_FILTER) available = rest_filters.BooleanFilter(label='Available', method='filter_available') @@ -389,12 +434,10 @@ class StockFilter(rest_filters.FilterSet): """ if str2bool(value): # The 'quantity' field is greater than the calculated 'allocated' field - queryset = queryset.filter(Q(quantity__gt=F('allocated'))) + return queryset.filter(Q(quantity__gt=F('allocated'))) else: # The 'quantity' field is less than (or equal to) the calculated 'allocated' field - queryset = queryset.filter(Q(quantity__lte=F('allocated'))) - - return queryset + return queryset.filter(Q(quantity__lte=F('allocated'))) batch = rest_filters.CharFilter(label="Batch code filter (case insensitive)", lookup_expr='iexact') @@ -414,11 +457,9 @@ class StockFilter(rest_filters.FilterSet): q = Q(serial=None) | Q(serial='') if str2bool(value): - queryset = queryset.exclude(q) + return queryset.exclude(q) else: - queryset = queryset.filter(q) - - return queryset + return queryset.filter(q) has_batch = rest_filters.BooleanFilter(label='Has batch code', method='filter_has_batch') @@ -427,11 +468,9 @@ class StockFilter(rest_filters.FilterSet): q = Q(batch=None) | Q(batch='') if str2bool(value): - queryset = queryset.exclude(q) + return queryset.exclude(q) else: - queryset = queryset.filter(q) - - return queryset + return queryset.filter(q) tracked = rest_filters.BooleanFilter(label='Tracked', method='filter_tracked') @@ -446,55 +485,45 @@ class StockFilter(rest_filters.FilterSet): q_serial = Q(serial=None) | Q(serial='') if str2bool(value): - queryset = queryset.exclude(q_batch & q_serial) + return queryset.exclude(q_batch & q_serial) else: - queryset = queryset.filter(q_batch & q_serial) - - return queryset + return queryset.filter(q_batch & q_serial) installed = rest_filters.BooleanFilter(label='Installed in other stock item', method='filter_installed') def filter_installed(self, queryset, name, value): """Filter stock items by "belongs_to" field being empty.""" if str2bool(value): - queryset = queryset.exclude(belongs_to=None) + return queryset.exclude(belongs_to=None) else: - queryset = queryset.filter(belongs_to=None) - - return queryset + return queryset.filter(belongs_to=None) sent_to_customer = rest_filters.BooleanFilter(label='Sent to customer', method='filter_sent_to_customer') def filter_sent_to_customer(self, queryset, name, value): """Filter by sent to customer.""" if str2bool(value): - queryset = queryset.exclude(customer=None) + return queryset.exclude(customer=None) else: - queryset = queryset.filter(customer=None) - - return queryset + return queryset.filter(customer=None) depleted = rest_filters.BooleanFilter(label='Depleted', method='filter_depleted') def filter_depleted(self, queryset, name, value): """Filter by depleted items.""" if str2bool(value): - queryset = queryset.filter(quantity__lte=0) + return queryset.filter(quantity__lte=0) else: - queryset = queryset.exclude(quantity__lte=0) - - return queryset + return queryset.exclude(quantity__lte=0) has_purchase_price = rest_filters.BooleanFilter(label='Has purchase price', method='filter_has_purchase_price') def filter_has_purchase_price(self, queryset, name, value): """Filter by having a purchase price.""" if str2bool(value): - queryset = queryset.exclude(purchase_price=None) + return queryset.exclude(purchase_price=None) else: - queryset = queryset.filter(purchase_price=None) - - return queryset + return queryset.filter(purchase_price=None) # Update date filters updated_before = rest_filters.DateFilter(label='Updated before', field_name='updated', lookup_expr='lte') @@ -778,6 +807,13 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): queryset = StockSerializers.StockItemSerializer.annotate_queryset(queryset) + # Also ensure that we pre-fecth all the related items + queryset = queryset.prefetch_related( + 'part', + 'part__category', + 'location' + ) + return queryset def filter_queryset(self, queryset): @@ -786,50 +822,8 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): queryset = super().filter_queryset(queryset) - supplier_part = params.get('supplier_part', None) - - if supplier_part: - queryset = queryset.filter(supplier_part=supplier_part) - - belongs_to = params.get('belongs_to', None) - - if belongs_to: - queryset = queryset.filter(belongs_to=belongs_to) - - build = params.get('build', None) - - if build: - queryset = queryset.filter(build=build) - - sales_order = params.get('sales_order', None) - - if sales_order: - queryset = queryset.filter(sales_order=sales_order) - - purchase_order = params.get('purchase_order', None) - - if purchase_order is not None: - queryset = queryset.filter(purchase_order=purchase_order) - - # Filter stock items which are installed in another (specific) stock item - installed_in = params.get('installed_in', None) - - if installed_in: - # Note: The "installed_in" field is called "belongs_to" - queryset = queryset.filter(belongs_to=installed_in) - if common.settings.stock_expiry_enabled(): - # Filter by 'expired' status - expired = params.get('expired', None) - - if expired is not None: - expired = str2bool(expired) - - if expired: - queryset = queryset.filter(StockItem.EXPIRED_FILTER) - else: - queryset = queryset.exclude(StockItem.EXPIRED_FILTER) # Filter by 'expiry date' expired_date_lte = params.get('expiry_date_lte', None) if expired_date_lte is not None: @@ -846,6 +840,7 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): queryset = queryset.filter(expiry_date__gte=date_gte) except (ValueError, TypeError): pass + # Filter by 'stale' status stale = params.get('stale', None) @@ -865,12 +860,6 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): else: queryset = queryset.exclude(stale_filter) - # Filter by customer - customer = params.get('customer', None) - - if customer: - queryset = queryset.filter(customer=customer) - # Exclude stock item tree exclude_tree = params.get('exclude_tree', None) @@ -897,19 +886,6 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): except Exception: pass - # Filter by 'allocated' parts? - allocated = params.get('allocated', None) - - if allocated is not None: - allocated = str2bool(allocated) - - if allocated: - # Filter StockItem with either build allocations or sales order allocations - queryset = queryset.filter(Q(sales_order_allocations__isnull=False) | Q(allocations__isnull=False)) - else: - # Filter StockItem without build allocations or sales order allocations - queryset = queryset.filter(Q(sales_order_allocations__isnull=True) & Q(allocations__isnull=True)) - # Exclude StockItems which are already allocated to a particular SalesOrder exclude_so_allocation = params.get('exclude_so_allocation', None) @@ -978,8 +954,9 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): if loc_id is not None: # Filter by 'null' location (i.e. top-level items) - if isNull(loc_id) and not cascade: - queryset = queryset.filter(location=None) + if isNull(loc_id): + if not cascade: + queryset = queryset.filter(location=None) else: try: # If '?cascade=true' then include items which exist in sub-locations @@ -1015,62 +992,15 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): except (ValueError, BomItem.DoesNotExist): pass - # Filter by StockItem status - status = params.get('status', None) - - if status: - queryset = queryset.filter(status=status) - - # Filter by supplier_part ID - supplier_part_id = params.get('supplier_part', None) - - if supplier_part_id: - queryset = queryset.filter(supplier_part=supplier_part_id) - # Filter by company (either manufacturer or supplier) company = params.get('company', None) if company is not None: queryset = queryset.filter(Q(supplier_part__supplier=company) | Q(supplier_part__manufacturer_part__manufacturer=company)) - # Filter by supplier - supplier = params.get('supplier', None) - - if supplier is not None: - queryset = queryset.filter(supplier_part__supplier=supplier) - - # Filter by manufacturer - manufacturer = params.get('manufacturer', None) - - if manufacturer is not None: - queryset = queryset.filter(supplier_part__manufacturer_part__manufacturer=manufacturer) - - # Optionally, limit the maximum number of returned results - max_results = params.get('max_results', None) - - if max_results is not None: - try: - max_results = int(max_results) - - if max_results > 0: - queryset = queryset[:max_results] - except (ValueError): - pass - - # Also ensure that we pre-fecth all the related items - queryset = queryset.prefetch_related( - 'part', - 'part__category', - 'location' - ) - return queryset - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - InvenTreeOrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER_ALIAS ordering_field_aliases = { 'SKU': 'supplier_part__SKU', @@ -1113,11 +1043,7 @@ class StockAttachmentList(AttachmentMixin, ListCreateDestroyAPIView): queryset = StockItemAttachment.objects.all() serializer_class = StockSerializers.StockItemAttachmentSerializer - filter_backends = [ - DjangoFilterBackend, - filters.OrderingFilter, - filters.SearchFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'stock_item', @@ -1144,11 +1070,7 @@ class StockItemTestResultList(ListCreateDestroyAPIView): queryset = StockItemTestResult.objects.all() serializer_class = StockSerializers.StockItemTestResultSerializer - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'test', @@ -1266,7 +1188,12 @@ class StockTrackingList(ListAPI): """List all stock tracking entries.""" queryset = self.filter_queryset(self.get_queryset()) - serializer = self.get_serializer(queryset, many=True) + page = self.paginate_queryset(queryset) + + if page is not None: + serializer = self.get_serializer(page, many=True) + else: + serializer = self.get_serializer(queryset, many=True) data = serializer.data @@ -1313,7 +1240,7 @@ class StockTrackingList(ListAPI): except Exception: pass - # Add purchaseorder detail + # Add PurchaseOrder detail if 'purchaseorder' in deltas: try: order = PurchaseOrder.objects.get(pk=deltas['purchaseorder']) @@ -1322,6 +1249,26 @@ class StockTrackingList(ListAPI): except Exception: pass + # Add SalesOrder detail + if 'salesorder' in deltas: + try: + order = SalesOrder.objects.get(pk=deltas['salesorder']) + serializer = SalesOrderSerializer(order) + deltas['salesorder_detail'] = serializer.data + except Exception: + pass + + # Add ReturnOrder detail + if 'returnorder' in deltas: + try: + order = ReturnOrder.objects.get(pk=deltas['returnorder']) + serializer = ReturnOrderSerializer(order) + deltas['returnorder_detail'] = serializer.data + except Exception: + pass + + if page is not None: + return self.get_paginated_response(data) if request.is_ajax(): return JsonResponse(data, safe=False) else: @@ -1351,11 +1298,7 @@ class StockTrackingList(ListAPI): headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - filter_backends = [ - DjangoFilterBackend, - filters.SearchFilter, - filters.OrderingFilter, - ] + filter_backends = SEARCH_ORDER_FILTER filterset_fields = [ 'item', @@ -1374,16 +1317,6 @@ class StockTrackingList(ListAPI): ] -class LocationMetadata(RetrieveUpdateAPI): - """API endpoint for viewing / updating StockLocation metadata.""" - - def get_serializer(self, *args, **kwargs): - """Return serializer.""" - return MetadataSerializer(StockLocation, *args, **kwargs) - - queryset = StockLocation.objects.all() - - class LocationDetail(CustomRetrieveUpdateDestroyAPI): """API endpoint for detail view of StockLocation object. @@ -1419,9 +1352,9 @@ stock_api_urls = [ re_path(r'^tree/', StockLocationTree.as_view(), name='api-location-tree'), # Stock location detail endpoints - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ - re_path(r'^metadata/', LocationMetadata.as_view(), name='api-location-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': StockLocation}, name='api-location-metadata'), re_path(r'^.*$', LocationDetail.as_view(), name='api-location-detail'), ])), @@ -1439,33 +1372,40 @@ stock_api_urls = [ # StockItemAttachment API endpoints re_path(r'^attachment/', include([ - re_path(r'^(?P\d+)/', StockAttachmentDetail.as_view(), name='api-stock-attachment-detail'), + path(r'/', StockAttachmentDetail.as_view(), name='api-stock-attachment-detail'), path('', StockAttachmentList.as_view(), name='api-stock-attachment-list'), ])), # StockItemTestResult API endpoints re_path(r'^test/', include([ - re_path(r'^(?P\d+)/', StockItemTestResultDetail.as_view(), name='api-stock-test-result-detail'), + path(r'/', StockItemTestResultDetail.as_view(), name='api-stock-test-result-detail'), re_path(r'^.*$', StockItemTestResultList.as_view(), name='api-stock-test-result-list'), ])), # StockItemTracking API endpoints re_path(r'^track/', include([ - re_path(r'^(?P\d+)/', StockTrackingDetail.as_view(), name='api-stock-tracking-detail'), + path(r'/', StockTrackingDetail.as_view(), name='api-stock-tracking-detail'), + + # Stock tracking status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: StockHistoryCode}, name='api-stock-tracking-status-codes'), + re_path(r'^.*$', StockTrackingList.as_view(), name='api-stock-tracking-list'), ])), # Detail views for a single stock item - re_path(r'^(?P\d+)/', include([ + path(r'/', include([ re_path(r'^convert/', StockItemConvert.as_view(), name='api-stock-item-convert'), re_path(r'^install/', StockItemInstall.as_view(), name='api-stock-item-install'), - re_path(r'^metadata/', StockMetadata.as_view(), name='api-stock-item-metadata'), + re_path(r'^metadata/', MetadataView.as_view(), {'model': StockItem}, name='api-stock-item-metadata'), re_path(r'^return/', StockItemReturn.as_view(), name='api-stock-item-return'), re_path(r'^serialize/', StockItemSerialize.as_view(), name='api-stock-item-serialize'), re_path(r'^uninstall/', StockItemUninstall.as_view(), name='api-stock-item-uninstall'), re_path(r'^.*$', StockDetail.as_view(), name='api-stock-detail'), ])), + # Stock item status code information + re_path(r'status/', StatusView.as_view(), {StatusView.MODEL_REF: StockStatus}, name='api-stock-status-codes'), + # Anything else re_path(r'^.*$', StockList.as_view(), name='api-stock-list'), ] diff --git a/InvenTree/stock/fixtures/stock.yaml b/InvenTree/stock/fixtures/stock.yaml index 00d1b1ef4f..99ca9cacea 100644 --- a/InvenTree/stock/fixtures/stock.yaml +++ b/InvenTree/stock/fixtures/stock.yaml @@ -81,7 +81,7 @@ pk: 102 fields: part: 25 - batch: 'ABCDE' + batch: 'BCDE' location: 7 quantity: 0 level: 0 @@ -109,7 +109,7 @@ part: 10001 location: 7 quantity: 5 - batch: "AAA" + batch: "BBAAA" level: 0 tree_id: 0 lft: 0 diff --git a/InvenTree/stock/migrations/0071_auto_20211205_1733.py b/InvenTree/stock/migrations/0071_auto_20211205_1733.py index 0e8ecba1b5..91a8c65163 100644 --- a/InvenTree/stock/migrations/0071_auto_20211205_1733.py +++ b/InvenTree/stock/migrations/0071_auto_20211205_1733.py @@ -22,7 +22,13 @@ def delete_scheduled(apps, schema_editor): if items.count() > 0: logger.info(f"Removing {items.count()} stock items scheduled for deletion") - items.delete() + + # Ensure any parent / child relationships are updated! + for item in items: + childs = StockItem.objects.filter(parent=item) + childs.update(parent=item.parent) + + item.delete() Task = apps.get_model('django_q', 'schedule') diff --git a/InvenTree/stock/migrations/0093_auto_20230217_2140.py b/InvenTree/stock/migrations/0093_auto_20230217_2140.py new file mode 100644 index 0000000000..5629f8b4ee --- /dev/null +++ b/InvenTree/stock/migrations/0093_auto_20230217_2140.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.16 on 2023-02-17 21:40 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0092_alter_stockitem_updated'), + ] + + operations = [ + migrations.AlterModelOptions( + name='stocklocation', + options={'verbose_name': 'Stock Location', 'verbose_name_plural': 'Stock Locations'}, + ), + ] diff --git a/InvenTree/stock/migrations/0094_auto_20230220_0025.py b/InvenTree/stock/migrations/0094_auto_20230220_0025.py new file mode 100644 index 0000000000..f83a21b5e9 --- /dev/null +++ b/InvenTree/stock/migrations/0094_auto_20230220_0025.py @@ -0,0 +1,79 @@ +# Generated by Django 3.2.18 on 2023-02-20 00:25 + +import logging + +from django.db import migrations + +logger = logging.getLogger('inventree') + + +def fix_purchase_price(apps, schema_editor): + """Data migration for fixing historical issue with StockItem.purchase_price field. + + Ref: https://github.com/inventree/InvenTree/pull/4373 + + Due to an existing bug, if a PurchaseOrderLineItem was received, + which had: + + a) A SupplierPart with a non-unity pack size + b) A defined purchase_price + + then the StockItem.purchase_price was not calculated correctly! + + Specifically, the purchase_price was not divided through by the pack_size attribute. + + This migration fixes this by looking through all stock items which: + + - Is linked to a purchase order + - Have a purchase_price field + - Are linked to a supplier_part + - We can determine correctly that the calculation was misapplied + """ + + StockItem = apps.get_model('stock', 'stockitem') + + items = StockItem.objects.exclude( + purchase_order=None + ).exclude( + supplier_part=None + ).exclude( + purchase_price=None + ).exclude( + supplier_part__pack_size=1 + ) + + n_updated = 0 + + for item in items: + # Grab a reference to the associated PurchaseOrder + # Trying to find an absolute match between this StockItem and an associated PurchaseOrderLineItem + po = item.purchase_order + for line in po.lines.all(): + # SupplierPart match + if line.part == item.supplier_part: + # Unit price matches original PurchaseOrder (and is thus incorrect) + if item.purchase_price == line.purchase_price: + item.purchase_price /= item.supplier_part.pack_size + item.save() + + n_updated += 1 + + if n_updated > 0: + logger.info(f"Corrected purchase_price field for {n_updated} stock items.") + + +def reverse(apps, schema_editor): # pragmae: no cover + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0093_auto_20230217_2140'), + ] + + operations = [ + migrations.RunPython( + fix_purchase_price, + reverse_code=reverse, + ) + ] diff --git a/InvenTree/stock/migrations/0095_stocklocation_external.py b/InvenTree/stock/migrations/0095_stocklocation_external.py new file mode 100644 index 0000000000..3163f4aa17 --- /dev/null +++ b/InvenTree/stock/migrations/0095_stocklocation_external.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-02-20 12:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0094_auto_20230220_0025'), + ] + + operations = [ + migrations.AddField( + model_name='stocklocation', + name='external', + field=models.BooleanField(default=False, help_text='This is an external stock location', verbose_name='External'), + ), + ] diff --git a/InvenTree/stock/migrations/0096_auto_20230330_1121.py b/InvenTree/stock/migrations/0096_auto_20230330_1121.py new file mode 100644 index 0000000000..d8e3c1ce53 --- /dev/null +++ b/InvenTree/stock/migrations/0096_auto_20230330_1121.py @@ -0,0 +1,70 @@ +# Generated by Django 3.2.18 on 2023-03-30 11:21 + +from django.db import migrations + + +def update_stock_history(apps, schema_editor): + """Data migration to fix a 'shortcoming' in the implementation of StockTracking history + + Prior to https://github.com/inventree/InvenTree/pull/4488, + shipping items via a SalesOrder did not record the SalesOrder in the tracking history. + This PR looks to add in SalesOrder history where it does not already exist: + + - Look for StockItems which are currently assigned to a SalesOrder + - Check that it does *not* have any appropriate history + - Add the appropriate history! + """ + + from InvenTree.status_codes import StockHistoryCode + + StockItem = apps.get_model('stock', 'stockitem') + StockItemTracking = apps.get_model('stock', 'stockitemtracking') + + # Find StockItems which are marked as against a SalesOrder + items = StockItem.objects.exclude(sales_order=None) + + n = 0 + + for item in items: + # Find newest relevent history + history = StockItemTracking.objects.filter( + item=item, + tracking_type__in=[StockHistoryCode.SENT_TO_CUSTOMER, StockHistoryCode.SHIPPED_AGAINST_SALES_ORDER] + ).order_by('-date').first() + + if not history: + continue + + # We've already updated this one, it appears + if history.tracking_type != StockHistoryCode.SENT_TO_CUSTOMER: + continue + + # Update the 'deltas' of this history to include SalesOrder information + history.deltas['salesorder'] = item.sales_order.pk + + # Change the history type + history.tracking_type = StockHistoryCode.SHIPPED_AGAINST_SALES_ORDER + + history.save() + n += 1 + + if n > 0: + print(f"Updated {n} StockItemTracking entries with SalesOrder data") + + +def nope(apps, schema_editor): + """Provided for reverse migration compatibility""" + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0095_stocklocation_external'), + ] + + operations = [ + migrations.RunPython( + update_stock_history, reverse_code=nope, + ) + ] diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 2d0cfdb86d..8ba973aa85 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -33,7 +33,8 @@ from InvenTree.fields import (InvenTreeModelMoneyField, InvenTreeNotesField, InvenTreeURLField) from InvenTree.models import (InvenTreeAttachment, InvenTreeBarcodeMixin, InvenTreeTree, extract_int) -from InvenTree.status_codes import StockHistoryCode, StockStatus +from InvenTree.status_codes import (SalesOrderStatus, StockHistoryCode, + StockStatus) from part import models as PartModels from plugin.events import trigger_event from plugin.models import MetadataMixin @@ -47,6 +48,12 @@ class StockLocation(InvenTreeBarcodeMixin, MetadataMixin, InvenTreeTree): Stock locations can be hierarchical as required """ + class Meta: + """Metaclass defines extra model properties""" + + verbose_name = _('Stock Location') + verbose_name_plural = _('Stock Locations') + def delete_recursive(self, *args, **kwargs): """This function handles the recursive deletion of sub-locations depending on kwargs contents""" delete_stock_items = kwargs.get('delete_stock_items', False) @@ -116,6 +123,12 @@ class StockLocation(InvenTreeBarcodeMixin, MetadataMixin, InvenTreeTree): 'but may be located to child locations.'), ) + external = models.BooleanField( + default=False, + verbose_name=_('External'), + help_text=_('This is an external stock location') + ) + def get_location_owner(self): """Get the closest "owner" for this location. @@ -445,8 +458,6 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M if old.status != self.status: deltas['status'] = self.status - # TODO - Other interesting changes we are interested in... - if add_note and len(deltas) > 0: self.add_tracking_entry( StockHistoryCode.EDITED, @@ -517,7 +528,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M for plugin in registry.with_mixin('validation'): try: - plugin.validate_batch_code(self.batch) + plugin.validate_batch_code(self.batch, self) except ValidationError as exc: raise ValidationError({ 'batch': exc.message @@ -548,6 +559,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M if type(self.batch) is str: self.batch = self.batch.strip() + # Custom validation of batch code self.validate_batch_code() try: @@ -947,17 +959,24 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M item.customer = customer item.location = None - item.save() + item.save(add_note=False) - # TODO - Remove any stock item allocations from this stock item + code = StockHistoryCode.SENT_TO_CUSTOMER + deltas = {} + + if customer is not None: + deltas['customer'] = customer.pk + deltas['customer_name'] = customer.name + + # If an order is provided, we are shipping against a SalesOrder, not manually! + if order: + code = StockHistoryCode.SHIPPED_AGAINST_SALES_ORDER + deltas['salesorder'] = order.pk item.add_tracking_entry( - StockHistoryCode.SENT_TO_CUSTOMER, + code, user, - { - 'customer': customer.id, - 'customer_name': customer.name, - }, + deltas, notes=notes, ) @@ -979,7 +998,9 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M """ notes = kwargs.get('notes', '') - tracking_info = {} + tracking_info = { + 'location': location.pk, + } if self.customer: tracking_info['customer'] = self.customer.id @@ -993,7 +1014,6 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M location=location ) - self.clearAllocations() self.customer = None self.belongs_to = None self.sales_order = None @@ -1013,7 +1033,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M notes=notes ) else: - self.save() + self.save(add_note=False) def is_allocated(self): """Return True if this StockItem is allocated to a SalesOrder or a Build.""" @@ -1039,9 +1059,33 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M return total - def sales_order_allocation_count(self): + def get_sales_order_allocations(self, active=True): + """Return a queryset for SalesOrderAllocations against this StockItem, with optional filters. + + Arguments: + active: Filter by 'active' status of the allocation + """ + query = self.sales_order_allocations.all() + + if active is True: + query = query.filter( + line__order__status__in=SalesOrderStatus.OPEN, + shipment__shipment_date=None + ) + elif active is False: + query = query.exclude( + line__order__status__in=SalesOrderStatus.OPEN + ).exclude( + shipment__shipment_date=None + ) + + return query + + def sales_order_allocation_count(self, active=True): """Return the total quantity allocated to SalesOrders.""" - query = self.sales_order_allocations.aggregate(q=Coalesce(Sum('quantity'), Decimal(0))) + + query = self.get_sales_order_allocations(active=active) + query = query.aggregate(q=Coalesce(Sum('quantity'), Decimal(0))) total = query['q'] @@ -1339,7 +1383,8 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, common.models.MetaMixin, M if len(existing) > 0: exists = ','.join([str(x) for x in existing]) - raise ValidationError({"serial_numbers": _("Serial numbers already exist: {exists}").format(exists=exists)}) + msg = _("Serial numbers already exist") + f": {exists}" + raise ValidationError({"serial_numbers": msg}) # Create a new stock item for each unique serial number for serial in serials: @@ -1992,8 +2037,8 @@ def after_delete_stock_item(sender, instance: StockItem, **kwargs): InvenTree.tasks.offload_task(part_tasks.notify_low_stock_if_required, instance.part) # Schedule an update on parent part pricing - if InvenTree.ready.canAppAccessDatabase(): - instance.part.schedule_pricing_update() + if InvenTree.ready.canAppAccessDatabase(allow_test=True): + instance.part.schedule_pricing_update(create=False) @receiver(post_save, sender=StockItem, dispatch_uid='stock_item_post_save_log') @@ -2005,8 +2050,8 @@ def after_save_stock_item(sender, instance: StockItem, created, **kwargs): # Run this check in the background InvenTree.tasks.offload_task(part_tasks.notify_low_stock_if_required, instance.part) - if InvenTree.ready.canAppAccessDatabase(): - instance.part.schedule_pricing_update() + if InvenTree.ready.canAppAccessDatabase(allow_test=True): + instance.part.schedule_pricing_update(create=True) class StockItemAttachment(InvenTreeAttachment): diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 9708ed15d6..1d93f900bd 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -19,10 +19,10 @@ import InvenTree.helpers import InvenTree.serializers import part.models as part_models import stock.filters -from common.settings import currency_code_default, currency_code_mappings from company.serializers import SupplierPartSerializer from InvenTree.models import extract_int -from InvenTree.serializers import InvenTreeDecimalField +from InvenTree.serializers import (InvenTreeCurrencySerializer, + InvenTreeDecimalField) from part.serializers import PartBriefSerializer from .models import (StockItem, StockItemAttachment, StockItemTestResult, @@ -46,10 +46,6 @@ class LocationBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): class StockItemSerializerBrief(InvenTree.serializers.InvenTreeModelSerializer): """Brief serializers for a StockItem.""" - part_name = serializers.CharField(source='part.full_name', read_only=True) - - quantity = InvenTreeDecimalField() - class Meta: """Metaclass options.""" @@ -69,6 +65,10 @@ class StockItemSerializerBrief(InvenTree.serializers.InvenTreeModelSerializer): 'barcode_hash', ] + part_name = serializers.CharField(source='part.full_name', read_only=True) + + quantity = InvenTreeDecimalField() + def validate_serial(self, value): """Make sure serial is not to big.""" if abs(extract_int(value)) > 0x7fffffff: @@ -83,6 +83,60 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): - Includes serialization for the item location """ + class Meta: + """Metaclass options.""" + + model = StockItem + fields = [ + 'allocated', + 'batch', + 'belongs_to', + 'build', + 'customer', + 'delete_on_deplete', + 'expired', + 'expiry_date', + 'is_building', + 'link', + 'location', + 'location_detail', + 'notes', + 'owner', + 'packaging', + 'part', + 'part_detail', + 'purchase_order', + 'purchase_order_reference', + 'pk', + 'quantity', + 'sales_order', + 'sales_order_reference', + 'serial', + 'stale', + 'status', + 'status_text', + 'stocktake_date', + 'supplier_part', + 'supplier_part_detail', + 'tracking_items', + 'barcode_hash', + 'updated', + 'purchase_price', + 'purchase_price_currency', + ] + + """ + These fields are read-only in this context. + They can be updated by accessing the appropriate API endpoints + """ + read_only_fields = [ + 'allocated', + 'barcode_hash', + 'stocktake_date', + 'stocktake_user', + 'updated', + ] + part = serializers.PrimaryKeyRelatedField( queryset=part_models.Part.objects.all(), many=False, allow_null=False, @@ -111,6 +165,8 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): queryset = queryset.prefetch_related( 'sales_order', 'purchase_order', + 'part', + 'part__pricing_data', ) # Annotate the queryset with the total allocated to sales orders @@ -171,17 +227,11 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): purchase_price = InvenTree.serializers.InvenTreeMoneySerializer( label=_('Purchase Price'), - max_digits=19, decimal_places=6, allow_null=True, help_text=_('Purchase price of this stock item'), ) - purchase_price_currency = serializers.ChoiceField( - choices=currency_code_mappings(), - default=currency_code_default, - label=_('Currency'), - help_text=_('Purchase currency of this stock item'), - ) + purchase_price_currency = InvenTreeCurrencySerializer(help_text=_('Purchase currency of this stock item')) purchase_order_reference = serializers.CharField(source='purchase_order.reference', read_only=True) sales_order_reference = serializers.CharField(source='sales_order.reference', read_only=True) @@ -203,60 +253,6 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): if supplier_part_detail is not True: self.fields.pop('supplier_part_detail') - class Meta: - """Metaclass options.""" - - model = StockItem - fields = [ - 'allocated', - 'batch', - 'belongs_to', - 'build', - 'customer', - 'delete_on_deplete', - 'expired', - 'expiry_date', - 'is_building', - 'link', - 'location', - 'location_detail', - 'notes', - 'owner', - 'packaging', - 'part', - 'part_detail', - 'purchase_order', - 'purchase_order_reference', - 'pk', - 'quantity', - 'sales_order', - 'sales_order_reference', - 'serial', - 'stale', - 'status', - 'status_text', - 'stocktake_date', - 'supplier_part', - 'supplier_part_detail', - 'tracking_items', - 'barcode_hash', - 'updated', - 'purchase_price', - 'purchase_price_currency', - ] - - """ - These fields are read-only in this context. - They can be updated by accessing the appropriate API endpoints - """ - read_only_fields = [ - 'allocated', - 'barcode_hash', - 'stocktake_date', - 'stocktake_user', - 'updated', - ] - class SerializeStockItemSerializer(serializers.Serializer): """A DRF serializer for "serializing" a StockItem. @@ -573,23 +569,6 @@ class LocationTreeSerializer(InvenTree.serializers.InvenTreeModelSerializer): class LocationSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Detailed information about a stock location.""" - @staticmethod - def annotate_queryset(queryset): - """Annotate extra information to the queryset""" - - # Annotate the number of stock items which exist in this category (including subcategories) - queryset = queryset.annotate( - items=stock.filters.annotate_location_items() - ) - - return queryset - - url = serializers.CharField(source='get_absolute_url', read_only=True) - - items = serializers.IntegerField(read_only=True) - - level = serializers.IntegerField(read_only=True) - class Meta: """Metaclass options.""" @@ -607,12 +586,30 @@ class LocationSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'owner', 'icon', 'structural', + 'external', ] read_only_fields = [ 'barcode_hash', ] + @staticmethod + def annotate_queryset(queryset): + """Annotate extra information to the queryset""" + + # Annotate the number of stock items which exist in this category (including subcategories) + queryset = queryset.annotate( + items=stock.filters.annotate_location_items() + ) + + return queryset + + url = serializers.CharField(source='get_absolute_url', read_only=True) + + items = serializers.IntegerField(read_only=True) + + level = serializers.IntegerField(read_only=True) + class StockItemAttachmentSerializer(InvenTree.serializers.InvenTreeAttachmentSerializer): """Serializer for StockItemAttachment model.""" @@ -622,43 +619,14 @@ class StockItemAttachmentSerializer(InvenTree.serializers.InvenTreeAttachmentSer model = StockItemAttachment - fields = [ - 'pk', + fields = InvenTree.serializers.InvenTreeAttachmentSerializer.attachment_fields([ 'stock_item', - 'attachment', - 'filename', - 'link', - 'comment', - 'upload_date', - 'user', - 'user_detail', - ] - - read_only_fields = [ - 'upload_date', - 'user', - 'user_detail' - ] + ]) class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for the StockItemTestResult model.""" - user_detail = InvenTree.serializers.UserSerializer(source='user', read_only=True) - - key = serializers.CharField(read_only=True) - - attachment = InvenTree.serializers.InvenTreeAttachmentSerializerField(required=False) - - def __init__(self, *args, **kwargs): - """Add detail fields.""" - user_detail = kwargs.pop('user_detail', False) - - super().__init__(*args, **kwargs) - - if user_detail is not True: - self.fields.pop('user_detail') - class Meta: """Metaclass options.""" @@ -684,30 +652,24 @@ class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializ 'date', ] - -class StockTrackingSerializer(InvenTree.serializers.InvenTreeModelSerializer): - """Serializer for StockItemTracking model.""" - def __init__(self, *args, **kwargs): """Add detail fields.""" - item_detail = kwargs.pop('item_detail', False) user_detail = kwargs.pop('user_detail', False) super().__init__(*args, **kwargs) - if item_detail is not True: - self.fields.pop('item_detail') - if user_detail is not True: self.fields.pop('user_detail') - label = serializers.CharField(read_only=True) + user_detail = InvenTree.serializers.UserSerializer(source='user', read_only=True) - item_detail = StockItemSerializerBrief(source='item', many=False, read_only=True) + key = serializers.CharField(read_only=True) - user_detail = InvenTree.serializers.UserSerializer(source='user', many=False, read_only=True) + attachment = InvenTree.serializers.InvenTreeAttachmentSerializerField(required=False) - deltas = serializers.JSONField(read_only=True) + +class StockTrackingSerializer(InvenTree.serializers.InvenTreeModelSerializer): + """Serializer for StockItemTracking model.""" class Meta: """Metaclass options.""" @@ -733,6 +695,27 @@ class StockTrackingSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'tracking_type', ] + def __init__(self, *args, **kwargs): + """Add detail fields.""" + item_detail = kwargs.pop('item_detail', False) + user_detail = kwargs.pop('user_detail', False) + + super().__init__(*args, **kwargs) + + if item_detail is not True: + self.fields.pop('item_detail') + + if user_detail is not True: + self.fields.pop('user_detail') + + label = serializers.CharField(read_only=True) + + item_detail = StockItemSerializerBrief(source='item', many=False, read_only=True) + + user_detail = InvenTree.serializers.UserSerializer(source='user', many=False, read_only=True) + + deltas = serializers.JSONField(read_only=True) + class StockAssignmentItemSerializer(serializers.Serializer): """Serializer for a single StockItem with in StockAssignment request. @@ -1144,15 +1127,6 @@ class StockRemoveSerializer(StockAdjustmentSerializer): class StockTransferSerializer(StockAdjustmentSerializer): """Serializer for transferring (moving) stock item(s).""" - location = serializers.PrimaryKeyRelatedField( - queryset=StockLocation.objects.all(), - many=False, - required=True, - allow_null=False, - label=_('Location'), - help_text=_('Destination stock location'), - ) - class Meta: """Metaclass options.""" @@ -1162,6 +1136,15 @@ class StockTransferSerializer(StockAdjustmentSerializer): 'location', ] + location = serializers.PrimaryKeyRelatedField( + queryset=StockLocation.objects.all(), + many=False, + required=True, + allow_null=False, + label=_('Location'), + help_text=_('Destination stock location'), + ) + def save(self): """Transfer stock.""" request = self.context['request'] diff --git a/InvenTree/stock/templates/stock/item.html b/InvenTree/stock/templates/stock/item.html index 22e43be7b6..a886e71b6c 100644 --- a/InvenTree/stock/templates/stock/item.html +++ b/InvenTree/stock/templates/stock/item.html @@ -59,7 +59,7 @@ {% include "filter_list.html" with id="salesorderallocation" %}
-
+
{% endif %}
@@ -222,30 +222,18 @@ ); }); - enableDragAndDrop( - '#attachment-dropzone', - "{% url 'api-stock-attachment-list' %}", - { - data: { - stock_item: {{ item.id }}, - }, - label: 'attachment', - success: function(data, status, xhr) { - reloadAttachmentTable(); + onPanelLoad('attachments', function() { + loadAttachmentTable('{% url "api-stock-attachment-list" %}', { + filters: { + stock_item: {{ item.pk }}, + }, + fields: { + stock_item: { + value: {{ item.pk }}, + hidden: true, } } - ); - - loadAttachmentTable('{% url "api-stock-attachment-list" %}', { - filters: { - stock_item: {{ item.pk }}, - }, - fields: { - stock_item: { - value: {{ item.pk }}, - hidden: true, - } - } + }); }); loadStockTestResultsTable( @@ -255,15 +243,13 @@ } ); - function reloadTable() { - $("#test-result-table").bootstrapTable("refresh"); - } - - {% if item.has_test_reports %} $("#test-report").click(function() { - printTestReports([{{ item.pk }}]); + printReports({ + items: [{{ item.pk }}], + key: 'item', + url: '{% url "api-stockitem-testreport-list" %}', + }); }); - {% endif %} {% if user.is_staff %} $("#delete-test-results").click(function() { @@ -301,7 +287,7 @@ method: 'DELETE', title: '{% trans "Delete Test Data" %}', preFormContent: html, - onSuccess: reloadTable, + refreshTable: '#test-result-table', }); } } @@ -313,19 +299,11 @@ constructForm('{% url "api-stock-test-result-list" %}', { method: 'POST', - fields: { - test: {}, - result: {}, - value: {}, - attachment: {}, - notes: {}, - stock_item: { - value: {{ item.pk }}, - hidden: true, - } - }, + fields: stockItemTestResultFields({ + stock_item: {{ item.pk }}, + }), title: '{% trans "Add Test Result" %}', - onSuccess: reloadTable, + refreshTable: '#test-result-table', }); }); diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 16e023fac9..322ee56235 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -155,13 +155,8 @@ - {% if item.barcode_hash %} - - - {% trans "Barcode Identifier" %} - {{ item.barcode_hash }} - - {% endif %} + {% include "barcode_data.html" with instance=item %} + {% if item.batch %} @@ -187,7 +182,10 @@ {% trans "Purchase Price" %} - {% include "price_data.html" with price=item.purchase_price %} + + {% render_currency item.purchase_price %} + {% if item.part.units %} / {{ item.part.units }}{% endif %} + {% endif %} {% if item.parent %} @@ -263,6 +261,12 @@
+ {% if not item.in_stock %} +
+ {% trans "This stock item is unavailable" %} +
+ {% endif %} + {% if item.is_building %}
{% trans "This stock item is in production and cannot be edited." %}
@@ -277,13 +281,7 @@
{% endif %} - {% if item.hasRequiredTests and not item.passedAllRequiredTests %} -
- {% trans "This stock item has not passed all required tests" %} -
- {% endif %} - - {% for allocation in item.sales_order_allocations.all %} + {% for allocation in item.get_sales_order_allocations.all %}
{% object_link 'so-detail' allocation.line.order.id allocation.line.order as link %} {% decimal allocation.quantity as qty %} @@ -298,12 +296,6 @@ {% trans "This stock item is allocated to Build Order" %} {{ link }} {% if qty < item.quantity %}({% trans "Quantity" %}: {{ qty }}){% endif %}
{% endfor %} - - {% if item.serialized %} -
- {% trans "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." %} -
- {% endif %}
{% endblock details %} @@ -317,7 +309,7 @@
-
{% trans "Serial Number" %}
+
{% trans "Serial Number" %}
{{ item.serial }} @@ -345,7 +337,11 @@
+ {% if item.in_stock %}
{% trans "Available Quantity" %}
+ {% else %} +
{% trans "Quantity" %}
+ {% endif %}
{% if item.quantity != available %}{% decimal available %} / {% endif %}{% decimal item.quantity %} {% include "part/part_units.html" with part=item.part %}
@@ -364,7 +360,7 @@ {% elif item.sales_order %} - + {% trans "Sales Order" %} {{ item.sales_order.reference }} - {{ item.sales_order.customer.name }} @@ -410,7 +406,7 @@ {% if item.passedAllRequiredTests %} {% else %} - + {% endif %} @@ -490,11 +486,19 @@ $('#stock-uninstall').click(function() { }); $("#stock-test-report").click(function() { - printTestReports([{{ item.pk }}]); + printReports({ + items: [{{ item.pk }}], + key: 'item', + url: '{% url "api-stockitem-testreport-list" %}', + }); }); $("#print-label").click(function() { - printStockItemLabels([{{ item.pk }}]); + printLabels({ + items: [{{ item.pk }}], + url: '{% url "api-stockitem-label-list" %}', + key: 'item', + }); }); {% if roles.stock.change %} @@ -522,14 +526,14 @@ $('#stock-edit-status').click(function () { {% endif %} +{% if barcodes %} $("#show-qr-code").click(function() { - launchModalForm("{% url 'stock-item-qr' item.id %}", - { - no_post: true, - }); + showQRDialog( + '{% trans "Stock Item QR Code" %}', + '{"stockitem": {{ item.pk }}}', + ); }); -{% if barcodes %} $("#barcode-link").click(function() { linkBarcodeDialog( { @@ -637,7 +641,9 @@ $("#stock-return-from-customer").click(function() { value: {{ item.part.default_location.pk }}, {% endif %} }, - notes: {}, + notes: { + icon: 'fa-sticky-note', + }, }, method: 'POST', title: '{% trans "Return to Stock" %}', diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 4e04906a18..f631c1b6ff 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -32,6 +32,12 @@ {% url 'admin:stock_stocklocation_change' location.pk as url %} {% include "admin_button.html" with url=url %} {% endif %} +{% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} +{% if stocktake_enable and roles.stocktake.add %} + +{% endif %} {% mixin_available "locate" as locate_available %} {% if location and plugins_enabled and locate_available %} @@ -144,13 +150,7 @@ {% endif %} - {% if location and location.barcode_hash %} - - - {% trans "Barcode Identifier" %} - {{ location.barcode_hash }} - - {% endif %} + {% include "barcode_data.html" with instance=location %} {% endblock details_left %} @@ -222,17 +222,6 @@
- - {% if labels_enabled %} - - {% endif %} {% include "filter_list.html" with id="location" %}
@@ -246,6 +235,20 @@ {% block js_ready %} {{ block.super }} + {% settings_value "STOCKTAKE_ENABLE" as stocktake_enable %} + {% if stocktake_enable and roles.stocktake.add %} + $('#location-stocktake').click(function() { + generateStocktakeReport({ + category: {}, + location: { + {% if location %}value: {{ location.pk }},{% endif %} + }, + generate_report: {}, + update_parts: {}, + }); + }); + {% endif %} + {% if plugins_enabled and location %} $('#locate-location-button').click(function() { locateItemOrLocation({ @@ -279,21 +282,11 @@ var locs = [{{ location.pk }}]; - printStockLocationLabels(locs); - - }); - - $('#multi-location-print-label').click(function() { - - var selections = getTableData('#sublocation-table'); - - var locations = []; - - selections.forEach(function(loc) { - locations.push(loc.pk); + printLabels({ + items: locs, + key: 'location', + url: '{% url "api-stocklocation-label-list" %}', }); - - printStockLocationLabels(locations); }); {% endif %} @@ -379,10 +372,10 @@ {% if barcodes %} $('#show-qr-code').click(function() { - launchModalForm("{% url 'stock-location-qr' location.id %}", - { - no_post: true, - }); + showQRDialog( + '{% trans "Stock Location QR Code" %}', + '{"stocklocation": {{ location.pk }}}' + ); }); $("#barcode-link").click(function() { diff --git a/InvenTree/stock/test_api.py b/InvenTree/stock/test_api.py index 412944204c..dc645e9eae 100644 --- a/InvenTree/stock/test_api.py +++ b/InvenTree/stock/test_api.py @@ -50,9 +50,10 @@ class StockLocationTest(StockAPITestCase): list_url = reverse('api-location-list') - def setUp(self): + @classmethod + def setUpTestData(cls): """Setup for all tests.""" - super().setUp() + super().setUpTestData() # Add some stock locations StockLocation.objects.create(name='top', description='top category') @@ -161,7 +162,7 @@ class StockLocationTest(StockAPITestCase): # Create stock items in the location to be deleted for jj in range(3): stock_items.append(StockItem.objects.create( - batch=f"Stock Item xyz {jj}", + batch=f"Batch xyz {jj}", location=stock_location_to_delete, part=part )) @@ -180,7 +181,7 @@ class StockLocationTest(StockAPITestCase): # Create stock items in the sub locations for jj in range(3): child_stock_locations_items.append(StockItem.objects.create( - batch=f"Stock item in sub location xyz {jj}", + batch=f"B xyz {jj}", part=part, location=child )) @@ -272,7 +273,7 @@ class StockLocationTest(StockAPITestCase): # Create the test stock item located to a non-structural category item = StockItem.objects.create( - batch="Item which will be tried to relocated to a structural location", + batch="BBB", location=non_structural_location, part=part ) @@ -306,6 +307,29 @@ class StockItemListTest(StockAPITestCase): # Return JSON-ified data return response.data + def test_top_level_filtering(self): + """Test filtering against "top level" stock location""" + + # No filters, should return *all* items + response = self.get(self.list_url, {}, expected_code=200) + self.assertEqual(len(response.data), StockItem.objects.count()) + + # Filter with "cascade=False" (but no location specified) + # Should not result in any actual filtering + response = self.get(self.list_url, {'cascade': False}, expected_code=200) + self.assertEqual(len(response.data), StockItem.objects.count()) + + # Filter with "cascade=False" for the top-level location + response = self.get(self.list_url, {'location': 'null', 'cascade': False}, expected_code=200) + self.assertTrue(len(response.data) < StockItem.objects.count()) + + for result in response.data: + self.assertIsNone(result['location']) + + # Filter with "cascade=True" + response = self.get(self.list_url, {'location': 'null', 'cascade': True}, expected_code=200) + self.assertEqual(len(response.data), StockItem.objects.count()) + def test_get_stock_list(self): """List *all* StockItem objects.""" response = self.get_stock() @@ -928,7 +952,7 @@ class StockItemTest(StockAPITestCase): # First, construct a set of template / variant parts master_part = part.models.Part.objects.create( - name='Master', description='Master part', + name='Master', description='Master part which has variants', category=category, is_template=True, ) @@ -1390,30 +1414,32 @@ class StockMergeTest(StockAPITestCase): URL = reverse('api-stock-merge') - def setUp(self): + @classmethod + def setUpTestData(cls): """Setup for all tests.""" - super().setUp() - self.part = part.models.Part.objects.get(pk=25) - self.loc = StockLocation.objects.get(pk=1) - self.sp_1 = company.models.SupplierPart.objects.get(pk=100) - self.sp_2 = company.models.SupplierPart.objects.get(pk=101) + super().setUpTestData() - self.item_1 = StockItem.objects.create( - part=self.part, - supplier_part=self.sp_1, + cls.part = part.models.Part.objects.get(pk=25) + cls.loc = StockLocation.objects.get(pk=1) + cls.sp_1 = company.models.SupplierPart.objects.get(pk=100) + cls.sp_2 = company.models.SupplierPart.objects.get(pk=101) + + cls.item_1 = StockItem.objects.create( + part=cls.part, + supplier_part=cls.sp_1, quantity=100, ) - self.item_2 = StockItem.objects.create( - part=self.part, - supplier_part=self.sp_2, + cls.item_2 = StockItem.objects.create( + part=cls.part, + supplier_part=cls.sp_2, quantity=100, ) - self.item_3 = StockItem.objects.create( - part=self.part, - supplier_part=self.sp_2, + cls.item_3 = StockItem.objects.create( + part=cls.part, + supplier_part=cls.sp_2, quantity=50, ) diff --git a/InvenTree/stock/test_migrations.py b/InvenTree/stock/test_migrations.py index 07fa9f2fc7..650472fd72 100644 --- a/InvenTree/stock/test_migrations.py +++ b/InvenTree/stock/test_migrations.py @@ -67,3 +67,65 @@ class TestSerialNumberMigration(MigratorTestCase): # Check that the StockItem maximum serial number self.assertEqual(big_ref_item.serial, '9999999999999999999999999999999999999999999999999999999999999') self.assertEqual(big_ref_item.serial_int, 0x7fffffff) + + +class TestScheduledForDeletionMigration(MigratorTestCase): + """Test data migration for removing 'scheduled_for_deletion' field""" + + migrate_from = ('stock', '0066_stockitem_scheduled_for_deletion') + migrate_to = ('stock', helpers.getNewestMigrationFile('stock')) + + def prepare(self): + """Create some initial stock items""" + + Part = self.old_state.apps.get_model('part', 'part') + StockItem = self.old_state.apps.get_model('stock', 'stockitem') + + for idx in range(5): + part = Part.objects.create( + name=f'Part_{idx}', + description='Just a part, nothing to see here', + active=True, + level=0, tree_id=0, + lft=0, rght=0, + ) + + for jj in range(5): + StockItem.objects.create( + part=part, + quantity=jj + 5, + level=0, tree_id=0, + lft=0, rght=0, + scheduled_for_deletion=True + ) + + # For extra points, create some parent-child relationships between stock items + part = Part.objects.first() + + item_1 = StockItem.objects.create( + part=part, + quantity=100, + level=0, tree_id=0, + lft=0, rght=0, + scheduled_for_deletion=True, + ) + + for ii in range(3): + StockItem.objects.create( + part=part, + quantity=200, + level=0, tree_id=0, + lft=0, rght=0, + scheduled_for_deletion=False, + parent=item_1, + ) + + self.assertEqual(StockItem.objects.count(), 29) + + def test_migration(self): + """Test that all stock items were actually removed""" + + StockItem = self.new_state.apps.get_model('stock', 'stockitem') + + # All the "scheduled for deletion" items have been removed + self.assertEqual(StockItem.objects.count(), 3) diff --git a/InvenTree/stock/tests.py b/InvenTree/stock/tests.py index d30c121ccf..c3d870b605 100644 --- a/InvenTree/stock/tests.py +++ b/InvenTree/stock/tests.py @@ -30,19 +30,20 @@ class StockTestBase(InvenTreeTestCase): 'stock_tests', ] - def setUp(self): + @classmethod + def setUpTestData(cls): """Setup for all tests.""" - super().setUp() + super().setUpTestData() # Extract some shortcuts from the fixtures - self.home = StockLocation.objects.get(name='Home') - self.bathroom = StockLocation.objects.get(name='Bathroom') - self.diningroom = StockLocation.objects.get(name='Dining Room') + cls.home = StockLocation.objects.get(name='Home') + cls.bathroom = StockLocation.objects.get(name='Bathroom') + cls.diningroom = StockLocation.objects.get(name='Dining Room') - self.office = StockLocation.objects.get(name='Office') - self.drawer1 = StockLocation.objects.get(name='Drawer_1') - self.drawer2 = StockLocation.objects.get(name='Drawer_2') - self.drawer3 = StockLocation.objects.get(name='Drawer_3') + cls.office = StockLocation.objects.get(name='Office') + cls.drawer1 = StockLocation.objects.get(name='Drawer_1') + cls.drawer2 = StockLocation.objects.get(name='Drawer_2') + cls.drawer3 = StockLocation.objects.get(name='Drawer_3') # Ensure the MPTT objects are correctly rebuild Part.objects.rebuild() @@ -181,8 +182,8 @@ class StockTest(StockTestBase): # Ensure that 'global uniqueness' setting is enabled InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', True, self.user) - part_a = Part.objects.create(name='A', description='A', trackable=True) - part_b = Part.objects.create(name='B', description='B', trackable=True) + part_a = Part.objects.create(name='A', description='A part with a description', trackable=True) + part_b = Part.objects.create(name='B', description='B part with a description', trackable=True) # Create a StockItem for part_a StockItem.objects.create( @@ -490,7 +491,7 @@ class StockTest(StockTestBase): # Check that a tracking item was added track = StockItemTracking.objects.filter(item=ait).latest('id') - self.assertEqual(track.tracking_type, StockHistoryCode.SENT_TO_CUSTOMER) + self.assertEqual(track.tracking_type, StockHistoryCode.SHIPPED_AGAINST_SALES_ORDER) self.assertIn('Allocated some stock', track.notes) def test_return_from_customer(self): @@ -577,10 +578,13 @@ class StockTest(StockTestBase): """Tests for stock serialization.""" p = Part.objects.create( name='trackable part', - description='trackable part', + description='A trackable part which can be tracked', trackable=True, ) + # Ensure we do not have unique serials enabled + InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False, None) + item = StockItem.objects.create( part=p, quantity=1, @@ -608,7 +612,7 @@ class StockTest(StockTestBase): """Unit tests for "large" serial numbers which exceed integer encoding.""" p = Part.objects.create( name='trackable part', - description='trackable part', + description='A trackable part with really big serial numbers', trackable=True, ) @@ -721,6 +725,9 @@ class StockTest(StockTestBase): self.assertEqual(item.quantity, 10) + # Ensure we do not have unique serials enabled + InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False, None) + item.serializeStock(3, [1, 2, 3], self.user) self.assertEqual(item.quantity, 7) @@ -911,6 +918,24 @@ class StockTest(StockTestBase): self.assertEqual(C21.get_ancestors().count(), 1) self.assertEqual(C22.get_ancestors().count(), 1) + def test_metadata(self): + """Unit tests for the metadata field.""" + for model in [StockItem, StockLocation]: + p = model.objects.first() + self.assertIsNone(p.metadata) + + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) + + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) + + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) + + self.assertEqual(len(p.metadata.keys()), 4) + class StockBarcodeTest(StockTestBase): """Run barcode tests for the stock app""" @@ -1087,8 +1112,14 @@ class TestResultTest(StockTestBase): item.pk = None item.serial = None item.quantity = 50 - item.batch = "B344" + # Try with an invalid batch code (according to sample validatoin plugin) + item.batch = "X234" + + with self.assertRaises(ValidationError): + item.save() + + item.batch = "B123" item.save() # Do some tests! diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index b61bd8eb60..37ea1ce6d9 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -1,14 +1,12 @@ """URL lookup for Stock app.""" -from django.urls import include, re_path +from django.urls import include, path, re_path from stock import views location_urls = [ - re_path(r'^(?P\d+)/', include([ - re_path(r'^qr_code/?', views.StockLocationQRCode.as_view(), name='stock-location-qr'), - + path(r'/', include([ # Anything else - direct to the location detail view re_path('^.*$', views.StockLocationDetail.as_view(), name='stock-location-detail'), ])), @@ -16,8 +14,6 @@ location_urls = [ ] stock_item_detail_urls = [ - re_path(r'^qr_code/', views.StockItemQRCode.as_view(), name='stock-item-qr'), - # Anything else - direct to the item detail view re_path('^.*$', views.StockItemDetail.as_view(), name='stock-item-detail'), ] diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 6177972259..22d3964e30 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -2,11 +2,10 @@ from django.http import HttpResponseRedirect from django.urls import reverse -from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView, ListView import common.settings -from InvenTree.views import InvenTreeRoleMixin, QRCodeView +from InvenTree.views import InvenTreeRoleMixin from plugin.views import InvenTreePluginViewMixin from .models import StockItem, StockLocation @@ -101,34 +100,3 @@ class StockItemDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView): return HttpResponseRedirect(reverse('stock-index')) return super().get(request, *args, **kwargs) - - -class StockLocationQRCode(QRCodeView): - """View for displaying a QR code for a StockLocation object.""" - - ajax_form_title = _("Stock Location QR code") - - role_required = ['stock_location.view', 'stock.view'] - - def get_qr_data(self): - """Generate QR code data for the StockLocation.""" - try: - loc = StockLocation.objects.get(id=self.pk) - return loc.format_barcode() - except StockLocation.DoesNotExist: - return None - - -class StockItemQRCode(QRCodeView): - """View for displaying a QR code for a StockItem object.""" - - ajax_form_title = _("Stock Item QR Code") - role_required = 'stock.view' - - def get_qr_data(self): - """Generate QR code data for the StockItem.""" - try: - item = StockItem.objects.get(id=self.pk) - return item.format_barcode() - except StockItem.DoesNotExist: - return None diff --git a/InvenTree/templates/InvenTree/index.html b/InvenTree/templates/InvenTree/index.html index 7396a5e133..499aa7cf08 100644 --- a/InvenTree/templates/InvenTree/index.html +++ b/InvenTree/templates/InvenTree/index.html @@ -109,7 +109,7 @@ addHeaderAction('latest-parts', '{% trans "Latest Parts" %}', 'fa-newspaper'); loadSimplePartTable("#table-latest-parts", "{% url 'api-part-list' %}", { params: { ordering: "-creation_date", - max_results: {% settings_value "PART_RECENT_COUNT" user=request.user %}, + limit: {% settings_value "PART_RECENT_COUNT" user=request.user %}, }, name: 'latest_parts', }); @@ -147,7 +147,7 @@ loadStockTable($('#table-recently-updated-stock'), { params: { part_detail: true, ordering: "-updated", - max_results: {% settings_value "STOCK_RECENT_COUNT" user=request.user %}, + limit: {% settings_value "STOCK_RECENT_COUNT" user=request.user %}, }, name: 'recently-updated-stock', grouping: false, diff --git a/InvenTree/templates/InvenTree/notifications/notifications.html b/InvenTree/templates/InvenTree/notifications/notifications.html index 460f747191..db9593cf23 100644 --- a/InvenTree/templates/InvenTree/notifications/notifications.html +++ b/InvenTree/templates/InvenTree/notifications/notifications.html @@ -75,9 +75,7 @@ $('#history-delete').click(function() { multi_delete: true, preFormContent: html, title: '{% trans "Delete Notifications" %}', - onSuccess: function() { - $('#history-table').bootstrapTable('refresh'); - }, + refreshTable: '#history-table', form_data: { filters: { read: true, @@ -88,7 +86,7 @@ $('#history-delete').click(function() { }); $("#history-table").on('click', '.notification-delete', function() { - constructForm(`/api/notifications/${$(this).attr('pk')}/`, { + constructForm(`{% url "api-notifications-list" %}${$(this).attr('pk')}/`, { method: 'DELETE', title: '{% trans "Delete Notification" %}', onSuccess: function(data) { diff --git a/InvenTree/templates/InvenTree/settings/global.html b/InvenTree/templates/InvenTree/settings/global.html index ba71fed465..901d0b2a66 100644 --- a/InvenTree/templates/InvenTree/settings/global.html +++ b/InvenTree/templates/InvenTree/settings/global.html @@ -19,6 +19,7 @@ {% include "InvenTree/settings/setting.html" with key="INVENTREE_INSTANCE_TITLE" icon="fa-info-circle" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_RESTRICT_ABOUT" icon="fa-info-circle" %} + {% include "InvenTree/settings/setting.html" with key="INVENTREE_UPDATE_CHECK_INTERVAL" icon="fa-calendar-alt" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DOWNLOAD_FROM_URL" icon="fa-cloud-download-alt" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE" icon="fa-server" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DOWNLOAD_FROM_URL_USER_AGENT" icon="fa-server" %} diff --git a/InvenTree/templates/InvenTree/settings/notifications.html b/InvenTree/templates/InvenTree/settings/notifications.html index fac6d22c51..96bf294362 100644 --- a/InvenTree/templates/InvenTree/settings/notifications.html +++ b/InvenTree/templates/InvenTree/settings/notifications.html @@ -6,7 +6,7 @@ {% block label %}global-notifications{% endblock label %} -{% block heading %}{% trans "Global Notification Settings" %}{% endblock heading %} +{% block heading %}{% trans "Notification Settings" %}{% endblock heading %} {% block content %} diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index 36fb33d52f..20aa76c3f8 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -11,6 +11,7 @@ + {% include "InvenTree/settings/setting.html" with key="PART_ENABLE_REVISION" %} {% include "InvenTree/settings/setting.html" with key="PART_IPN_REGEX" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DUPLICATE_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_EDIT_IPN" %} diff --git a/InvenTree/templates/InvenTree/settings/part_stocktake.html b/InvenTree/templates/InvenTree/settings/part_stocktake.html new file mode 100644 index 0000000000..3db0630358 --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/part_stocktake.html @@ -0,0 +1,45 @@ +{% extends "panel.html" %} +{% load i18n %} + +{% block label %}stocktake{% endblock %} + +{% block heading %} +{% trans "Stocktake Settings" %} +{% endblock %} + +{% block panel_content %} + +
+
+ + {% include "InvenTree/settings/setting.html" with key="STOCKTAKE_ENABLE" icon="fa-clipboard-check" %} + {% include "InvenTree/settings/setting.html" with key="STOCKTAKE_AUTO_DAYS" icon="fa-calendar-alt" %} + {% include "InvenTree/settings/setting.html" with key="STOCKTAKE_DELETE_REPORT_DAYS" icon="fa-trash-alt" %} + +
+
+ +
+
+

{% trans "Stocktake Reports" %}

+ {% include "spacer.html" %} +
+ {% if roles.stocktake.add %} + + {% endif %} +
+
+
+ +
+
+
+ {% include "filter_list.html" with id="stocktakereport" %} +
+
+
+
+ +{% endblock panel_content %} diff --git a/InvenTree/templates/InvenTree/settings/pricing.html b/InvenTree/templates/InvenTree/settings/pricing.html index bbcaf1a0ba..0c0ceece15 100644 --- a/InvenTree/templates/InvenTree/settings/pricing.html +++ b/InvenTree/templates/InvenTree/settings/pricing.html @@ -14,7 +14,8 @@ {% include "InvenTree/settings/setting.html" with key="INVENTREE_DEFAULT_CURRENCY" icon="fa-globe" %} {% include "InvenTree/settings/setting.html" with key="PART_INTERNAL_PRICE" %} {% include "InvenTree/settings/setting.html" with key="PART_BOM_USE_INTERNAL_PRICE" %} - {% include "InvenTree/settings/setting.html" with key="PRICING_DECIMAL_PLACES" %} + {% include "InvenTree/settings/setting.html" with key="PRICING_DECIMAL_PLACES_MIN" icon='fa-dollar-sign' %} + {% include "InvenTree/settings/setting.html" with key="PRICING_DECIMAL_PLACES" icon='fa-dollar-sign' %} {% include "InvenTree/settings/setting.html" with key="PRICING_UPDATE_DAYS" icon='fa-calendar-alt' %} {% include "InvenTree/settings/setting.html" with key="PRICING_USE_SUPPLIER_PRICING" icon='fa-check-circle' %} diff --git a/InvenTree/templates/InvenTree/settings/returns.html b/InvenTree/templates/InvenTree/settings/returns.html new file mode 100644 index 0000000000..48092c0e7a --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/returns.html @@ -0,0 +1,20 @@ +{% extends "panel.html" %} +{% load i18n %} + +{% block label %}return-order{% endblock %} + +{% block heading %} +{% trans "Return Order Settings" %} +{% endblock %} + +{% block content %} + + + + {% include "InvenTree/settings/setting.html" with key="RETURNORDER_ENABLED" icon="fa-check-circle" %} + {% include "InvenTree/settings/setting.html" with key="RETURNORDER_REFERENCE_PATTERN" %} + {% include "InvenTree/settings/setting.html" with key="RETURNORDER_EDIT_COMPLETED_ORDERS" icon="fa-edit" %} + +
+ +{% endblock %} diff --git a/InvenTree/templates/InvenTree/settings/setting.html b/InvenTree/templates/InvenTree/settings/setting.html index 1b9a020658..34f2a39173 100644 --- a/InvenTree/templates/InvenTree/settings/setting.html +++ b/InvenTree/templates/InvenTree/settings/setting.html @@ -2,13 +2,13 @@ {% load i18n %} {% if plugin %} -{% setting_object key plugin=plugin as setting %} +{% setting_object key cache=False plugin=plugin as setting %} {% elif user_setting %} -{% setting_object key user=request.user as setting %} +{% setting_object key cache=False user=request.user as setting %} {% elif notification_setting %} -{% setting_object key method=method user=request.user as setting %} +{% setting_object key cache=False method=method user=request.user as setting %} {% else %} -{% setting_object key as setting %} +{% setting_object key cache=False as setting %} {% endif %} diff --git a/InvenTree/templates/InvenTree/settings/settings.html b/InvenTree/templates/InvenTree/settings/settings.html index 138b32ce3d..128efa932b 100644 --- a/InvenTree/templates/InvenTree/settings/settings.html +++ b/InvenTree/templates/InvenTree/settings/settings.html @@ -20,12 +20,11 @@ {% include "InvenTree/settings/user.html" %} {% include "InvenTree/settings/user_settings.html" %} +{% include "InvenTree/settings/user_display.html" %} {% include "InvenTree/settings/user_homepage.html" %} {% include "InvenTree/settings/user_search.html" %} {% include "InvenTree/settings/user_notifications.html" %} -{% include "InvenTree/settings/user_labels.html" %} -{% include "InvenTree/settings/user_reports.html" %} -{% include "InvenTree/settings/user_display.html" %} +{% include "InvenTree/settings/user_reporting.html" %} {% if user.is_staff %} @@ -36,12 +35,14 @@ {% include "InvenTree/settings/label.html" %} {% include "InvenTree/settings/report.html" %} {% include "InvenTree/settings/part.html" %} -{% include "InvenTree/settings/pricing.html" %} +{% include "InvenTree/settings/part_stocktake.html" %} {% include "InvenTree/settings/category.html" %} +{% include "InvenTree/settings/pricing.html" %} {% include "InvenTree/settings/stock.html" %} {% include "InvenTree/settings/build.html" %} {% include "InvenTree/settings/po.html" %} {% include "InvenTree/settings/so.html" %} +{% include "InvenTree/settings/returns.html" %} {% include "InvenTree/settings/plugin.html" %} {% plugin_list as pl_list %} @@ -62,426 +63,16 @@ {% block js_ready %} {{ block.super }} -// Callback for when boolean settings are edited -$('table').find('.boolean-setting').change(function() { +{% include "InvenTree/settings/settings_js.html" %} - var pk = $(this).attr('pk'); - var setting = $(this).attr('setting'); - var plugin = $(this).attr('plugin'); - var user = $(this).attr('user'); - var notification = $(this).attr('notification'); - - var checked = this.checked; - - // Global setting by default - var url = `/api/settings/global/${setting}/`; - - if (notification) { - url = `/api/settings/notification/${pk}/`; - } else if (plugin) { - url = `/api/plugins/settings/${plugin}/${setting}/`; - } else if (user) { - url = `/api/settings/user/${setting}/`; - } - - inventreePut( - url, - { - value: checked.toString(), - }, - { - method: 'PATCH', - success: function(data) { - }, - error: function(xhr) { - showApiError(xhr, url); - } - } - ); - -}); - -// Callback for when non-boolean settings are edited -$('table').find('.btn-edit-setting').click(function() { - var setting = $(this).attr('setting'); - var plugin = $(this).attr('plugin'); - var is_global = true; - var notification = $(this).attr('notification'); - - if ($(this).attr('user')){ - is_global = false; - } - - var title = ''; - - if (plugin != null) { - title = '{% trans "Edit Plugin Setting" %}'; - } else if (notification) { - title = '{% trans "Edit Notification Setting" %}'; - setting = $(this).attr('pk'); - } else if (is_global) { - title = '{% trans "Edit Global Setting" %}'; - } else { - title = '{% trans "Edit User Setting" %}'; - } - - editSetting(setting, { - plugin: plugin, - global: is_global, - notification: notification, - title: title, - }); -}); - -$("#edit-user").on('click', function() { - launchModalForm( - "{% url 'edit-user' %}", - { - reload: true, - } - ); -}); - -$("#edit-password").on('click', function() { - launchModalForm( - "{% url 'set-password' %}", - { - reload: true, - } - ); -}); - -$('#btn-update-rates').click(function() { - inventreePut( - '{% url "api-currency-refresh" %}', - {}, - { - method: 'POST', - success: function(data) { - location.reload(); - } - } - ); -}); - -$('#exchange-rate-table').inventreeTable({ - url: '{% url "api-currency-exchange" %}', - search: false, - showColumns: false, - sortable: true, - sidePagination: 'client', - onLoadSuccess: function(response) { - var data = response.exchange_rates || {}; - - var rows = []; - - for (var currency in data) { - rows.push({ - 'currency': currency, - 'rate': data[currency], - }); - } - - $('#exchange-rate-table').bootstrapTable('load', rows); - }, - columns: [ - { - field: 'currency', - sortable: true, - title: '{% trans "Currency" %}', - }, - { - field: 'rate', - sortable: true, - title: '{% trans "Rate" %}', - } - ] -}); - -$('#category-select').select2({ - placeholder: '', - width: '100%', - ajax: { - url: '{% url "api-part-category-list" %}', - dataType: 'json', - delay: 250, - cache: false, - data: function(params) { - if (!params.page) { - offset = 0; - } else { - offset = (params.page - 1) * 25; - } - - return { - search: params.term, - offset: offset, - limit: 25, - }; - }, - processResults: function(response) { - var data = []; - - var more = false; - - if ('count' in response && 'results' in response) { - // Response is paginated - data = response.results; - - // Any more data available? - if (response.next) { - more = true; - } - - } else { - // Non-paginated response - data = response; - } - - // Each 'row' must have the 'id' attribute - for (var idx = 0; idx < data.length; idx++) { - data[idx].id = data[idx].pk; - data[idx].text = data[idx].pathstring; - } - - // Ref: https://select2.org/data-sources/formats - var results = { - results: data, - pagination: { - more: more, - } - }; - - return results; - } - }, -}); - -$('#cat-param-table').inventreeTable({ - formatNoMatches: function() { return '{% trans "No category parameter templates found" %}'; }, - columns: [ - { - field: 'pk', - title: 'ID', - visible: false, - switchable: false, - }, - { - field: 'parameter_template_detail.name', - title: '{% trans "Parameter Template" %}', - sortable: 'true', - }, - { - field: 'category_detail.pathstring', - title: '{% trans "Category" %}', - }, - { - field: 'default_value', - title: '{% trans "Default Value" %}', - sortable: 'true', - formatter: function(value, row, index, field) { - var bEdit = ""; - var bDel = ""; - - var html = value - html += "
" + bEdit + bDel + "
"; - - return html; - } - } - ] -}); - -function loadTemplateTable(pk) { - - var query = {}; - - if (pk) { - query['category'] = pk; - } - - // Load the parameter table - $("#cat-param-table").bootstrapTable('refresh', { - query: query, - url: '{% url "api-part-category-parameter-list" %}', - }); -} - - -// Initially load table with *all* categories -loadTemplateTable(); - -$('body').on('change', '#category-select', function() { - var pk = $(this).val(); - loadTemplateTable(pk); -}); - -$("#new-cat-param").click(function() { - - var pk = $('#category-select').val(); - - constructForm('{% url "api-part-category-parameter-list" %}', { - title: '{% trans "Create Category Parameter Template" %}', - method: 'POST', - fields: { - parameter_template: {}, - category: { - icon: 'fa-sitemap', - value: pk, - }, - default_value: {}, - }, - onSuccess: function() { - loadTemplateTable(pk); - } - }); -}); - -$("#cat-param-table").on('click', '.template-edit', function() { - - var category = $('#category-select').val(); - var pk = $(this).attr('pk'); - - constructForm(`/api/part/category/parameters/${pk}/`, { - fields: { - parameter_template: {}, - category: { - icon: 'fa-sitemap', - }, - default_value: {}, - }, - onSuccess: function() { - loadTemplateTable(pk); - } - }); -}); - - -$("#cat-param-table").on('click', '.template-delete', function() { - - var category = $('#category-select').val(); - var pk = $(this).attr('pk'); - - var url = `/part/category/${category}/parameters/${pk}/delete/`; - - constructForm(`/api/part/category/parameters/${pk}/`, { - method: 'DELETE', - title: '{% trans "Delete Category Parameter Template" %}', - onSuccess: function() { - loadTemplateTable(pk); - } - }); -}); - -$("#param-table").inventreeTable({ - url: "{% url 'api-part-parameter-template-list' %}", - queryParams: { - ordering: 'name', - }, - formatNoMatches: function() { return '{% trans "No part parameter templates found" %}'; }, - columns: [ - { - field: 'pk', - title: '{% trans "ID" %}', - visible: false, - switchable: false, - }, - { - field: 'name', - title: '{% trans "Name" %}', - sortable: true, - }, - { - field: 'units', - title: '{% trans "Units" %}', - sortable: true, - switchable: true, - }, - { - field: 'description', - title: '{% trans "Description" %}', - sortable: false, - switchable: true, - }, - { - formatter: function(value, row, index, field) { - var bEdit = ""; - var bDel = ""; - - var html = "
" + bEdit + bDel + "
"; - - return html; - } - } - ] -}); - -$("#new-param").click(function() { - constructForm('{% url "api-part-parameter-template-list" %}', { - fields: { - name: {}, - units: {}, - description: {}, - }, - method: 'POST', - title: '{% trans "Create Part Parameter Template" %}', - onSuccess: function() { - $("#param-table").bootstrapTable('refresh'); - }, - }); -}); - -$("#param-table").on('click', '.template-edit', function() { - var button = $(this); - var pk = button.attr('pk'); - - constructForm( - `/api/part/parameter/template/${pk}/`, - { - fields: { - name: {}, - units: {}, - description: {}, - }, - title: '{% trans "Edit Part Parameter Template" %}', - onSuccess: function() { - $("#param-table").bootstrapTable('refresh'); - }, - } - ); -}); - -$("#param-table").on('click', '.template-delete', function() { - var button = $(this); - var pk = button.attr('pk'); - - var html = ` -
- {% trans "Any parameters which reference this template will also be deleted" %} -
`; - - constructForm( - `/api/part/parameter/template/${pk}/`, - { - method: 'DELETE', - preFormContent: html, - title: '{% trans "Delete Part Parameter Template" %}', - onSuccess: function() { - $("#param-table").bootstrapTable('refresh'); - }, - } - ); -}); - -$("#import-part").click(function() { - launchModalForm("{% url 'api-part-import' %}?reset", {}); -}); - -{% plugins_enabled as plug %} -{% if plug %} -$("#install-plugin").click(function() { - installPlugin(); -}); +{% if user.is_staff %} + {% include "InvenTree/settings/settings_staff_js.html" %} + {% plugins_enabled as plug %} + {% if plug %} + $("#install-plugin").click(function() { + installPlugin(); + }); + {% endif %} {% endif %} enableSidebar('settings'); diff --git a/InvenTree/templates/InvenTree/settings/settings_js.html b/InvenTree/templates/InvenTree/settings/settings_js.html new file mode 100644 index 0000000000..9eff1e7e43 --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/settings_js.html @@ -0,0 +1,92 @@ +{% load i18n %} +{% load static %} +{% load inventree_extras %} + +// Callback for when boolean settings are edited +$('table').find('.boolean-setting').change(function() { + + var pk = $(this).attr('pk'); + var setting = $(this).attr('setting'); + var plugin = $(this).attr('plugin'); + var user = $(this).attr('user'); + var notification = $(this).attr('notification'); + + var checked = this.checked; + + // Global setting by default + var url = `/api/settings/global/${setting}/`; + + if (notification) { + url = `/api/settings/notification/${pk}/`; + } else if (plugin) { + url = `/api/plugins/settings/${plugin}/${setting}/`; + } else if (user) { + url = `/api/settings/user/${setting}/`; + } + + inventreePut( + url, + { + value: checked.toString(), + }, + { + method: 'PATCH', + success: function(data) { + }, + error: function(xhr) { + showApiError(xhr, url); + } + } + ); + +}); + +// Callback for when non-boolean settings are edited +$('table').find('.btn-edit-setting').click(function() { + var setting = $(this).attr('setting'); + var plugin = $(this).attr('plugin'); + var is_global = true; + var notification = $(this).attr('notification'); + + if ($(this).attr('user')){ + is_global = false; + } + + var title = ''; + + if (plugin != null) { + title = '{% trans "Edit Plugin Setting" %}'; + } else if (notification) { + title = '{% trans "Edit Notification Setting" %}'; + setting = $(this).attr('pk'); + } else if (is_global) { + title = '{% trans "Edit Global Setting" %}'; + } else { + title = '{% trans "Edit User Setting" %}'; + } + + editSetting(setting, { + plugin: plugin, + global: is_global, + notification: notification, + title: title, + }); +}); + +$("#edit-user").on('click', function() { + launchModalForm( + "{% url 'edit-user' %}", + { + reload: true, + } + ); +}); + +$("#edit-password").on('click', function() { + launchModalForm( + "{% url 'set-password' %}", + { + reload: true, + } + ); +}); diff --git a/InvenTree/templates/InvenTree/settings/settings_staff_js.html b/InvenTree/templates/InvenTree/settings/settings_staff_js.html new file mode 100644 index 0000000000..3e6ccd1f0e --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/settings_staff_js.html @@ -0,0 +1,395 @@ +{% load i18n %} +{% load static %} +{% load inventree_extras %} + +// Javascript for Pricing panel +onPanelLoad('pricing', function() { + $('#btn-update-rates').click(function() { + inventreePut( + '{% url "api-currency-refresh" %}', + {}, + { + method: 'POST', + success: function(data) { + location.reload(); + } + } + ); + }); + + $('#exchange-rate-table').inventreeTable({ + url: '{% url "api-currency-exchange" %}', + search: false, + showColumns: false, + sortable: true, + sidePagination: 'client', + onLoadSuccess: function(response) { + var data = response.exchange_rates || {}; + + var rows = []; + + for (var currency in data) { + rows.push({ + 'currency': currency, + 'rate': data[currency], + }); + } + + $('#exchange-rate-table').bootstrapTable('load', rows); + }, + columns: [ + { + field: 'currency', + sortable: true, + title: '{% trans "Currency" %}', + }, + { + field: 'rate', + sortable: true, + title: '{% trans "Rate" %}', + } + ] + }); +}); + +// Javascript for Part Category panel +onPanelLoad('category', function() { + $('#category-select').select2({ + placeholder: '', + width: '100%', + ajax: { + url: '{% url "api-part-category-list" %}', + dataType: 'json', + delay: 250, + cache: false, + data: function(params) { + if (!params.page) { + offset = 0; + } else { + offset = (params.page - 1) * 25; + } + + return { + search: params.term, + offset: offset, + limit: 25, + }; + }, + processResults: function(response) { + var data = []; + + var more = false; + + if ('count' in response && 'results' in response) { + // Response is paginated + data = response.results; + + // Any more data available? + if (response.next) { + more = true; + } + + } else { + // Non-paginated response + data = response; + } + + // Each 'row' must have the 'id' attribute + for (var idx = 0; idx < data.length; idx++) { + data[idx].id = data[idx].pk; + data[idx].text = data[idx].pathstring; + } + + // Ref: https://select2.org/data-sources/formats + var results = { + results: data, + pagination: { + more: more, + } + }; + + return results; + } + }, + }); + + $('#cat-param-table').inventreeTable({ + formatNoMatches: function() { return '{% trans "No category parameter templates found" %}'; }, + columns: [ + { + field: 'pk', + title: 'ID', + visible: false, + switchable: false, + }, + { + field: 'parameter_template_detail.name', + title: '{% trans "Parameter Template" %}', + sortable: 'true', + }, + { + field: 'category_detail.pathstring', + title: '{% trans "Category" %}', + }, + { + field: 'default_value', + title: '{% trans "Default Value" %}', + sortable: 'true', + formatter: function(value, row, index, field) { + var bEdit = ""; + var bDel = ""; + + var html = value + html += "
" + bEdit + bDel + "
"; + + return html; + } + } + ] + }); + + $("#cat-param-table").on('click', '.template-edit', function() { + + var category = $('#category-select').val(); + var pk = $(this).attr('pk'); + + constructForm(`/api/part/category/parameters/${pk}/`, { + fields: { + parameter_template: {}, + category: { + icon: 'fa-sitemap', + }, + default_value: {}, + }, + onSuccess: function() { + loadTemplateTable(pk); + } + }); + }); + + $("#cat-param-table").on('click', '.template-delete', function() { + + var category = $('#category-select').val(); + var pk = $(this).attr('pk'); + + var url = `/part/category/${category}/parameters/${pk}/delete/`; + + constructForm(`/api/part/category/parameters/${pk}/`, { + method: 'DELETE', + title: '{% trans "Delete Category Parameter Template" %}', + onSuccess: function() { + loadTemplateTable(pk); + } + }); + }); + + function loadTemplateTable(pk) { + + var query = {}; + + if (pk) { + query['category'] = pk; + } + + // Load the parameter table + $("#cat-param-table").bootstrapTable('refresh', { + query: query, + url: '{% url "api-part-category-parameter-list" %}', + }); + } + + + // Initially load table with *all* categories + loadTemplateTable(); + + $('body').on('change', '#category-select', function() { + var pk = $(this).val(); + loadTemplateTable(pk); + }); + + $("#new-cat-param").click(function() { + + var pk = $('#category-select').val(); + + constructForm('{% url "api-part-category-parameter-list" %}', { + title: '{% trans "Create Category Parameter Template" %}', + method: 'POST', + fields: { + parameter_template: {}, + category: { + icon: 'fa-sitemap', + value: pk, + }, + default_value: {}, + }, + onSuccess: function() { + loadTemplateTable(pk); + } + }); + }); +}); + + +// Javascript for the Part settings panel +onPanelLoad('parts', function() { + $("#param-table").inventreeTable({ + url: "{% url 'api-part-parameter-template-list' %}", + queryParams: { + ordering: 'name', + }, + formatNoMatches: function() { return '{% trans "No part parameter templates found" %}'; }, + columns: [ + { + field: 'pk', + title: '{% trans "ID" %}', + visible: false, + switchable: false, + }, + { + field: 'name', + title: '{% trans "Name" %}', + sortable: true, + }, + { + field: 'units', + title: '{% trans "Units" %}', + sortable: true, + switchable: true, + }, + { + field: 'description', + title: '{% trans "Description" %}', + sortable: false, + switchable: true, + }, + { + formatter: function(value, row, index, field) { + var bEdit = ""; + var bDel = ""; + + var html = "
" + bEdit + bDel + "
"; + + return html; + } + } + ] + }); + + $("#new-param").click(function() { + constructForm('{% url "api-part-parameter-template-list" %}', { + fields: { + name: {}, + units: {}, + description: {}, + }, + method: 'POST', + title: '{% trans "Create Part Parameter Template" %}', + refreshTable: '#param-table', + }); + }); + + $("#param-table").on('click', '.template-edit', function() { + var button = $(this); + var pk = button.attr('pk'); + + constructForm( + `/api/part/parameter/template/${pk}/`, + { + fields: { + name: {}, + units: {}, + description: {}, + }, + title: '{% trans "Edit Part Parameter Template" %}', + refreshTable: '#param-table', + } + ); + }); + + $("#param-table").on('click', '.template-delete', function() { + var button = $(this); + var pk = button.attr('pk'); + + var html = ` +
+ {% trans "Any parameters which reference this template will also be deleted" %} +
`; + + constructForm( + `/api/part/parameter/template/${pk}/`, + { + method: 'DELETE', + preFormContent: html, + title: '{% trans "Delete Part Parameter Template" %}', + refreshTable: '#param-table', + } + ); + }); + + $("#import-part").click(function() { + launchModalForm("{% url 'api-part-import' %}?reset", {}); + }); +}); + + +// Javascript for the Stocktake settings panel +onPanelLoad('stocktake', function() { + + {% if roles.stocktake.view %} + var table = '#stocktake-report-table'; + + var filters = loadTableFilters('stocktakereport'); + setupFilterList('stocktakereport', $(table), '#filter-list-stocktakereport'); + + $(table).inventreeTable({ + url: '{% url "api-part-stocktake-report-list" %}', + search: false, + queryParams: filters, + name: 'stocktakereport', + showColumns: false, + sidePagination: 'server', + sortable: true, + sortName: 'date', + sortOrder: 'desc', + columns: [ + { + field: 'report', + title: '{% trans "Report" %}', + formatter: function(value, row) { + return attachmentLink(value); + } + }, + { + field: 'part_count', + title: '{% trans "Part Count" %}', + }, + { + field: 'date', + title: '{% trans "Date" %}', + sortable: true, + formatter: function(value, row) { + let html = renderDate(value); + + if (row.user_detail) { + html += `${row.user_detail.username}`; + } + + return html; + } + }, + ] + }); + {% endif %} + + {% if roles.stocktake.add %} + $('#btn-generate-stocktake').click(function() { + generateStocktakeReport({ + part: {}, + category: {}, + location: {}, + generate_report: {}, + update_parts: {}, + }); + }); + {% endif %} +}); diff --git a/InvenTree/templates/InvenTree/settings/sidebar.html b/InvenTree/templates/InvenTree/settings/sidebar.html index 49826e0be8..3ba4aa1d47 100644 --- a/InvenTree/templates/InvenTree/settings/sidebar.html +++ b/InvenTree/templates/InvenTree/settings/sidebar.html @@ -6,18 +6,16 @@ {% trans "User Settings" as text %} {% include "sidebar_header.html" with text=text icon='fa-user-cog' %} -{% trans "Account Settings" as text %} +{% trans "Account" as text %} {% include "sidebar_item.html" with label='account' text=text icon="fa-sign-in-alt" %} -{% trans "Display Settings" as text %} +{% trans "Display" as text %} {% include "sidebar_item.html" with label='user-display' text=text icon="fa-desktop" %} {% trans "Home Page" as text %} {% include "sidebar_item.html" with label='user-home' text=text icon="fa-home" %} -{% trans "Search Settings" as text %} +{% trans "Search" as text %} {% include "sidebar_item.html" with label='user-search' text=text icon="fa-search" %} {% trans "Notifications" as text %} {% include "sidebar_item.html" with label='user-notifications' text=text icon="fa-bell" %} -{% trans "Label Printing" as text %} -{% include "sidebar_item.html" with label='user-labels' text=text icon="fa-tag" %} {% trans "Reporting" as text %} {% include "sidebar_item.html" with label='user-reports' text=text icon="fa-file-pdf" %} @@ -26,9 +24,9 @@ {% trans "Global Settings" as text %} {% include "sidebar_header.html" with text=text icon='fa-cogs' %} -{% trans "Server Configuration" as text %} +{% trans "Server" as text %} {% include "sidebar_item.html" with label='server' text=text icon="fa-server" %} -{% trans "Login Settings" as text %} +{% trans "Login" as text %} {% include "sidebar_item.html" with label='login' text=text icon="fa-fingerprint" %} {% trans "Barcode Support" as text %} {% include "sidebar_item.html" with label='barcodes' text=text icon="fa-qrcode" %} @@ -36,23 +34,26 @@ {% include "sidebar_item.html" with label='global-notifications' text=text icon="fa-bell" %} {% trans "Pricing" as text %} {% include "sidebar_item.html" with label='pricing' text=text icon="fa-dollar-sign" %} -{% trans "Label Printing" as text %} +{% trans "Labels" as text %} {% include "sidebar_item.html" with label='labels' text=text icon='fa-tag' %} {% trans "Reporting" as text %} {% include "sidebar_item.html" with label='reporting' text=text icon="fa-file-pdf" %} -{% trans "Parts" as text %} -{% include "sidebar_item.html" with label='parts' text=text icon="fa-shapes" %} {% trans "Categories" as text %} {% include "sidebar_item.html" with label='category' text=text icon="fa-sitemap" %} +{% trans "Parts" as text %} +{% include "sidebar_item.html" with label='parts' text=text icon="fa-shapes" %} {% trans "Stock" as text %} {% include "sidebar_item.html" with label='stock' text=text icon="fa-boxes" %} +{% trans "Stocktake" as text %} +{% include "sidebar_item.html" with label='stocktake' text=text icon="fa-clipboard-check" %} {% trans "Build Orders" as text %} {% include "sidebar_item.html" with label='build-order' text=text icon="fa-tools" %} {% trans "Purchase Orders" as text %} {% include "sidebar_item.html" with label='purchase-order' text=text icon="fa-shopping-cart" %} {% trans "Sales Orders" as text %} {% include "sidebar_item.html" with label='sales-order' text=text icon="fa-truck" %} - +{% trans "Return Orders" as text %} +{% include "sidebar_item.html" with label='return-order' text=text icon="fa-undo" %} {% trans "Plugin Settings" as text %} {% include "sidebar_header.html" with text=text %} diff --git a/InvenTree/templates/InvenTree/settings/stock.html b/InvenTree/templates/InvenTree/settings/stock.html index 149fdd8e2f..2826b4429d 100644 --- a/InvenTree/templates/InvenTree/settings/stock.html +++ b/InvenTree/templates/InvenTree/settings/stock.html @@ -21,6 +21,7 @@ {% include "InvenTree/settings/setting.html" with key="STOCK_ALLOW_EXPIRED_BUILD" icon="fa-tools" %} {% include "InvenTree/settings/setting.html" with key="STOCK_OWNERSHIP_CONTROL" icon="fa-users" %} {% include "InvenTree/settings/setting.html" with key="STOCK_LOCATION_DEFAULT_ICON" icon="fa-icons" %} + {% endblock %} diff --git a/InvenTree/templates/InvenTree/settings/user_labels.html b/InvenTree/templates/InvenTree/settings/user_labels.html index 93c7c0b2bc..85492a2b98 100644 --- a/InvenTree/templates/InvenTree/settings/user_labels.html +++ b/InvenTree/templates/InvenTree/settings/user_labels.html @@ -15,6 +15,7 @@ {% include "InvenTree/settings/setting.html" with key="LABEL_INLINE" icon='fa-tag' user_setting=True %} + {% include "InvenTree/settings/setting.html" with key="LABEL_DEFAULT_PRINTER" icon='fa-tag' user_setting=True %}
diff --git a/InvenTree/templates/InvenTree/settings/user_reports.html b/InvenTree/templates/InvenTree/settings/user_reporting.html similarity index 66% rename from InvenTree/templates/InvenTree/settings/user_reports.html rename to InvenTree/templates/InvenTree/settings/user_reporting.html index e4c9b166c8..44c63a5d50 100644 --- a/InvenTree/templates/InvenTree/settings/user_reports.html +++ b/InvenTree/templates/InvenTree/settings/user_reporting.html @@ -15,6 +15,8 @@ {% include "InvenTree/settings/setting.html" with key="REPORT_INLINE" icon='fa-file-pdf' user_setting=True %} + {% include "InvenTree/settings/setting.html" with key="LABEL_INLINE" icon='fa-tag' user_setting=True %} + {% include "InvenTree/settings/setting.html" with key="LABEL_DEFAULT_PRINTER" icon='fa-tag' user_setting=True %}
diff --git a/InvenTree/templates/InvenTree/settings/user_search.html b/InvenTree/templates/InvenTree/settings/user_search.html index 2cd18f9641..aab1e2338a 100644 --- a/InvenTree/templates/InvenTree/settings/user_search.html +++ b/InvenTree/templates/InvenTree/settings/user_search.html @@ -14,6 +14,9 @@
+ {% include "InvenTree/settings/setting.html" with key="SEARCH_WHOLE" user_setting=True icon='fa-spell-check' %} + {% include "InvenTree/settings/setting.html" with key="SEARCH_REGEX" user_setting=True icon='fa-code' %} + {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_RESULTS" user_setting=True icon='fa-search' %} {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_PARTS" user_setting=True icon='fa-shapes' %} {% include "InvenTree/settings/setting.html" with key="SEARCH_HIDE_INACTIVE_PARTS" user_setting=True icon='fa-eye-slash' %} {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_SUPPLIER_PARTS" user_setting=True icon='fa-building' %} @@ -28,8 +31,9 @@ {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS" user_setting=True icon='fa-eye-slash' %} {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_SALES_ORDERS" user_setting=True icon='fa-truck' %} {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS" user_setting=True icon='fa-eye-slash' %} + {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_SHOW_RETURN_ORDERS" user_setting=True icon='fa-truck' %} + {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_EXCLUDE_INACTIVE_RETURN_ORDERS" user_setting=True icon='fa-eye-slash' %} - {% include "InvenTree/settings/setting.html" with key="SEARCH_PREVIEW_RESULTS" user_setting=True icon='fa-search' %}
diff --git a/InvenTree/templates/barcode_data.html b/InvenTree/templates/barcode_data.html new file mode 100644 index 0000000000..4e95bbd9d1 --- /dev/null +++ b/InvenTree/templates/barcode_data.html @@ -0,0 +1,10 @@ +{% load i18n %} +{% if instance and instance.barcode_hash %} + + + {% trans "Barcode Identifier" %} + + {{ instance.barcode_hash}} + + +{% endif %} diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index e2dcdaa768..7dcf7ea7ba 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -5,6 +5,7 @@ {% plugins_enabled as plugins_enabled %} {% settings_value 'BARCODE_ENABLE' as barcodes %} {% settings_value 'REPORT_ENABLE_TEST_REPORT' as test_report_enabled %} +{% settings_value 'RETURNORDER_ENABLED' as return_order_enabled %} {% settings_value "REPORT_ENABLE" as report_enabled %} {% settings_value "SERVER_RESTART_REQUIRED" as server_restart_required %} {% settings_value "LABEL_ENABLE" as labels_enabled %} @@ -164,8 +165,12 @@ + + + + diff --git a/InvenTree/templates/collapse_rows.html b/InvenTree/templates/collapse_rows.html deleted file mode 100644 index f9fb454268..0000000000 --- a/InvenTree/templates/collapse_rows.html +++ /dev/null @@ -1,5 +0,0 @@ -{% load i18n %} - - diff --git a/InvenTree/templates/email/return_order_received.html b/InvenTree/templates/email/return_order_received.html new file mode 100644 index 0000000000..46ff982e90 --- /dev/null +++ b/InvenTree/templates/email/return_order_received.html @@ -0,0 +1,11 @@ +{% extends "email/email.html" %} + +{% load i18n %} +{% load inventree_extras %} + +{% block title %} +{{ message }} +{% if link %} +

{% trans "Click on the following link to view this order" %}: {{ link }}

+{% endif %} +{% endblock title %} diff --git a/InvenTree/templates/expand_rows.html b/InvenTree/templates/expand_rows.html deleted file mode 100644 index bf6ac54425..0000000000 --- a/InvenTree/templates/expand_rows.html +++ /dev/null @@ -1,5 +0,0 @@ -{% load i18n %} - - diff --git a/InvenTree/templates/js/dynamic/calendar.js b/InvenTree/templates/js/dynamic/calendar.js index 0b0ccc2915..4041f9a952 100644 --- a/InvenTree/templates/js/dynamic/calendar.js +++ b/InvenTree/templates/js/dynamic/calendar.js @@ -14,18 +14,24 @@ * Helper functions for calendar display */ +/* + * Extract the first displayed date on the calendar + */ function startDate(calendar) { - // Extract the first displayed date on the calendar return calendar.currentData.dateProfile.activeRange.start.toISOString().split('T')[0]; } +/* + * Extract the last display date on the calendar + */ function endDate(calendar) { - // Extract the last display date on the calendar return calendar.currentData.dateProfile.activeRange.end.toISOString().split('T')[0]; } +/* + * Remove all events from the calendar + */ function clearEvents(calendar) { - // Remove all events from the calendar var events = calendar.getEvents(); diff --git a/InvenTree/templates/js/translated/api.js b/InvenTree/templates/js/translated/api.js index 0bb8b2b2ea..89203eda66 100644 --- a/InvenTree/templates/js/translated/api.js +++ b/InvenTree/templates/js/translated/api.js @@ -40,8 +40,17 @@ function getCookie(name) { return cookieValue; } + +/* + * Perform a GET request to the InvenTree server + */ function inventreeGet(url, filters={}, options={}) { + if (!url) { + console.error('inventreeGet called without url'); + return; + } + // Middleware token required for data update var csrftoken = getCookie('csrftoken'); @@ -78,14 +87,20 @@ function inventreeGet(url, filters={}, options={}) { }); } + +/* Upload via AJAX using the FormData approach. + * + * Note that the following AJAX parameters are required for FormData upload + * + * processData: false + * contentType: false + */ function inventreeFormDataUpload(url, data, options={}) { - /* Upload via AJAX using the FormData approach. - * - * Note that the following AJAX parameters are required for FormData upload - * - * processData: false - * contentType: false - */ + + if (!url) { + console.error('inventreeFormDataUpload called without url'); + return; + } // CSRF cookie token var csrftoken = getCookie('csrftoken'); @@ -116,8 +131,17 @@ function inventreeFormDataUpload(url, data, options={}) { }); } + +/* + * Perform a PUT or PATCH request to the InvenTree server + */ function inventreePut(url, data={}, options={}) { + if (!url) { + console.error('inventreePut called without url'); + return; + } + var method = options.method || 'PUT'; // Middleware token required for data update @@ -164,6 +188,11 @@ function inventreePut(url, data={}, options={}) { */ function inventreeDelete(url, options={}) { + if (!url) { + console.error('inventreeDelete called without url'); + return; + } + options = options || {}; options.method = 'DELETE'; diff --git a/InvenTree/templates/js/translated/attachment.js b/InvenTree/templates/js/translated/attachment.js index 1cbd241e20..5435db98dc 100644 --- a/InvenTree/templates/js/translated/attachment.js +++ b/InvenTree/templates/js/translated/attachment.js @@ -1,14 +1,14 @@ {% load i18n %} /* globals - makeIconButton, renderLink, + wrapButtons, */ /* exported + attachmentLink, addAttachmentButtonCallbacks, - loadAttachmentTable, - reloadAttachmentTable, + loadAttachmentTable */ @@ -24,7 +24,9 @@ function addAttachmentButtonCallbacks(url, fields={}) { var file_fields = { attachment: {}, - comment: {}, + comment: { + icon: 'fa-comment', + }, }; Object.assign(file_fields, fields); @@ -32,7 +34,7 @@ function addAttachmentButtonCallbacks(url, fields={}) { constructForm(url, { fields: file_fields, method: 'POST', - onSuccess: reloadAttachmentTable, + refreshTable: '#attachment-table', title: '{% trans "Add Attachment" %}', }); }); @@ -41,8 +43,12 @@ function addAttachmentButtonCallbacks(url, fields={}) { $('#new-attachment-link').click(function() { var link_fields = { - link: {}, - comment: {}, + link: { + icon: 'fa-link', + }, + comment: { + icon: 'fa-comment', + }, }; Object.assign(link_fields, fields); @@ -50,7 +56,7 @@ function addAttachmentButtonCallbacks(url, fields={}) { constructForm(url, { fields: link_fields, method: 'POST', - onSuccess: reloadAttachmentTable, + refreshTable: '#attachment-table', title: '{% trans "Add Link" %}', }); }); @@ -72,9 +78,9 @@ function deleteAttachments(attachments, url, options={}) { var icon = ''; if (attachment.filename) { - icon = ``; + icon = makeIcon(attachmentIcon(attachment.filename), ''); } else if (attachment.link) { - icon = ``; + icon = makeIcon('fa-link', ''); } return ` @@ -116,17 +122,62 @@ function deleteAttachments(attachments, url, options={}) { items: ids, filters: options.filters, }, - onSuccess: function() { - // Refresh the table once all attachments are deleted - $('#attachment-table').bootstrapTable('refresh'); - } + refreshTable: '#attachment-table', }); } -function reloadAttachmentTable() { +/* + * Return a particular icon based on filename extension + */ +function attachmentIcon(filename) { + // Default file icon (if no better choice is found) + let icon = 'fa-file-alt'; + let fn = filename.toLowerCase(); + + // Look for some "known" file types + if (fn.endsWith('.csv')) { + icon = 'fa-file-csv'; + } else if (fn.endsWith('.pdf')) { + icon = 'fa-file-pdf'; + } else if (fn.endsWith('.xls') || fn.endsWith('.xlsx')) { + icon = 'fa-file-excel'; + } else if (fn.endsWith('.doc') || fn.endsWith('.docx')) { + icon = 'fa-file-word'; + } else if (fn.endsWith('.zip') || fn.endsWith('.7z')) { + icon = 'fa-file-archive'; + } else { + let images = ['.png', '.jpg', '.bmp', '.gif', '.svg', '.tif']; + + images.forEach(function(suffix) { + if (fn.endsWith(suffix)) { + icon = 'fa-file-image'; + } + }); + } + + return icon; +} + + +/* + * Render a link (with icon) to an internal attachment (file) + */ +function attachmentLink(filename) { + + if (!filename) { + return null; + } + + let split = filename.split('/'); + let fn = split[split.length - 1]; + + let icon = attachmentIcon(filename); + + let html = makeIcon(icon) + ` ${fn}`; + + return renderLink(html, filename, {download: true}); - $('#attachment-table').bootstrapTable('refresh'); } @@ -207,8 +258,12 @@ function loadAttachmentTable(url, options) { constructForm(`${url}${pk}/`, { fields: { - link: {}, - comment: {}, + link: { + icon: 'fa-link', + }, + comment: { + icon: 'fa-comment', + }, }, processResults: function(data, fields, opts) { // Remove the "link" field if the attachment is a file! @@ -216,7 +271,7 @@ function loadAttachmentTable(url, options) { delete opts.fields.link; } }, - onSuccess: reloadAttachmentTable, + refreshTable: '#attachment-table', title: '{% trans "Edit Attachment" %}', }); }); @@ -242,38 +297,9 @@ function loadAttachmentTable(url, options) { formatter: function(value, row) { if (row.attachment) { - var icon = 'fa-file-alt'; - - var fn = value.toLowerCase(); - - if (fn.endsWith('.csv')) { - icon = 'fa-file-csv'; - } else if (fn.endsWith('.pdf')) { - icon = 'fa-file-pdf'; - } else if (fn.endsWith('.xls') || fn.endsWith('.xlsx')) { - icon = 'fa-file-excel'; - } else if (fn.endsWith('.doc') || fn.endsWith('.docx')) { - icon = 'fa-file-word'; - } else if (fn.endsWith('.zip') || fn.endsWith('.7z')) { - icon = 'fa-file-archive'; - } else { - var images = ['.png', '.jpg', '.bmp', '.gif', '.svg', '.tif']; - - images.forEach(function(suffix) { - if (fn.endsWith(suffix)) { - icon = 'fa-file-image'; - } - }); - } - - var split = value.split('/'); - var filename = split[split.length - 1]; - - var html = ` ${filename}`; - - return renderLink(html, value, {download: true}); + return attachmentLink(row.attachment); } else if (row.link) { - var html = ` ${row.link}`; + let html = makeIcon('fa-link') + ` ${row.link}`; return renderLink(html, row.link); } else { return '-'; @@ -301,13 +327,10 @@ function loadAttachmentTable(url, options) { { field: 'actions', formatter: function(value, row) { - var html = ''; - - html = `
`; + let buttons = ''; if (permissions.change) { - html += makeIconButton( - 'fa-edit icon-blue', + buttons += makeEditButton( 'button-attachment-edit', row.pk, '{% trans "Edit attachment" %}', @@ -315,19 +338,30 @@ function loadAttachmentTable(url, options) { } if (permissions.delete) { - html += makeIconButton( - 'fa-trash-alt icon-red', + buttons += makeDeleteButton( 'button-attachment-delete', row.pk, '{% trans "Delete attachment" %}', ); } - html += `
`; - - return html; + return wrapButtons(buttons); } } ] }); + + // Enable drag-and-drop functionality + enableDragAndDrop( + '#attachment-dropzone', + url, + { + data: options.filters, + label: 'attachment', + method: 'POST', + success: function() { + reloadBootstrapTable('#attachment-table'); + } + } + ); } diff --git a/InvenTree/templates/js/translated/barcode.js b/InvenTree/templates/js/translated/barcode.js index 8e75e9efb6..71b1d26376 100644 --- a/InvenTree/templates/js/translated/barcode.js +++ b/InvenTree/templates/js/translated/barcode.js @@ -3,7 +3,6 @@ /* globals imageHoverIcon, inventreePut, - makeIconButton, modalEnable, modalSetContent, modalSetTitle, @@ -43,11 +42,11 @@ function makeBarcodeInput(placeholderText='', hintText='') {
- + ${makeIcon('fa-qrcode')}
${hintText}
@@ -132,7 +131,7 @@ function makeNotesField(options={}) {
- + ${makeIcon('fa-sticky-note')}
@@ -147,9 +146,9 @@ function makeNotesField(options={}) { */ function postBarcodeData(barcode_data, options={}) { - var modal = options.modal || '#modal-form'; + var modal = options.modal; - var url = options.url || '/api/barcode/'; + var url = options.url || '{% url "api-barcode-scan" %}'; var data = options.data || {}; @@ -167,11 +166,14 @@ function postBarcodeData(barcode_data, options={}) { switch (xhr.status || 0) { case 400: // No match for barcode, most likely - console.log(xhr); - - data = xhr.responseJSON || {}; - showBarcodeMessage(modal, data.error || '{% trans "Server error" %}'); + if (options.onError400) { + options.onError400(xhr.responseJSON, options); + } else { + console.log(xhr); + data = xhr.responseJSON || {}; + showBarcodeMessage(modal, data.error || '{% trans "Server error" %}'); + } break; default: // Any other error code means something went wrong @@ -188,7 +190,7 @@ function postBarcodeData(barcode_data, options={}) { if ('success' in response) { if (options.onScan) { - options.onScan(response); + options.onScan(response, options); } } else if ('error' in response) { showBarcodeMessage( @@ -259,7 +261,7 @@ function enableBarcodeInput(modal, enabled=true) { */ function getBarcodeData(modal) { - modal = modal || '#modal-form'; + modal = modal || createNewModal(); var el = $(modal + ' #barcode'); @@ -277,7 +279,9 @@ function getBarcodeData(modal) { */ function barcodeDialog(title, options={}) { - var modal = '#modal-form'; + var modal = createNewModal(); + + options.modal = modal; function sendBarcode() { var barcode = getBarcodeData(modal); @@ -397,26 +401,33 @@ function barcodeDialog(title, options={}) { * Perform a barcode scan, * and (potentially) redirect the browser */ -function barcodeScanDialog() { +function barcodeScanDialog(options={}) { - var modal = '#modal-form'; + let modal = options.modal || createNewModal(); + let title = options.title || '{% trans "Scan Barcode" %}'; barcodeDialog( - '{% trans "Scan Barcode" %}', + title, { onScan: function(response) { - var url = response.url; - - if (url) { - $(modal).modal('hide'); - window.location.href = url; + // Pass the response to the calling function + if (options.onScan) { + options.onScan(response); } else { - showBarcodeMessage( - modal, - '{% trans "No URL in response" %}', - 'warning' - ); + + let url = response.url; + + if (url) { + $(modal).modal('hide'); + window.location.href = url; + } else { + showBarcodeMessage( + modal, + '{% trans "No URL in response" %}', + 'warning' + ); + } } } }, @@ -429,7 +440,8 @@ function barcodeScanDialog() { */ function linkBarcodeDialog(data, options={}) { - var modal = '#modal-form'; + var modal = options.modal || createNewModal(); + options.modal = modal; barcodeDialog( options.title, @@ -462,7 +474,7 @@ function unlinkBarcode(data, options={}) { accept_text: '{% trans "Unlink" %}', accept: function() { inventreePut( - '/api/barcode/unlink/', + '{% url "api-barcode-unlink" %}', data, { method: 'POST', @@ -482,7 +494,8 @@ function unlinkBarcode(data, options={}) { */ function barcodeCheckInStockItems(location_id, options={}) { - var modal = '#modal-form'; + var modal = options.modal || createNewModal(); + options.modal = modal; // List of items we are going to checkin var items = []; @@ -521,7 +534,7 @@ function barcodeCheckInStockItems(location_id, options={}) { ${imageHoverIcon(item.part_detail.thumbnail)} ${item.part_detail.name} ${location_info} ${item.quantity} - ${makeIconButton('fa-times-circle icon-red', 'button-item-remove', item.pk, '{% trans "Remove stock item" %}')} + ${makeRemoveButton('button-item-remove', item.pk, '{% trans "Remove stock item" %}')} `; }); @@ -673,7 +686,9 @@ function barcodeCheckInStockItems(location_id, options={}) { */ function barcodeCheckInStockLocations(location_id, options={}) { - var modal = '#modal-form'; + var modal = options.modal || createNewModal(); + options.modal = modal; + var header = ''; barcodeDialog( @@ -691,7 +706,7 @@ function barcodeCheckInStockLocations(location_id, options={}) { if ('stocklocation' in response) { var pk = response.stocklocation.pk; - var url = `/api/stock/location/${pk}/`; + var url = `{% url "api-location-list" %}${pk}/`; // Move the scanned location into *this* location inventreePut( @@ -726,7 +741,8 @@ function barcodeCheckInStockLocations(location_id, options={}) { */ function scanItemsIntoLocation(item_list, options={}) { - var modal = options.modal || '#modal-form'; + var modal = options.modal || createNewModal(); + options.modal = modal; var stock_location = null; @@ -812,7 +828,7 @@ function scanItemsIntoLocation(item_list, options={}) { var pk = response.stocklocation.pk; - inventreeGet(`/api/stock/location/${pk}/`, {}, { + inventreeGet(`{% url "api-location-list" %}${pk}/`, {}, { success: function(response) { stock_location = response; diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 4e94c014b0..9cb0f71d3e 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -96,12 +96,12 @@ function constructBomUploadTable(data, options={}) { var optional = constructRowField('optional'); var note = constructRowField('note'); - var buttons = `
`; + let buttons = ''; - buttons += makeIconButton('fa-info-circle', 'button-row-data', idx, '{% trans "Display row data" %}'); - buttons += makeIconButton('fa-times icon-red', 'button-row-remove', idx, '{% trans "Remove row" %}'); + buttons += makeInfoButton('button-row-data', idx, '{% trans "Display row data" %}'); + buttons += makeRemoveButton('button-row-remove', idx, '{% trans "Remove row" %}'); - buttons += `
`; + buttons = wrapButtons(buttons); var html = ` @@ -408,6 +408,7 @@ function bomItemFields() { hidden: true, }, sub_part: { + icon: 'fa-shapes', secondary: { title: '{% trans "New Part" %}', fields: function() { @@ -424,7 +425,9 @@ function bomItemFields() { quantity: {}, reference: {}, overage: {}, - note: {}, + note: { + icon: 'fa-sticky-note', + }, allow_variants: {}, inherited: {}, consumable: {}, @@ -554,7 +557,7 @@ function bomSubstitutesDialog(bom_item_id, substitutes, options={}) { var buttons = ''; - buttons += makeIconButton('fa-times icon-red', 'button-row-remove', pk, '{% trans "Remove substitute part" %}'); + buttons += makeRemoveButton('button-row-remove', pk, '{% trans "Remove substitute part" %}'); // Render a single row var html = ` @@ -623,7 +626,7 @@ function bomSubstitutesDialog(bom_item_id, substitutes, options={}) {
`; - constructForm(`/api/bom/substitute/${pk}/`, { + constructForm(`{% url "api-bom-substitute-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Remove Substitute Part" %}', preFormContent: pre, @@ -782,9 +785,7 @@ function loadBomTable(table, options={}) { filters = loadTableFilters('bom'); } - for (var key in params) { - filters[key] = params[key]; - } + Object.assign(filters, params); setupFilterList('bom', $(table)); @@ -1016,7 +1017,7 @@ function loadBomTable(table, options={}) { cols.push({ field: 'inherited', - title: '{% trans "Inherited" %}', + title: '{% trans "Gets inherited" %}', searchable: false, formatter: function(value, row) { // This BOM item *is* inheritable, but is defined for this BOM @@ -1026,10 +1027,7 @@ function loadBomTable(table, options={}) { return yesNoLabel(true); } else { // If this BOM item is inherited from a parent part - return renderLink( - '{% trans "View BOM" %}', - `/part/${row.part}/bom/`, - ); + return yesNoLabel(true, {muted: true}); } } }); @@ -1142,7 +1140,7 @@ function loadBomTable(table, options={}) { } if (available_stock <= 0) { - text += ``; + text += makeIconBadge('fa-times-circle icon-red', '{% trans "No Stock Available" %}'); } else { var extra = ''; @@ -1160,7 +1158,10 @@ function loadBomTable(table, options={}) { } if (row.on_order && row.on_order > 0) { - text += ``; + text += makeIconBadge( + 'fa-shopping-cart', + `{% trans "On Order" %}: ${row.on_order}`, + ); } return renderLink(text, url); @@ -1242,25 +1243,24 @@ function loadBomTable(table, options={}) { var bSubs = makeIconButton('fa-exchange-alt icon-blue', 'bom-substitutes-button', row.pk, '{% trans "Edit substitute parts" %}'); - var bEdit = makeIconButton('fa-edit icon-blue', 'bom-edit-button', row.pk, '{% trans "Edit BOM Item" %}'); + var bEdit = makeEditButton('bom-edit-button', row.pk, '{% trans "Edit BOM Item" %}'); - var bDelt = makeIconButton('fa-trash-alt icon-red', 'bom-delete-button', row.pk, '{% trans "Delete BOM Item" %}'); + var bDelt = makeDeleteButton('bom-delete-button', row.pk, '{% trans "Delete BOM Item" %}'); - var html = `
`; + let buttons = ''; if (!row.validated) { - html += bValidate; + buttons += bValidate; } else { - html += bValid; + buttons += bValid; } - html += bEdit; - html += bSubs; - html += bDelt; + buttons += bEdit; + buttons += bSubs; + buttons += bDelt; - html += `
`; + return wrapButtons(buttons); - return html; } else { // Return a link to the external BOM @@ -1273,7 +1273,7 @@ function loadBomTable(table, options={}) { footerFormatter: function(data) { return ` `; } @@ -1436,7 +1436,7 @@ function loadBomTable(table, options={}) { var fields = bomItemFields(); - constructForm(`/api/bom/${pk}/`, { + constructForm(`{% url "api-bom-list" %}${pk}/`, { fields: fields, title: '{% trans "Edit BOM Item" %}', focus: 'sub_part', @@ -1508,15 +1508,7 @@ function loadUsedInTable(table, part_id, options={}) { params.part_detail = true; params.sub_part_detail = true; - var filters = {}; - - if (!options.disableFilters) { - filters = loadTableFilters('usedin'); - } - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('usedin', params); setupFilterList('usedin', $(table), options.filterTarget || '#filter-list-usedin'); diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index ef8ad46109..c9184e22fe 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -90,7 +90,7 @@ function editBuildOrder(pk) { var fields = buildFormFields(); - constructForm(`/api/build/${pk}/`, { + constructForm(`{% url "api-build-list" %}${pk}/`, { fields: fields, reload: true, title: '{% trans "Edit Build Order" %}', @@ -147,7 +147,7 @@ function newBuildOrder(options={}) { */ function duplicateBuildOrder(build_id, options={}) { - inventreeGet(`/api/build/${build_id}/`, {}, { + inventreeGet(`{% url "api-build-list" %}${build_id}/`, {}, { success: function(data) { // Clear out data we do not want to be duplicated delete data['pk']; @@ -166,7 +166,7 @@ function duplicateBuildOrder(build_id, options={}) { function cancelBuildOrder(build_id, options={}) { constructForm( - `/api/build/${build_id}/cancel/`, + `{% url "api-build-list" %}${build_id}/cancel/`, { method: 'POST', title: '{% trans "Cancel Build Order" %}', @@ -208,7 +208,7 @@ function cancelBuildOrder(build_id, options={}) { /* Construct a form to "complete" (finish) a build order */ function completeBuildOrder(build_id, options={}) { - constructForm(`/api/build/${build_id}/finish/`, { + constructForm(`{% url "api-build-list" %}${build_id}/finish/`, { fieldsFunction: function(opts) { var ctx = opts.context || {}; @@ -287,7 +287,7 @@ function createBuildOutput(build_id, options) { // Request build order information from the server inventreeGet( - `/api/build/${build_id}/`, + `{% url "api-build-list" %}${build_id}/`, {}, { success: function(build) { @@ -312,7 +312,7 @@ function createBuildOutput(build_id, options) { }; // Work out the next available serial numbers - inventreeGet(`/api/part/${build.part}/serial-numbers/`, {}, { + inventreeGet(`{% url "api-part-list" %}${build.part}/serial-numbers/`, {}, { success: function(data) { if (data.next) { fields.serial_numbers.placeholder = `{% trans "Next available serial number" %}: ${data.next}`; @@ -341,7 +341,7 @@ function createBuildOutput(build_id, options) { `; } - constructForm(`/api/build/${build_id}/create-output/`, { + constructForm(`{% url "api-build-list" %}${build_id}/create-output/`, { method: 'POST', title: '{% trans "Create Build Output" %}', confirm: true, @@ -364,7 +364,7 @@ function createBuildOutput(build_id, options) { */ function makeBuildOutputButtons(output_id, build_info, options={}) { - var html = `
`; + var html = ''; // Tracked parts? Must be individually allocated if (options.has_bom_items) { @@ -398,17 +398,13 @@ function makeBuildOutputButtons(output_id, build_info, options={}) { ); // Add a button to "delete" this build output - html += makeIconButton( - 'fa-trash-alt icon-red', + html += makeDeleteButton( 'button-output-delete', output_id, '{% trans "Delete build output" %}', ); - html += `
`; - - return html; - + return wrapButtons(html); } @@ -421,7 +417,7 @@ function makeBuildOutputButtons(output_id, build_info, options={}) { */ function unallocateStock(build_id, options={}) { - var url = `/api/build/${build_id}/unallocate/`; + var url = `{% url "api-build-list" %}${build_id}/unallocate/`; var html = `
@@ -479,11 +475,14 @@ function completeBuildOutputs(build_id, outputs, options={}) { output_html += `{% trans "Serial Number" %}: ${output.serial}`; } else { output_html += `{% trans "Quantity" %}: ${output.quantity}`; + if (output.part_detail && output.part_detail.units) { + output_html += ` ${output.part_detail.units} `; + } } var buttons = `
`; - buttons += makeIconButton('fa-times icon-red', 'button-row-remove', pk, '{% trans "Remove row" %}'); + buttons += makeRemoveButton('button-row-remove', pk, '{% trans "Remove row" %}'); buttons += '
'; @@ -526,7 +525,7 @@ function completeBuildOutputs(build_id, outputs, options={}) { `; - constructForm(`/api/build/${build_id}/complete/`, { + constructForm(`{% url "api-build-list" %}${build_id}/complete/`, { method: 'POST', preFormContent: html, fields: { @@ -536,7 +535,9 @@ function completeBuildOutputs(build_id, outputs, options={}) { structural: false, }, }, - notes: {}, + notes: { + icon: 'fa-sticky-note', + }, accept_incomplete_allocation: {}, }, confirm: true, @@ -635,11 +636,14 @@ function deleteBuildOutputs(build_id, outputs, options={}) { output_html += `{% trans "Serial Number" %}: ${output.serial}`; } else { output_html += `{% trans "Quantity" %}: ${output.quantity}`; + if (output.part_detail && output.part_detail.units) { + output_html += ` ${output.part_detail.units} `; + } } var buttons = `
`; - buttons += makeIconButton('fa-times icon-red', 'button-row-remove', pk, '{% trans "Remove row" %}'); + buttons += makeRemoveButton('button-row-remove', pk, '{% trans "Remove row" %}'); buttons += '
'; @@ -682,7 +686,7 @@ function deleteBuildOutputs(build_id, outputs, options={}) { `; - constructForm(`/api/build/${build_id}/delete-outputs/`, { + constructForm(`{% url "api-build-list" %}${build_id}/delete-outputs/`, { method: 'POST', preFormContent: html, fields: {}, @@ -760,11 +764,7 @@ function loadBuildOrderAllocationTable(table, options={}) { options.params['location_detail'] = true; options.params['stock_detail'] = true; - var filters = loadTableFilters('buildorderallocation'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } + var filters = loadTableFilters('buildorderallocation', options.params); setupFilterList('buildorderallocation', $(table)); @@ -885,7 +885,12 @@ function loadBuildOutputTable(build_info, options={}) { filters[key] = params[key]; } - setupFilterList('builditems', $(table), options.filterTarget || '#filter-list-incompletebuilditems'); + setupFilterList('builditems', $(table), options.filterTarget || '#filter-list-incompletebuilditems', { + labels: { + url: '{% url "api-stockitem-label-list" %}', + key: 'item', + } + }); function setupBuildOutputButtonCallbacks() { @@ -1209,10 +1214,10 @@ function loadBuildOutputTable(build_info, options={}) { setupBuildOutputButtonCallbacks(); }, onLoadSuccess: function(rows) { - updateAllocationData(rows); updateTestResultData(rows); }, + buttons: constructExpandCollapseButtons(table), columns: [ { title: '', @@ -1245,6 +1250,9 @@ function loadBuildOutputTable(build_info, options={}) { text = `{% trans "Serial Number" %}: ${row.serial}`; } else { text = `{% trans "Quantity" %}: ${row.quantity}`; + if (row.part_detail && row.part_detail.units) { + text += ` ${row.part_detail.units}`; + } } if (row.batch) { @@ -1396,19 +1404,6 @@ function loadBuildOutputTable(build_info, options={}) { ); }); - // Print stock item labels - $('#incomplete-output-print-label').click(function() { - var outputs = getTableData(table); - - var stock_id_values = []; - - outputs.forEach(function(output) { - stock_id_values.push(output.pk); - }); - - printStockItemLabels(stock_id_values); - }); - $('#outputs-expand').click(function() { $(table).bootstrapTable('expandAllRows'); }); @@ -1471,13 +1466,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { } // Filters - var filters = loadTableFilters('builditems'); - - var params = options.params || {}; - - for (var key in params) { - filters[key] = params[key]; - } + let filters = loadTableFilters('builditems', options.params); setupFilterList('builditems', $(table), options.filterTarget); @@ -1692,6 +1681,8 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { name: 'build-allocation', uniqueId: 'sub_part', search: options.search || false, + queryParams: filters, + original: options.params, onPostBody: function(data) { // Setup button callbacks setupCallbacks(); @@ -1702,10 +1693,11 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { detailFilter: function(index, row) { return allocatedQuantity(row) > 0; }, + buttons: constructExpandCollapseButtons(table), detailFormatter: function(index, row, element) { // Contruct an 'inner table' which shows which stock items have been allocated - var subTableId = `allocation-table-${row.pk}`; + var subTableId = `allocation-table-${outputId}-${row.pk}`; var html = `
`; @@ -1746,6 +1738,9 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { text = `{% trans "Serial Number" %}: ${serial}`; } else { text = `{% trans "Quantity" %}: ${row.quantity}`; + if (row.part_detail && row.part_detail.units) { + text += ` ${row.part_detail.units}`; + } } var pk = row.stock_item || row.pk; @@ -1781,15 +1776,13 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { var pk = row.pk; - var html = `
`; + var html = ''; - html += makeIconButton('fa-edit icon-blue', 'button-allocation-edit', pk, '{% trans "Edit stock allocation" %}'); + html += makeEditButton('button-allocation-edit', pk, '{% trans "Edit stock allocation" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-allocation-delete', pk, '{% trans "Delete stock allocation" %}'); + html += makeDeleteButton('button-allocation-delete', pk, '{% trans "Delete stock allocation" %}'); - html += `
`; - - return html; + return wrapButtons(html); } } ] @@ -1799,7 +1792,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { subTable.find('.button-allocation-edit').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/build/item/${pk}/`, { + constructForm(`{% url "api-build-item-list" %}${pk}/`, { fields: { quantity: {}, }, @@ -1811,7 +1804,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { subTable.find('.button-allocation-delete').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/build/item/${pk}/`, { + constructForm(`{% url "api-build-item-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Remove Allocation" %}', onSuccess: reloadAllocationData, @@ -1878,6 +1871,14 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { title: '{% trans "Quantity Per" %}', sortable: true, switchable: false, + formatter: function(value, row) { + var text = value; + + if (row.sub_part_detail && row.sub_part_detail.units) { + text += ` ${row.sub_part_detail.units}`; + } + return text; + } }, { field: 'available_stock', @@ -1901,6 +1902,9 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { if (available_stock > 0) { text += `${available_stock}`; + if (row.sub_part_detail && row.sub_part_detail.units) { + text += ` ${row.sub_part_detail.units}`; + } } var icons = ''; @@ -1909,15 +1913,15 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { icons += ``; } else { if (available_stock < (required - allocated)) { - icons += ``; + icons += makeIconBadge('fa-times-circle icon-red', '{% trans "Insufficient stock available" %}'); } else { - icons += ``; + icons += makeIconBadge('fa-check-circle icon-green', '{% trans "Sufficient stock available" %}'); } if (available_stock <= 0) { icons += `{% trans "No Stock Available" %}`; } else { - var extra = ''; + let extra = ''; if ((substitute_stock > 0) && (variant_stock > 0)) { extra = '{% trans "Includes variant and substitute stock" %}'; } else if (variant_stock > 0) { @@ -1927,13 +1931,15 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { } if (extra) { - icons += ``; + icons += makeIconBadge('fa-info-circle icon-blue', extra); } } } if (row.on_order && row.on_order > 0) { - icons += ``; + makeIconBadge('fa-shopping-cart', '{% trans "On Order" %}', { + content: row.on_order, + }); } return renderLink(text, url) + icons; @@ -1951,7 +1957,11 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { formatter: function(value, row) { var required = requiredQuantity(row); var allocated = row.consumable ? required : allocatedQuantity(row); - return makeProgressBar(allocated, required); + var progressbar_text = `${allocated} / ${required}`; + if (row.sub_part_detail && row.sub_part_detail.units) { + progressbar_text += ` ${row.sub_part_detail.units}`; + } + return makeProgressBar(allocated, required, {text: progressbar_text}); }, sorter: function(valA, valB, rowA, rowB) { // Custom sorting function for progress bars @@ -1997,7 +2007,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { } // Generate action buttons for this build output - var html = `
`; + let html = ''; if (allocatedQuantity(row) < requiredQuantity(row)) { if (row.sub_part_detail.assembly) { @@ -2011,17 +2021,16 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { html += makeIconButton('fa-sign-in-alt icon-green', 'button-add', row.sub_part, '{% trans "Allocate stock" %}'); } - html += makeIconButton( - 'fa-minus-circle icon-red', 'button-unallocate', row.sub_part, + html += makeRemoveButton( + 'button-unallocate', + row.sub_part, '{% trans "Unallocate stock" %}', { disabled: allocatedQuantity(row) == 0, } ); - html += '
'; - - return html; + return wrapButtons(html); } }, ] @@ -2063,7 +2072,7 @@ function allocateStockToBuild(build_id, part_id, bom_items, options={}) { if (output_id) { // Request information on the particular build output (stock item) - inventreeGet(`/api/stock/${output_id}/`, {}, { + inventreeGet(`{% url "api-stock-list" %}${output_id}/`, {}, { success: function(output) { if (output.quantity == 1 && output.serial != null) { auto_fill_filters.serial = output.serial; @@ -2082,8 +2091,7 @@ function allocateStockToBuild(build_id, part_id, bom_items, options={}) { var delete_button = `
`; - delete_button += makeIconButton( - 'fa-times icon-red', + delete_button += makeRemoveButton( 'button-row-remove', pk, '{% trans "Remove row" %}', @@ -2215,7 +2223,7 @@ function allocateStockToBuild(build_id, part_id, bom_items, options={}) { `; - constructForm(`/api/build/${build_id}/allocate/`, { + constructForm(`{% url "api-build-list" %}${build_id}/allocate/`, { method: 'POST', fields: {}, preFormContent: html, @@ -2266,6 +2274,7 @@ function allocateStockToBuild(build_id, part_id, bom_items, options={}) { render_part_detail: true, render_location_detail: true, render_pk: false, + render_available_quantity: true, auto_fill: true, auto_fill_filters: auto_fill_filters, onSelect: function(data, field, opts) { @@ -2428,7 +2437,7 @@ function autoAllocateStockToBuild(build_id, bom_items=[], options={}) { }, }; - constructForm(`/api/build/${build_id}/auto-allocate/`, { + constructForm(`{% url "api-build-list" %}${build_id}/auto-allocate/`, { method: 'POST', fields: fields, title: '{% trans "Allocate Stock Items" %}', @@ -2453,21 +2462,19 @@ function loadBuildTable(table, options) { var params = options.params || {}; - var filters = {}; - params['part_detail'] = true; - if (!options.disableFilters) { - filters = loadTableFilters('build'); - } - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('build', params); var filterTarget = options.filterTarget || null; - setupFilterList('build', table, filterTarget, {download: true}); + setupFilterList('build', table, filterTarget, { + download: true, + report: { + url: '{% url "api-build-report-list" %}', + key: 'build', + } + }); // Which display mode to use for the build table? var display_mode = inventreeLoad('build-table-display-mode', 'list'); @@ -2665,11 +2672,19 @@ function loadBuildTable(table, options) { title: '{% trans "Responsible" %}', sortable: true, formatter: function(value, row) { - if (value) { - return row.responsible_detail.name; - } else { + if (!row.responsible_detail) { return '-'; } + + var html = row.responsible_detail.name; + + if (row.responsible_detail.label == '{% trans "group" %}') { + html += ``; + } else { + html += ``; + } + + return html; } }, { diff --git a/InvenTree/templates/js/translated/company.js b/InvenTree/templates/js/translated/company.js index 16b3ae9458..f5393909d2 100644 --- a/InvenTree/templates/js/translated/company.js +++ b/InvenTree/templates/js/translated/company.js @@ -4,21 +4,26 @@ constructForm, imageHoverIcon, loadTableFilters, - makeIconButton, renderLink, setupFilterList, */ /* exported createCompany, + createContact, createManufacturerPart, createSupplierPart, + createSupplierPartPriceBreak, + deleteContacts, deleteManufacturerParts, deleteManufacturerPartParameters, deleteSupplierParts, duplicateSupplierPart, editCompany, + editContact, + editSupplierPartPriceBreak, loadCompanyTable, + loadContactTable, loadManufacturerPartTable, loadManufacturerPartParameterTable, loadSupplierPartTable, @@ -128,7 +133,7 @@ function supplierPartFields(options={}) { icon: 'fa-link', }, note: { - icon: 'fa-pencil-alt', + icon: 'fa-sticky-note', }, packaging: { icon: 'fa-box', @@ -144,7 +149,7 @@ function supplierPartFields(options={}) { } /* - * Launch a form to create a new ManufacturerPart + * Launch a form to create a new SupplierPart */ function createSupplierPart(options={}) { @@ -192,11 +197,26 @@ function createSupplierPart(options={}) { } }; + var header = ''; + if (options.part) { + var part_model = {}; + inventreeGet(`{% url "api-part-list" %}${options.part}/.*`, {}, { + async: false, + success: function(response) { + part_model = response; + } + }); + header = constructLabel('Base Part', {}); + header += renderPart(part_model); + header += `
 
`; + } + constructForm('{% url "api-supplier-part-list" %}', { fields: fields, method: 'POST', title: '{% trans "Add Supplier Part" %}', onSuccess: options.onSuccess, + header_html: header, }); } @@ -209,7 +229,7 @@ function duplicateSupplierPart(part, options={}) { var fields = options.fields || supplierPartFields(); // Retrieve information for the supplied part - inventreeGet(`/api/company/part/${part}/`, {}, { + inventreeGet(`{% url "api-supplier-part-list" %}${part}/`, {}, { success: function(data) { // Remove fields which we do not want to duplicate @@ -217,7 +237,7 @@ function duplicateSupplierPart(part, options={}) { delete data['available']; delete data['availability_updated']; - constructForm(`/api/company/part/`, { + constructForm('{% url "api-supplier-part-list" %}', { method: 'POST', fields: fields, title: '{% trans "Duplicate Supplier Part" %}', @@ -243,7 +263,7 @@ function editSupplierPart(part, options={}) { fields.part.hidden = true; } - constructForm(`/api/company/part/${part}/`, { + constructForm(`{% url "api-supplier-part-list" %}${part}/`, { fields: fields, title: options.title || '{% trans "Edit Supplier Part" %}', onSuccess: options.onSuccess @@ -262,7 +282,7 @@ function deleteSupplierParts(parts, options={}) { return; } - function renderPart(sup_part) { + function renderPartRow(sup_part) { var part = sup_part.part_detail; var thumb = thumbnailImage(part.thumbnail || part.image); var supplier = '-'; @@ -289,7 +309,7 @@ function deleteSupplierParts(parts, options={}) { var ids = []; parts.forEach(function(sup_part) { - rows += renderPart(sup_part); + rows += renderPartRow(sup_part); ids.push(sup_part.pk); }); @@ -321,6 +341,43 @@ function deleteSupplierParts(parts, options={}) { } +/* Construct set of fields for SupplierPartPriceBreak form */ +function supplierPartPriceBreakFields(options={}) { + let fields = { + part: { + hidden: true, + }, + quantity: {}, + price: { + icon: 'fa-dollar-sign', + }, + price_currency: { + icon: 'fa-coins', + }, + }; + + return fields; +} + +/* Create a new SupplierPartPriceBreak instance */ +function createSupplierPartPriceBreak(part_id, options={}) { + + let fields = supplierPartPriceBreakFields(options); + + fields.part.value = part_id; + + constructForm('{% url "api-part-supplier-price-list" %}', { + fields: fields, + method: 'POST', + fields: fields, + title: '{% trans "Add Price Break" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + // Returns a default form-set for creating / editing a Company object function companyFormFields() { @@ -389,24 +446,18 @@ function createCompany(options={}) { } +/* + * Load company listing data into specified table. + * + * Args: + * - table: Table element on the page + * - url: Base URL for the API query + * - options: table options. + */ function loadCompanyTable(table, url, options={}) { - /* - * Load company listing data into specified table. - * - * Args: - * - table: Table element on the page - * - url: Base URL for the API query - * - options: table options. - */ - // Query parameters - var params = options.params || {}; - - var filters = loadTableFilters('company'); - - for (var key in params) { - filters[key] = params[key]; - } + let params = options.params || {}; + let filters = loadTableFilters('company', params); setupFilterList('company', $(table)); @@ -493,6 +544,230 @@ function loadCompanyTable(table, url, options={}) { } +/* + * Construct a set of form fields for the Contact model + */ +function contactFields(options={}) { + + let fields = { + company: { + icon: 'fa-building', + }, + name: { + icon: 'fa-user', + }, + phone: { + icon: 'fa-phone' + }, + email: { + icon: 'fa-at', + }, + role: { + icon: 'fa-user-tag', + }, + }; + + if (options.company) { + fields.company.value = options.company; + } + + return fields; +} + + +/* + * Launches a form to create a new Contact + */ +function createContact(options={}) { + let fields = options.fields || contactFields(options); + + constructForm('{% url "api-contact-list" %}', { + method: 'POST', + fields: fields, + title: '{% trans "Create New Contact" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Launches a form to edit an existing Contact + */ +function editContact(pk, options={}) { + let fields = options.fields || contactFields(options); + + constructForm(`{% url "api-contact-list" %}${pk}/`, { + fields: fields, + title: '{% trans "Edit Contact" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Launches a form to delete one (or more) contacts + */ +function deleteContacts(contacts, options={}) { + + if (contacts.length == 0) { + return; + } + + function renderContact(contact) { + return ` + + ${contact.name} + ${contact.email} + ${contact.role} + `; + } + + let rows = ''; + let ids = []; + + contacts.forEach(function(contact) { + rows += renderContact(contact); + ids.push(contact.pk); + }); + + let html = ` +
+ {% trans "All selected contacts will be deleted" %} +
+ + + + + + + ${rows} +
{% trans "Name" %}{% trans "Email" %}{% trans "Role" %}
`; + + constructForm('{% url "api-contact-list" %}', { + method: 'DELETE', + multi_delete: true, + title: '{% trans "Delete Contacts" %}', + preFormContent: html, + form_data: { + items: ids, + }, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Load table listing company contacts + */ +function loadContactTable(table, options={}) { + + var params = options.params || {}; + + var filters = loadTableFilters('contact', params); + + setupFilterList('contact', $(table), '#filter-list-contacts'); + + $(table).inventreeTable({ + url: '{% url "api-contact-list" %}', + queryParams: filters, + original: params, + idField: 'pk', + uniqueId: 'pk', + sidePagination: 'server', + formatNoMatches: function() { + return '{% trans "No contacts found" %}'; + }, + showColumns: true, + name: 'contacts', + columns: [ + { + field: 'name', + title: '{% trans "Name" %}', + sortable: true, + switchable: false, + }, + { + field: 'phone', + title: '{% trans "Phone Number" %}', + sortable: false, + switchable: true, + }, + { + field: 'email', + title: '{% trans "Email Address" %}', + sortable: false, + switchable: true, + }, + { + field: 'role', + title: '{% trans "Role" %}', + sortable: false, + switchable: false, + }, + { + field: 'actions', + title: '', + sortable: false, + switchable: false, + visible: options.allow_edit || options.allow_delete, + formatter: function(value, row) { + var pk = row.pk; + + let html = ''; + + if (options.allow_edit) { + html += makeEditButton('btn-contact-edit', pk, '{% trans "Edit Contact" %}'); + } + + if (options.allow_delete) { + html += makeDeleteButton('btn-contact-delete', pk, '{% trans "Delete Contact" %}'); + } + + return wrapButtons(html); + } + } + ], + onPostBody: function() { + // Edit button callback + if (options.allow_edit) { + $(table).find('.btn-contact-edit').click(function() { + var pk = $(this).attr('pk'); + editContact(pk, { + onSuccess: function() { + $(table).bootstrapTable('refresh'); + } + }); + }); + } + + // Delete button callback + if (options.allow_delete) { + $(table).find('.btn-contact-delete').click(function() { + var pk = $(this).attr('pk'); + + var row = $(table).bootstrapTable('getRowByUniqueId', pk); + + if (row && row.pk) { + + deleteContacts([row], { + onSuccess: function() { + $(table).bootstrapTable('refresh'); + } + }); + } + }); + } + } + }); +} + + /* Delete one or more ManufacturerPart objects from the database. * - User will be provided with a modal form, showing all the parts to be deleted. * - Delete operations are performed sequentialy, not simultaneously @@ -503,7 +778,7 @@ function deleteManufacturerParts(selections, options={}) { return; } - function renderPart(man_part, opts={}) { + function renderPartRow(man_part, opts={}) { var part = man_part.part_detail; var thumb = thumbnailImage(part.thumbnail || part.image); @@ -519,7 +794,7 @@ function deleteManufacturerParts(selections, options={}) { var ids = []; selections.forEach(function(man_part) { - rows += renderPart(man_part); + rows += renderPartRow(man_part); ids.push(man_part.pk); }); @@ -599,21 +874,16 @@ function deleteManufacturerPartParameters(selections, options={}) { } +/* + * Load manufacturer part table + */ function loadManufacturerPartTable(table, url, options) { - /* - * Load manufacturer part table - * - */ // Query parameters var params = options.params || {}; // Load filters - var filters = loadTableFilters('manufacturer-part'); - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('manufacturer-part', params); var filterTarget = options.filterTarget || '#filter-list-manufacturer-part'; @@ -649,11 +919,11 @@ function loadManufacturerPartTable(table, url, options) { var html = imageHoverIcon(row.part_detail.thumbnail) + renderLink(value, url); if (row.part_detail.is_template) { - html += ``; + html += makeIconBadge('fa-clone', '{% trans "Template part" %}'); } if (row.part_detail.assembly) { - html += ``; + html += makeIconBadge('fa-tools', '{% trans "Assembled part" %}'); } if (!row.part_detail.active) { @@ -710,16 +980,13 @@ function loadManufacturerPartTable(table, url, options) { sortable: false, switchable: false, formatter: function(value, row) { - var pk = row.pk; + let pk = row.pk; + let html = ''; - var html = `
`; + html += makeEditButton('button-manufacturer-part-edit', pk, '{% trans "Edit manufacturer part" %}'); + html += makeDeleteButton('button-manufacturer-part-delete', pk, '{% trans "Delete manufacturer part" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-manufacturer-part-edit', pk, '{% trans "Edit manufacturer part" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-manufacturer-part-delete', pk, '{% trans "Delete manufacturer part" %}'); - - html += '
'; - - return html; + return wrapButtons(html); } } ], @@ -756,20 +1023,15 @@ function loadManufacturerPartTable(table, url, options) { } +/* + * Load table of ManufacturerPartParameter objects + */ function loadManufacturerPartParameterTable(table, url, options) { - /* - * Load table of ManufacturerPartParameter objects - */ var params = options.params || {}; // Load filters - var filters = loadTableFilters('manufacturer-part-parameters'); - - // Overwrite explicit parameters - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('manufacturer-part-parameters', params); setupFilterList('manufacturer-part-parameters', $(table)); @@ -813,17 +1075,13 @@ function loadManufacturerPartParameterTable(table, url, options) { switchable: false, sortable: false, formatter: function(value, row) { + let pk = row.pk; + let html = ''; - var pk = row.pk; + html += makeEditButton('button-parameter-edit', pk, '{% trans "Edit parameter" %}'); + html += makeDeleteButton('button-parameter-delete', pk, '{% trans "Delete parameter" %}'); - var html = `
`; - - html += makeIconButton('fa-edit icon-blue', 'button-parameter-edit', pk, '{% trans "Edit parameter" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-parameter-delete', pk, '{% trans "Delete parameter" %}'); - - html += `
`; - - return html; + return wrapButtons(html); } } ], @@ -832,27 +1090,23 @@ function loadManufacturerPartParameterTable(table, url, options) { $(table).find('.button-parameter-edit').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/company/part/manufacturer/parameter/${pk}/`, { + constructForm(`{% url "api-manufacturer-part-parameter-list" %}${pk}/`, { fields: { name: {}, value: {}, units: {}, }, title: '{% trans "Edit Parameter" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); $(table).find('.button-parameter-delete').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/company/part/manufacturer/parameter/${pk}/`, { + constructForm(`{% url "api-manufacturer-part-parameter-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Delete Parameter" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); } @@ -860,21 +1114,16 @@ function loadManufacturerPartParameterTable(table, url, options) { } +/* + * Load supplier part table + */ function loadSupplierPartTable(table, url, options) { - /* - * Load supplier part table - * - */ // Query parameters var params = options.params || {}; // Load filters - var filters = loadTableFilters('supplier-part'); - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('supplier-part', params); setupFilterList('supplier-part', $(table)); @@ -910,11 +1159,11 @@ function loadSupplierPartTable(table, url, options) { var html = imageHoverIcon(row.part_detail.thumbnail) + renderLink(value, url); if (row.part_detail.is_template) { - html += ``; + html += makeIconBadge('fa-clone', '{% trans "Template part" %}'); } if (row.part_detail.assembly) { - html += ``; + html += makeIconBadge('fa-tools', '{% trans "Assembled part" %}'); } if (!row.part_detail.active) { @@ -1034,9 +1283,13 @@ function loadSupplierPartTable(table, url, options) { sortable: true, formatter: function(value, row) { if (row.availability_updated) { - var html = formatDecimal(value); - var date = renderDate(row.availability_updated, {showTime: true}); - html += ``; + let html = formatDecimal(value); + let date = renderDate(row.availability_updated, {showTime: true}); + + html += makeIconBadge( + 'fa-info-circle', + `{% trans "Last Updated" %}: ${date}` + ); return html; } else { return '-'; @@ -1054,16 +1307,13 @@ function loadSupplierPartTable(table, url, options) { sortable: false, switchable: false, formatter: function(value, row) { - var pk = row.pk; + let pk = row.pk; + let html = ''; - var html = `
`; + html += makeEditButton('button-supplier-part-edit', pk, '{% trans "Edit supplier part" %}'); + html += makeDeleteButton('button-supplier-part-delete', pk, '{% trans "Delete supplier part" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-supplier-part-edit', pk, '{% trans "Edit supplier part" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-supplier-part-delete', pk, '{% trans "Delete supplier part" %}'); - - html += '
'; - - return html; + return wrapButtons(html); } } ], @@ -1112,28 +1362,20 @@ function loadSupplierPriceBreakTable(options={}) { table.find('.button-price-break-delete').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/company/price-break/${pk}/`, { + constructForm(`{% url "api-part-supplier-price-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Delete Price Break" %}', - onSuccess: function() { - table.bootstrapTable('refresh'); - }, + refreshTable: table, }); }); table.find('.button-price-break-edit').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/company/price-break/${pk}/`, { - fields: { - quantity: {}, - price: {}, - price_currency: {}, - }, + constructForm(`{% url "api-part-supplier-price-list" %}${pk}/`, { + fields: supplierPartPriceBreakFields(), title: '{% trans "Edit Price Break" %}', - onSuccess: function() { - table.bootstrapTable('refresh'); - } + refreshTable: table, }); }); } @@ -1181,10 +1423,12 @@ function loadSupplierPriceBreakTable(options={}) { formatter: function(value, row) { var html = renderDate(value); - html += `
`; - html += makeIconButton('fa-edit icon-blue', 'button-price-break-edit', row.pk, '{% trans "Edit price break" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-price-break-delete', row.pk, '{% trans "Delete price break" %}'); - html += `
`; + let buttons = ''; + + buttons += makeEditButton('button-price-break-edit', row.pk, '{% trans "Edit price break" %}'); + buttons += makeDeleteButton('button-price-break-delete', row.pk, '{% trans "Delete price break" %}'); + + html += wrapButtons(buttons); return html; } diff --git a/InvenTree/templates/js/translated/filters.js b/InvenTree/templates/js/translated/filters.js index 78dd67043d..a889902543 100644 --- a/InvenTree/templates/js/translated/filters.js +++ b/InvenTree/templates/js/translated/filters.js @@ -43,7 +43,7 @@ function defaultFilters() { * @param tableKey - String key for the particular table * @param defaults - Default filters for this table e.g. 'cascade=1&location=5' */ -function loadTableFilters(tableKey) { +function loadTableFilters(tableKey, query={}) { var lookup = 'table-filters-' + tableKey.toLowerCase(); @@ -67,6 +67,9 @@ function loadTableFilters(tableKey) { } }); + // Override configurable filters with hard-coded query + Object.assign(filters, query); + return filters; } @@ -241,9 +244,14 @@ function generateFilterInput(tableKey, filterKey) { // Return a 'select' input with the available values html = ``; @@ -253,6 +261,18 @@ function generateFilterInput(tableKey, filterKey) { } +/* + * Helper function to make a 'filter' style button + */ +function makeFilterButton(options={}) { + + return ` + `; +} + + /** * Configure a filter list for a given table * @@ -285,21 +305,58 @@ function setupFilterList(tableKey, table, target, options={}) { // One blank slate, please element.empty(); + // Construct a set of buttons var buttons = ''; + // Add 'print reports' button + if (options.report && global_settings.REPORT_ENABLE) { + buttons += makeFilterButton({ + id: `print-report-${tableKey}`, + title: options.report.title || '{% trans "Print reports for selected items" %}', + icon: 'fa-print', + }); + } + + // Add 'print labels' button + if (options.labels && global_settings.LABEL_ENABLE) { + buttons += makeFilterButton({ + id: `print-labels-${tableKey}`, + title: options.labels.title || '{% trans "Print labels for selected items" %}', + icon: 'fa-tag', + }); + } + // Add download button if (options.download) { - buttons += ``; + buttons += makeFilterButton({ + id: `download-${tableKey}`, + title: '{% trans "Download table data" %}', + icon: 'fa-download', + }); } - buttons += ``; + buttons += makeFilterButton({ + id: `reload-${tableKey}`, + title: '{% trans "Reload table data" %}', + icon: 'fa-redo-alt', + }); // If there are filters defined for this table, add more buttons if (!jQuery.isEmptyObject(getAvailableTableFilters(tableKey))) { - buttons += ``; + + buttons += makeFilterButton({ + id: add, + title: '{% trans "Add new filter" %}', + icon: 'fa-filter', + }); + if (Object.keys(filters).length > 0) { - buttons += ``; + buttons += makeFilterButton({ + id: clear, + title: '{% trans "Clear all filters" %}', + icon: 'fa-backspace icon-red', + }); } } @@ -326,6 +383,42 @@ function setupFilterList(tableKey, table, target, options={}) { element.append(filter_tag); } + // Callback for printing reports + if (options.report && global_settings.REPORT_ENABLE) { + element.find(`#print-report-${tableKey}`).click(function() { + let data = getTableData(table); + let items = []; + + data.forEach(function(row) { + items.push(row.pk); + }); + + printReports({ + items: items, + url: options.report.url, + key: options.report.key + }); + }); + } + + // Callback for printing labels + if (options.labels && global_settings.LABEL_ENABLE) { + element.find(`#print-labels-${tableKey}`).click(function() { + let data = getTableData(table); + let items = []; + + data.forEach(function(row) { + items.push(row.pk); + }); + + printLabels({ + items: items, + url: options.labels.url, + key: options.labels.key, + }); + }); + } + // Callback for reloading the table element.find(`#reload-${tableKey}`).click(function() { reloadTableFilters(table); @@ -450,10 +543,17 @@ function getFilterOptionValue(tableKey, filterKey, valueKey) { // Iterate through a list of options if ('options' in filter) { - for (var key in filter.options) { + // options can be an object or a function, in which case we need to run + // this callback first + if (filter.options instanceof Function) { + filter.options = filter.options(); + } - if (key == valueKey) { - return filter.options[key].value; + for (var name in filter.options) { + let option = filter.options[name]; + + if (option.key == valueKey) { + return option.value; } } diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index c7fc9452d1..d656ccc77b 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -9,18 +9,7 @@ global_settings, modalEnable, modalShowSubmitButton, - renderBuild, - renderCompany, - renderGroup, - renderManufacturerPart, - renderOwner, - renderPart, - renderPartCategory, - renderPartParameterTemplate, - renderStockItem, - renderStockLocation, - renderSupplierPart, - renderUser, + getModelRenderer, showAlertOrCache, showApiError, */ @@ -319,7 +308,7 @@ function constructDeleteForm(fields, options) { * - confirmText: Text for confirm button (default = "Confirm") * */ -function constructForm(url, options) { +function constructForm(url, options={}) { // An "empty" form will be defined locally if (url == null) { @@ -487,6 +476,11 @@ function constructFormBody(fields, options) { var html = ''; + // add additional content as a header on top (provided as html by the caller) + if (options.header_html) { + html += options.header_html; + } + // Client must provide set of fields to be displayed, // otherwise *all* fields will be displayed var displayed_fields = options.fields || fields; @@ -974,6 +968,10 @@ function updateFieldValue(name, value, field, options) { } switch (field.type) { + case 'decimal': + // Strip trailing zeros + el.val(formatDecimal(value)); + break; case 'boolean': if (value == true || value.toString().toLowerCase() == 'true') { el.prop('checked'); @@ -1171,6 +1169,11 @@ function handleFormSuccess(response, options) { $(options.modal).modal('hide'); } + // Refresh a table + if (options.refreshTable) { + reloadBootstrapTable(options.refreshTable); + } + if (options.onSuccess) { // Callback function options.onSuccess(response, options); @@ -1877,7 +1880,7 @@ function initializeRelatedField(field, fields, options={}) { // Custom formatting for the search results if (field.model) { // If the 'model' is specified, hand it off to the custom model render - var html = renderModelData(name, field.model, data, field, options); + var html = renderModelData(name, field.model, data, field); return $(html); } else { // Return a simple renderering @@ -1907,7 +1910,7 @@ function initializeRelatedField(field, fields, options={}) { // Custom formatting for selected item if (field.model) { // If the 'model' is specified, hand it off to the custom model render - var html = renderModelData(name, field.model, data, field, options); + var html = renderModelData(name, field.model, data, field); return $(html); } else { // Return a simple renderering @@ -2018,71 +2021,18 @@ function searching() { * - parameters: The field definition (OPTIONS) request * - options: Other options provided at time of modal creation by the client */ -function renderModelData(name, model, data, parameters, options) { +function renderModelData(name, model, data, parameters) { if (!data) { return parameters.placeholder || ''; } - // TODO: Implement this function for various models - var html = null; - var renderer = null; - - // Find a custom renderer - switch (model) { - case 'company': - renderer = renderCompany; - break; - case 'stockitem': - renderer = renderStockItem; - break; - case 'stocklocation': - renderer = renderStockLocation; - break; - case 'part': - renderer = renderPart; - break; - case 'partcategory': - renderer = renderPartCategory; - break; - case 'partparametertemplate': - renderer = renderPartParameterTemplate; - break; - case 'purchaseorder': - renderer = renderPurchaseOrder; - break; - case 'salesorder': - renderer = renderSalesOrder; - break; - case 'salesordershipment': - renderer = renderSalesOrderShipment; - break; - case 'manufacturerpart': - renderer = renderManufacturerPart; - break; - case 'supplierpart': - renderer = renderSupplierPart; - break; - case 'build': - renderer = renderBuild; - break; - case 'owner': - renderer = renderOwner; - break; - case 'user': - renderer = renderUser; - break; - case 'group': - renderer = renderGroup; - break; - default: - break; - } + var renderer = getModelRenderer(model); if (renderer != null) { - html = renderer(name, data, parameters, options); + html = renderer(data, parameters); } if (html != null) { diff --git a/InvenTree/templates/js/translated/helpers.js b/InvenTree/templates/js/translated/helpers.js index 4f18f53093..04b50d5cbd 100644 --- a/InvenTree/templates/js/translated/helpers.js +++ b/InvenTree/templates/js/translated/helpers.js @@ -6,9 +6,14 @@ editButton, formatDecimal, imageHoverIcon, + makeCopyButton, + makeDeleteButton, + makeEditButton, makeIconBadge, makeIconButton, + makeInfoButton, makeProgressBar, + makeRemoveButton, renderLink, sanitizeInputString, select2Thumbnail, @@ -17,14 +22,31 @@ thumbnailImage yesNoLabel, withTitle, + wrapButtons, */ -function yesNoLabel(value) { +/* exported + makeIcon, +*/ + + +function yesNoLabel(value, options={}) { + var text = ''; + var color = ''; + if (value) { - return `{% trans "YES" %}`; + text = '{% trans "YES" %}'; + color = 'bg-success'; } else { - return `{% trans "NO" %}`; + text = '{% trans "NO" %}'; + color = 'bg-warning'; } + + if (options.muted) { + color = 'bg-secondary'; + } + + return `${text}`; } @@ -47,7 +69,7 @@ function deleteButton(url, text='{% trans "Delete" %}') { function shortenString(input_string, options={}) { // Maximum length can be provided via options argument, or via a user-configurable setting - var max_length = options.max_length || user_settings.TABLE_STRING_MAX_LENGTH; + var max_length = options.max_length || user_settings.TABLE_STRING_MAX_LENGTH || 100; if (!max_length || !input_string) { return input_string; @@ -136,17 +158,47 @@ function select2Thumbnail(image) { } +/* + * Construct a simple FontAwesome icon span + */ +function makeIcon(icon, title='', options={}) { + + let classes = options.classes || 'fas'; + + return ``; +} + + /* * Construct an 'icon badge' which floats to the right of an object */ -function makeIconBadge(icon, title) { +function makeIconBadge(icon, title='', options={}) { - var html = ``; + let content = options.content || ''; + + let html = ` + + ${content} + `; return html; } +/* + * Wrap list of buttons in a button group
+ */ +function wrapButtons(buttons) { + + if (!buttons) { + // Return empty element if no buttons are provided + return ''; + } + + return `
${buttons}
`; +} + + /* * Construct an 'icon button' using the fontawesome set */ @@ -158,7 +210,13 @@ function makeIconButton(icon, cls, pk, title, options={}) { var html = ''; - var extraProps = ''; + var extraProps = options.extra || ''; + + var style = ''; + + if (options.hidden) { + style += `display: none;`; + } if (options.disabled) { extraProps += `disabled='true' `; @@ -168,7 +226,7 @@ function makeIconButton(icon, cls, pk, title, options={}) { extraProps += `data-bs-toggle='collapse' href='#${options.collapseTarget}'`; } - html += ``; @@ -176,6 +234,46 @@ function makeIconButton(icon, cls, pk, title, options={}) { } +/* + * Helper function for making a common 'info' button + */ +function makeInfoButton(cls, pk, title, options={}) { + return makeIconButton('fa-info-circle', cls, pk, title, options); +} + + +/* + * Helper function for making a common 'edit' button + */ +function makeEditButton(cls, pk, title, options={}) { + return makeIconButton('fa-edit icon-blue', cls, pk, title, options); +} + + +/* + * Helper function for making a common 'copy' button + */ +function makeCopyButton(cls, pk, title, options={}) { + return makeIconButton('fa-clone', cls, pk, title, options); +} + + +/* + * Helper function for making a common 'delete' button + */ +function makeDeleteButton(cls, pk, title, options={}) { + return makeIconButton('fa-trash-alt icon-red', cls, pk, title, options); +} + + +/* + * Helper function for making a common 'remove' button + */ +function makeRemoveButton(cls, pk, title, options={}) { + return makeIconButton('fa-times-circle icon-red', cls, pk, title, options); +} + + /* * Render a progessbar! * @@ -274,6 +372,10 @@ function renderLink(text, url, options={}) { extras += ` title="${url}"`; } + if (options.download) { + extras += ` download`; + } + return `${text}`; } diff --git a/InvenTree/templates/js/translated/label.js b/InvenTree/templates/js/translated/label.js index 18cd1605d0..f714e0f861 100644 --- a/InvenTree/templates/js/translated/label.js +++ b/InvenTree/templates/js/translated/label.js @@ -16,218 +16,16 @@ /* exported printLabels, - printPartLabels, - printStockItemLabels, - printStockLocationLabels, */ - -/* - * Perform the "print" action. +/** + * Present the user with the available labels, + * and allow them to select which label to print. + * + * The intent is that the available labels have been requested + * (via AJAX) from the server. */ -function printLabels(url, plugin=null) { - - if (plugin) { - // If a plugin is provided, do not redirect the browser. - // Instead, perform an API request and display a message - - url = url + `plugin=${plugin}`; - - inventreeGet(url, {}, { - success: function(response) { - showMessage( - '{% trans "Labels sent to printer" %}', - { - style: 'success', - } - ); - } - }); - } else { - window.open(url); - } - -} - - -function printStockItemLabels(items) { - /** - * Print stock item labels for the given stock items - */ - - if (items.length == 0) { - showAlertDialog( - '{% trans "Select Stock Items" %}', - '{% trans "Stock item(s) must be selected before printing labels" %}' - ); - - return; - } - - // Request available labels from the server - inventreeGet( - '{% url "api-stockitem-label-list" %}', - { - enabled: true, - items: items, - }, - { - success: function(response) { - - if (response.length == 0) { - showAlertDialog( - '{% trans "No Labels Found" %}', - '{% trans "No labels found which match selected stock item(s)" %}', - ); - - return; - } - - // Select label to print - selectLabel( - response, - items, - { - success: function(data) { - - var pk = data.label; - - var href = `/api/label/stock/${pk}/print/?`; - - items.forEach(function(item) { - href += `items[]=${item}&`; - }); - - printLabels(href, data.plugin); - } - } - ); - } - } - ); -} - - -function printStockLocationLabels(locations) { - - if (locations.length == 0) { - showAlertDialog( - '{% trans "Select Stock Locations" %}', - '{% trans "Stock location(s) must be selected before printing labels" %}' - ); - - return; - } - - // Request available labels from the server - inventreeGet( - '{% url "api-stocklocation-label-list" %}', - { - enabled: true, - locations: locations, - }, - { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Labels Found" %}', - '{% trans "No labels found which match selected stock location(s)" %}', - ); - - return; - } - - // Select label to print - selectLabel( - response, - locations, - { - success: function(data) { - - var pk = data.label; - - var href = `/api/label/location/${pk}/print/?`; - - locations.forEach(function(location) { - href += `locations[]=${location}&`; - }); - - printLabels(href, data.plugin); - } - } - ); - } - } - ); -} - - -function printPartLabels(parts) { - /** - * Print labels for the provided parts - */ - - if (parts.length == 0) { - showAlertDialog( - '{% trans "Select Parts" %}', - '{% trans "Part(s) must be selected before printing labels" %}', - ); - - return; - } - - // Request available labels from the server - inventreeGet( - '{% url "api-part-label-list" %}', - { - enabled: true, - parts: parts, - }, - { - success: function(response) { - - if (response.length == 0) { - showAlertDialog( - '{% trans "No Labels Found" %}', - '{% trans "No labels found which match the selected part(s)" %}', - ); - - return; - } - - // Select label to print - selectLabel( - response, - parts, - { - success: function(data) { - - var pk = data.label; - - var href = `/api/label/part/${pk}/print/?`; - - parts.forEach(function(part) { - href += `parts[]=${part}&`; - }); - - printLabels(href, data.plugin); - } - } - ); - } - } - ); -} - - function selectLabel(labels, items, options={}) { - /** - * Present the user with the available labels, - * and allow them to select which label to print. - * - * The intent is that the available labels have been requested - * (via AJAX) from the server. - */ // Array of available plugins for label printing var plugins = []; @@ -262,7 +60,11 @@ function selectLabel(labels, items, options={}) { `; plugins.forEach(function(plugin) { - plugin_selection += ``; + var selected = ''; + if (user_settings['LABEL_DEFAULT_PRINTER'] == plugin.key) { + selected = ' selected'; + } + plugin_selection += ``; }); plugin_selection += ` @@ -343,3 +145,71 @@ function selectLabel(labels, items, options={}) { } }); } + + +/* + * Print label(s) for the selected items: + * + * - Retrieve a list of matching label templates from the server + * - Present the available templates to the user (if more than one available) + * - Request printed labels + * + * Required options: + * - url: The list URL for the particular template type + * - items: The list of items to be printed + * - key: The key to use in the query parameters + */ +function printLabels(options) { + + if (!options.items || options.items.length == 0) { + showAlertDialog( + '{% trans "Select Items" %}', + '{% trans "No items selected for printing" %}', + ); + return; + } + + let params = { + enabled: true, + }; + + params[options.key] = options.items; + + // Request a list of available label templates + inventreeGet(options.url, params, { + success: function(response) { + if (response.length == 0) { + showAlertDialog( + '{% trans "No Labels Found" %}', + '{% trans "No label templates found which match the selected items" %}', + ); + return; + } + + // Select label template for printing + selectLabel(response, options.items, { + success: function(data) { + let href = `${options.url}${data.label}/print/?`; + + options.items.forEach(function(item) { + href += `${options.key}=${item}&`; + }); + + if (data.plugin) { + href += `plugin=${data.plugin}`; + + inventreeGet(href, {}, { + success: function(response) { + showMessage('{% trans "Labels sent to printer" %}', { + style: 'success', + }); + } + }); + } else { + window.open(href); + } + } + }); + } + }); +} diff --git a/InvenTree/templates/js/translated/modals.js b/InvenTree/templates/js/translated/modals.js index f2639f580b..01eb244a96 100644 --- a/InvenTree/templates/js/translated/modals.js +++ b/InvenTree/templates/js/translated/modals.js @@ -15,6 +15,7 @@ getFieldValue, reloadFieldOptions, showModalImage, + showQRDialog, showQuestionDialog, showModalSpinner, */ @@ -590,19 +591,18 @@ function renderErrorMessage(xhr) { } +/* Display a modal dialog message box. +* +* title - Title text +* content - HTML content of the dialog window +*/ function showAlertDialog(title, content, options={}) { - /* Display a modal dialog message box. - * - * title - Title text - * content - HTML content of the dialog window - */ if (options.alert_style) { // Wrap content in an alert block content = `
${content}
`; } - var modal = createNewModal({ title: title, closeText: '{% trans "Close" %}', @@ -612,6 +612,36 @@ function showAlertDialog(title, content, options={}) { modalSetContent(modal, content); $(modal).modal('show'); + + if (options.after_render) { + options.after_render(modal); + } +} + + +/* + * Display a simple modal window with a QR code + */ +function showQRDialog(title, data, options={}) { + + let content = ` +
+
+
`; + + options.after_render = function(modal) { + let qrcode = new QRCode('qrcode', { + width: 256, + height: 256, + }); + qrcode.makeCode(data); + }; + + showAlertDialog( + title, + content, + options + ); } diff --git a/InvenTree/templates/js/translated/model_renderers.js b/InvenTree/templates/js/translated/model_renderers.js index 4c4e70122f..f69c0ac531 100644 --- a/InvenTree/templates/js/translated/model_renderers.js +++ b/InvenTree/templates/js/translated/model_renderers.js @@ -3,16 +3,20 @@ /* globals blankImage, select2Thumbnail + shortenString */ /* exported + getModelRenderer, renderBuild, renderCompany, + renderContact, renderGroup, renderManufacturerPart, renderOwner, renderPart, renderPartCategory, + renderReturnOrder, renderStockItem, renderStockLocation, renderSupplierPart, @@ -34,92 +38,168 @@ /* - * Trim the supplied string to ensure the string length is limited to the provided value + * Return an appropriate model renderer based on the 'name' of the model */ -function trim(data, max_length=100) { - if (data.length > max_length) { - data = data.slice(0, max_length - 3) + '...'; - } +function getModelRenderer(model) { - return data; + // Find a custom renderer + switch (model) { + case 'company': + return renderCompany; + case 'contact': + return renderContact; + case 'stockitem': + return renderStockItem; + case 'stocklocation': + return renderStockLocation; + case 'part': + return renderPart; + case 'partcategory': + return renderPartCategory; + case 'partparametertemplate': + return renderPartParameterTemplate; + case 'purchaseorder': + return renderPurchaseOrder; + case 'salesorder': + return renderSalesOrder; + case 'returnorder': + return renderReturnOrder; + case 'salesordershipment': + return renderSalesOrderShipment; + case 'manufacturerpart': + return renderManufacturerPart; + case 'supplierpart': + return renderSupplierPart; + case 'build': + return renderBuild; + case 'owner': + return renderOwner; + case 'user': + return renderUser; + case 'group': + return renderGroup; + default: + // Un-handled model type + console.error(`Rendering not implemented for model '${model}'`); + return null; + } } -// Should the ID be rendered for this string -function renderId(title, pk, parameters={}) { +/* + * Generic method for rendering model data in a consistent fashion: + * + * data: + * - image: Render an image (optional) + * - imageSecondary: Render a secondary image (optional) + * - text: Primary text + * - pk: primary key (unique ID) of the model instance + * - textSecondary: Secondary text + * - url: href for link target (is enabled or disabled by showLink option) + * - labels: extra labels to display + * + * options: + * - showImage: Option to create image(s) (default = true) + * - showLink: Option to create link (default = false) + * - showLabels: Option to show or hide extra labels (default = true) + */ +function renderModel(data, options={}) { - // Default = do not render - var render = false; + let showImage = ('showImage' in options) ? options.showImage : true; + let showLink = ('showLink' in options) ? options.showLink : false; + let showLabels = ('showLabels' in options) ? options.showLabels : true; - if ('render_pk' in parameters) { - render = parameters['render_pk']; + let html = ''; + + if (showImage) { + if (data.image) { + html += select2Thumbnail(data.image); + } + if (data.imageSecondary) { + html += select2Thumbnail(data.imageSecondary); + } } - if (render) { - return `${title}: ${pk}`; - } else { - return ''; + let text = `${data.text}`; + + if (data.textSecondary) { + text += ` - ${data.textSecondary}`; } + + if (showLink && data.url) { + text = renderLink(text, data.url); + } + + html += text; + + if (showLabels && data.labels) { + html += `${data.labels}`; + } + + return html; + } // Renderer for "Company" model -// eslint-disable-next-line no-unused-vars -function renderCompany(name, data, parameters={}, options={}) { +function renderCompany(data, parameters={}) { - var html = select2Thumbnail(data.image); + return renderModel( + { + image: data.image || blankImage(), + text: data.name, + textSecondary: shortenString(data.description), + url: data.url || `/company/${data.pk}/`, + }, + parameters + ); +} - html += `${data.name} - ${trim(data.description)}`; - html += renderId('{% trans "Company ID" %}', data.pk, parameters); - - return html; +// Renderer for "Contact" model +function renderContact(data, parameters={}) { + return renderModel( + { + text: data.name, + }, + parameters + ); } // Renderer for "StockItem" model -// eslint-disable-next-line no-unused-vars -function renderStockItem(name, data, parameters={}, options={}) { +function renderStockItem(data, parameters={}) { - var image = blankImage(); + let part_image = null; + let render_part_detail = ('render_part_detail' in parameters) ? parameters.render_part_detail : true; + let render_location_detail = ('render_location_detail' in parameters) ? parameters.render_location_detail : false; + let render_available_quantity = ('render_available_quantity' in parameters) ? parameters.render_available_quantity : false; - if (data.part_detail) { - image = data.part_detail.thumbnail || data.part_detail.image || blankImage(); - } - - var render_part_detail = true; - - if ('render_part_detail' in parameters) { - render_part_detail = parameters['render_part_detail']; - } - - var part_detail = ''; + let text = ''; + let stock_detail = ''; if (render_part_detail && data.part_detail) { - part_detail = `${data.part_detail.full_name} - `; + part_image = data.part_detail.thumbnail || data.part_detail.image || blankImage(); + + text += data.part_detail.full_name; } - var render_location_detail = false; - - if ('render_location_detail' in parameters) { - render_location_detail = parameters['render_location_detail']; - } - - var location_detail = ''; - if (render_location_detail && data.location_detail) { - location_detail = ` - (${data.location_detail.name})`; + text += ` - (${data.location_detail.name})`; } - var stock_detail = ''; - if (data.quantity == 0) { stock_detail = `{% trans "No Stock"% }`; } else { if (data.serial && data.quantity == 1) { stock_detail = `{% trans "Serial Number" %}: ${data.serial}`; } else { - stock_detail = `{% trans "Quantity" %}: ${data.quantity}`; + if (render_available_quantity) { + var available = data.quantity - data.allocated; + stock_detail = `{% trans "Available" %}: ${available}`; + } else { + stock_detail = `{% trans "Quantity" %}: ${data.quantity}`; + } } if (data.batch) { @@ -127,308 +207,272 @@ function renderStockItem(name, data, parameters={}, options={}) { } } - var html = ` - - ${part_detail} - ${stock_detail} - ${location_detail} - ${renderId('{% trans "Stock ID" %}', data.pk, parameters)} - - `; - - return html; + return renderModel( + { + image: part_image, + text: text, + textSecondary: stock_detail, + url: data.url || `/stock/item/${data.pk}/`, + }, + parameters + ); } // Renderer for "StockLocation" model -// eslint-disable-next-line no-unused-vars -function renderStockLocation(name, data, parameters={}, options={}) { +function renderStockLocation(data, parameters={}) { - var level = '- '.repeat(data.level); + let render_description = ('render_description' in parameters) ? parameters.render_description : true; + let level = '- '.repeat(data.level); - var html = `${level}${data.pathstring}`; - - var render_description = true; - - if ('render_description' in parameters) { - render_description = parameters['render_description']; - } - - if (render_description && data.description) { - html += ` - ${trim(data.description)}`; - } - - html += renderId('{% trans "Location ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + text: `${level}${data.pathstring}`, + textSecondary: render_description ? shortenString(data.description) : '', + url: data.url || `/stock/location/${data.pk}/`, + }, + parameters + ); } -// eslint-disable-next-line no-unused-vars -function renderBuild(name, data, parameters={}, options={}) { +function renderBuild(data, parameters={}) { - var image = null; + var image = blankImage(); if (data.part_detail && data.part_detail.thumbnail) { - image = data.part_detail.thumbnail; + image = data.part_detail.thumbnail || data.part_detail.image || blankImage(); } - var html = select2Thumbnail(image); - - html += `${data.reference} - ${data.quantity} x ${data.part_detail.full_name}`; - - html += renderId('{% trans "Build ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + image: image, + text: data.reference, + textSecondary: `${data.quantity} x ${data.part_detail.full_name}`, + url: data.url || `/build/${data.pk}/`, + }, + parameters + ); } // Renderer for "Part" model -// eslint-disable-next-line no-unused-vars -function renderPart(name, data, parameters={}, options={}) { +function renderPart(data, parameters={}) { - var html = select2Thumbnail(data.image); - - html += ` ${data.full_name || data.name}`; - - if (data.description) { - html += ` - ${trim(data.description)}`; - } - - var stock_data = ''; + let labels = ''; if (user_settings.PART_SHOW_QUANTITY_IN_FORMS) { - stock_data = partStockLabel(data); + labels = partStockLabel(data); + + if (!data.active) { + labels += `{% trans "Inactive" %}`; + } } - var extra = ''; - - if (!data.active) { - extra += `{% trans "Inactive" %}`; - } - - html += ` - - - ${stock_data} - ${extra} - ${renderId('{% trans "Part ID" %}', data.pk, parameters)} - - `; - - return html; + return renderModel( + { + image: data.image || blankImage(), + text: data.full_name || data.name, + textSecondary: shortenString(data.description), + labels: labels, + url: data.url || `/part/${data.pk}/`, + }, + parameters, + ); } // Renderer for "Group" model -// eslint-disable-next-line no-unused-vars -function renderGroup(name, data, parameters={}, options={}) { - - var html = `${data.name}`; - - return html; +function renderGroup(data, parameters={}) { + return renderModel( + { + text: data.name, + }, + parameters + ); } // Renderer for "User" model -// eslint-disable-next-line no-unused-vars -function renderUser(name, data, parameters={}, options={}) { +function renderUser(data, parameters={}) { - var html = `${data.username}`; - - if (data.first_name && data.last_name) { - html += ` - ${data.first_name} ${data.last_name}`; - } - - return html; + return renderModel( + { + text: data.username, + textSecondary: `${data.first_name} ${data.last_name}`, + }, + parameters + ); } // Renderer for "Owner" model -// eslint-disable-next-line no-unused-vars -function renderOwner(name, data, parameters={}, options={}) { +function renderOwner(data, parameters={}) { - var html = `${data.name}`; + let label = ''; switch (data.label) { case 'user': - html += ``; + label = ``; break; case 'group': - html += ``; + label = ``; break; default: break; } - return html; + return renderModel( + { + text: data.name, + labels: label, + }, + parameters + ); + } // Renderer for "PurchaseOrder" model -// eslint-disable-next-line no-unused-vars -function renderPurchaseOrder(name, data, parameters={}, options={}) { +function renderPurchaseOrder(data, parameters={}) { - var html = ''; + let image = blankImage(); if (data.supplier_detail) { - thumbnail = data.supplier_detail.thumbnail || data.supplier_detail.image; - - html += select2Thumbnail(thumbnail); + image = data.supplier_detail.thumbnail || data.supplier_detail.image || blankImage(); } - html += `${data.reference}`; - - var thumbnail = null; - - if (data.supplier_detail) { - html += ` - ${data.supplier_detail.name}`; - } - - if (data.description) { - html += ` - ${trim(data.description)}`; - } - - html += renderId('{% trans "Order ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + image: image, + text: `${data.reference} - ${data.supplier_detail.name}`, + textSecondary: shortenString(data.description), + url: data.url || `/order/purchase-order/${data.pk}/`, + }, + parameters + ); } // Renderer for "SalesOrder" model -// eslint-disable-next-line no-unused-vars -function renderSalesOrder(name, data, parameters={}, options={}) { +function renderSalesOrder(data, parameters={}) { - var html = `${data.reference}`; - - var thumbnail = null; + let image = blankImage(); if (data.customer_detail) { - thumbnail = data.customer_detail.thumbnail || data.customer_detail.image; - - html += ' - ' + select2Thumbnail(thumbnail); - html += `${data.customer_detail.name}`; + image = data.customer_detail.thumbnail || data.customer_detail.image || blankImage(); } - if (data.description) { - html += ` - ${trim(data.description)}`; + let text = data.reference; + + if (data.customer_detail) { + text += ` - ${data.customer_detail.name}`; } - html += renderId('{% trans "Order ID" %}', data.pk, parameters); + return renderModel( + { + image: image, + text: text, + textSecondary: shortenString(data.description), + url: data.url || `/order/sales-order/${data.pk}/`, + }, + parameters + ); +} - return html; + +// Renderer for "ReturnOrder" model +function renderReturnOrder(data, parameters={}) { + let image = blankImage(); + + if (data.customer_detail) { + image = data.customer_detail.thumbnail || data.customer_detail.image || blankImage(); + } + + return renderModel( + { + image: image, + text: `${data.reference} - ${data.customer_detail.name}`, + textSecondary: shortenString(data.description), + url: data.url || `/order/return-order/${data.pk}/`, + }, + parameters, + ); } // Renderer for "SalesOrderShipment" model -// eslint-disable-next-line no-unused-vars -function renderSalesOrderShipment(name, data, parameters={}, options={}) { +function renderSalesOrderShipment(data, parameters={}) { - var html = ` - ${data.order_detail.reference} - {% trans "Shipment" %} ${data.reference} - - {% trans "Shipment ID" %}: ${data.pk} - - `; - - html += renderId('{% trans "Shipment ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + text: data.order_detail.reference, + textSecondary: `{% trans "Shipment" %} ${data.reference}`, + }, + parameters + ); } // Renderer for "PartCategory" model -// eslint-disable-next-line no-unused-vars -function renderPartCategory(name, data, parameters={}, options={}) { +function renderPartCategory(data, parameters={}) { - var level = '- '.repeat(data.level); + let level = '- '.repeat(data.level); - var html = `${level}${data.pathstring}`; - - if (data.description) { - html += ` - ${trim(data.description)}`; - } - - html += renderId('{% trans "Category ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + text: `${level}${data.pathstring}`, + textSecondary: shortenString(data.description), + url: data.url || `/part/category/${data.pk}/`, + }, + parameters + ); } -// eslint-disable-next-line no-unused-vars -function renderPartParameterTemplate(name, data, parameters={}, options={}) { - var units = ''; +function renderPartParameterTemplate(data, parameters={}) { + + let units = ''; if (data.units) { units = ` [${data.units}]`; } - var html = `${data.name}${units}`; - - return html; + return renderModel( + { + text: `${data.name}${units}`, + }, + parameters + ); } // Renderer for "ManufacturerPart" model -// eslint-disable-next-line no-unused-vars -function renderManufacturerPart(name, data, parameters={}, options={}) { +function renderManufacturerPart(data, parameters={}) { - var manufacturer_image = null; - var part_image = null; - - if (data.manufacturer_detail) { - manufacturer_image = data.manufacturer_detail.image; - } - - if (data.part_detail) { - part_image = data.part_detail.thumbnail || data.part_detail.image; - } - - var html = ''; - - html += select2Thumbnail(manufacturer_image); - html += select2Thumbnail(part_image); - - html += ` ${data.manufacturer_detail.name} - ${data.MPN}`; - html += ` - ${data.part_detail.full_name}`; - - html += renderId('{% trans "Manufacturer Part ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + image: data.manufacturer_detail ? data.manufacturer_detail.thumbnail || data.manufacturer_detail.image || blankImage() : null, + imageSecondary: data.part.detail ? data.part_detail.thumbnail || data.part_detail.image || blankImage() : null, + text: `${data.manufacturer_detail.name} - ${data.MPN}`, + textSecondary: data.part_detail.full_name, + url: data.url || `/manufacturer-part/${data.pk}/`, + }, + parameters + ); } // Renderer for "SupplierPart" model -// eslint-disable-next-line no-unused-vars -function renderSupplierPart(name, data, parameters={}, options={}) { +function renderSupplierPart(data, parameters={}) { - var supplier_image = null; - var part_image = null; - - if (data.supplier_detail) { - supplier_image = data.supplier_detail.image; - } - - if (data.part_detail) { - part_image = data.part_detail.thumbnail || data.part_detail.image; - } - - var html = ''; - - html += select2Thumbnail(supplier_image); - - if (data.part_detail) { - html += select2Thumbnail(part_image); - } - - if (data.supplier_detail) { - html += ` ${data.supplier_detail.name} - ${data.SKU}`; - } - - if (data.part_detail) { - html += ` - ${data.part_detail.full_name}`; - } - - html += renderId('{% trans "Supplier Part ID" %}', data.pk, parameters); - - return html; + return renderModel( + { + image: data.supplier_detail ? data.supplier_detail.thumbnail || data.supplier_detail.image || blankImage() : null, + imageSecondary: data.part_detail ? data.part_detail.thumbnail || data.part_detail.image || blankImage() : null, + text: `${data.supplier_detail.name} - ${data.SKU}`, + textSecondary: data.part_detail.full_name, + url: data.url || `/supplier-part/${data.pk}/` + }, + parameters + ); } diff --git a/InvenTree/templates/js/translated/notification.js b/InvenTree/templates/js/translated/notification.js index b6957741b4..c5b941e0da 100644 --- a/InvenTree/templates/js/translated/notification.js +++ b/InvenTree/templates/js/translated/notification.js @@ -50,25 +50,16 @@ function loadNotificationTable(table, options={}, enableDelete=false) { title: '{% trans "Category" %}', sortable: 'true', }, - { - field: 'target', - title: '{% trans "Item" %}', - sortable: 'true', - formatter: function(value, row, index, field) { - if (value == null) { - return ''; - } - - var html = `${value.model}: ${value.name}`; - if (value.link ) { - html = `${html}`; - } - return html; - } - }, { field: 'name', - title: '{% trans "Name" %}', + title: '{% trans "Notification" %}', + formatter: function(value, row) { + if (row.target && row.target.link) { + return renderLink(value, row.target.link); + } else { + return value; + } + } }, { field: 'message', diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js index f1044c020d..dace390ff4 100644 --- a/InvenTree/templates/js/translated/order.js +++ b/InvenTree/templates/js/translated/order.js @@ -2,787 +2,26 @@ {% load inventree_extras %} /* globals - companyFormFields, - constructForm, - createSupplierPart, - global_settings, - imageHoverIcon, inventreeGet, - launchModalForm, - loadTableFilters, - makeIconBadge, - purchaseOrderStatusDisplay, - receivePurchaseOrderItems, - renderLink, - salesOrderStatusDisplay, - setupFilterList, - supplierPartFields, */ /* exported - allocateStockToSalesOrder, - cancelPurchaseOrder, - cancelSalesOrder, - completePurchaseOrder, - completeSalesOrder, - completeShipment, - completePendingShipments, - createPurchaseOrder, - createPurchaseOrderLineItem, - createSalesOrder, - createSalesOrderLineItem, - createSalesOrderShipment, - duplicatePurchaseOrder, - editPurchaseOrder, - editPurchaseOrderLineItem, + createExtraLineItem, + editExtraLineItem, exportOrder, issuePurchaseOrder, - loadPurchaseOrderLineItemTable, - loadPurchaseOrderExtraLineTable - loadPurchaseOrderTable, - loadSalesOrderAllocationTable, - loadSalesOrderLineItemTable, - loadSalesOrderExtraLineTable - loadSalesOrderShipmentTable, - loadSalesOrderTable, newPurchaseOrderFromOrderWizard, newSupplierPartFromOrderWizard, orderParts, removeOrderRowFromOrderWizard, removePurchaseOrderLineItem, loadOrderTotal, + loadExtraLineTable, extraLineFields, + reloadTotal, */ -function salesOrderShipmentFields(options={}) { - var fields = { - order: {}, - reference: {}, - tracking_number: { - icon: 'fa-hashtag', - }, - invoice_number: { - icon: 'fa-dollar-sign', - }, - link: { - icon: 'fa-link', - } - }; - - // If order is specified, hide the order field - if (options.order) { - fields.order.value = options.order; - fields.order.hidden = true; - } - - return fields; -} - - -/* - * Complete a shipment - */ -function completeShipment(shipment_id, options={}) { - - // Request the list of stock items which will be shipped - inventreeGet(`/api/order/so/shipment/${shipment_id}/`, {}, { - success: function(shipment) { - var allocations = shipment.allocations; - - var html = ''; - - if (!allocations || allocations.length == 0) { - html = ` -
- {% trans "No stock items have been allocated to this shipment" %} -
- `; - } else { - html = ` - {% trans "The following stock items will be shipped" %} - - - - - - - - - `; - - allocations.forEach(function(allocation) { - - var part = allocation.part_detail; - var thumb = thumbnailImage(part.thumbnail || part.image); - - var stock = ''; - - if (allocation.serial) { - stock = `{% trans "Serial Number" %}: ${allocation.serial}`; - } else { - stock = `{% trans "Quantity" %}: ${allocation.quantity}`; - } - - html += ` - - - - - `; - }); - - html += ` - -
{% trans "Part" %}{% trans "Stock Item" %}
${thumb} ${part.full_name}${stock}
- `; - } - - constructForm(`/api/order/so/shipment/${shipment_id}/ship/`, { - method: 'POST', - title: `{% trans "Complete Shipment" %} ${shipment.reference}`, - fields: { - shipment_date: { - value: moment().format('YYYY-MM-DD'), - }, - tracking_number: { - value: shipment.tracking_number, - icon: 'fa-hashtag', - }, - invoice_number: { - value: shipment.invoice_number, - icon: 'fa-dollar-sign', - }, - link: { - value: shipment.link, - icon: 'fa-link', - } - }, - preFormContent: html, - confirm: true, - confirmMessage: '{% trans "Confirm Shipment" %}', - buttons: options.buttons, - onSuccess: function(data) { - // Reload tables - $('#so-lines-table').bootstrapTable('refresh'); - $('#pending-shipments-table').bootstrapTable('refresh'); - $('#completed-shipments-table').bootstrapTable('refresh'); - - if (options.onSuccess instanceof Function) { - options.onSuccess(data); - } - }, - reload: options.reload - }); - } - }); -} - -/* - * Launches a modal to mark all allocated pending shipments as complete - */ -function completePendingShipments(order_id, options={}) { - var pending_shipments = null; - - // Request the list of stock items which will be shipped - inventreeGet(`/api/order/so/shipment/.*`, - { - order: order_id, - shipped: false - }, - { - async: false, - success: function(shipments) { - pending_shipments = shipments; - } - } - ); - - var allocated_shipments = []; - - for (var idx = 0; idx < pending_shipments.length; idx++) { - if (pending_shipments[idx].allocations.length > 0) { - allocated_shipments.push(pending_shipments[idx]); - } - } - - if (allocated_shipments.length > 0) { - completePendingShipmentsHelper(allocated_shipments, 0, options); - - } else { - html = ` -
- `; - - if (!pending_shipments.length) { - html += ` - {% trans "No pending shipments found" %} - `; - } else { - html += ` - {% trans "No stock items have been allocated to pending shipments" %} - `; - } - - html += ` -
- `; - - constructForm(`/api/order/so/shipment/0/ship/`, { - method: 'POST', - title: '{% trans "Complete Shipments" %}', - preFormContent: html, - onSubmit: function(fields, options) { - handleFormSuccess(fields, options); - }, - closeText: 'Close', - hideSubmitButton: true, - }); - } -} - - -/* - * Recursive helper for opening shipment completion modals - */ -function completePendingShipmentsHelper(shipments, shipment_idx, options={}) { - if (shipment_idx < shipments.length) { - completeShipment(shipments[shipment_idx].pk, - { - buttons: [ - { - name: 'skip', - title: `{% trans "Skip" %}`, - onClick: function(form_options) { - if (form_options.modal) { - $(form_options.modal).modal('hide'); - } - - completePendingShipmentsHelper(shipments, shipment_idx + 1, options); - } - } - ], - onSuccess: function(data) { - completePendingShipmentsHelper(shipments, shipment_idx + 1, options); - }, - } - ); - - } else if (options.reload) { - location.reload(); - } -} - -/* - * Launches a modal form to mark a PurchaseOrder as "complete" - */ -function completePurchaseOrder(order_id, options={}) { - - constructForm( - `/api/order/po/${order_id}/complete/`, - { - method: 'POST', - title: '{% trans "Complete Purchase Order" %}', - confirm: true, - fieldsFunction: function(opts) { - var fields = { - accept_incomplete: {}, - }; - - if (opts.context.is_complete) { - delete fields['accept_incomplete']; - } - - return fields; - }, - preFormContent: function(opts) { - - var html = ` -
- {% trans "Mark this order as complete?" %} -
`; - - if (opts.context.is_complete) { - html += ` -
- {% trans "All line items have been received" %} -
`; - } else { - html += ` -
- {% trans 'This order has line items which have not been marked as received.' %}
- {% trans 'Completing this order means that the order and line items will no longer be editable.' %} -
`; - } - - return html; - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } - } - ); -} - - -/* - * Launches a modal form to mark a PurchaseOrder as 'cancelled' - */ -function cancelPurchaseOrder(order_id, options={}) { - - constructForm( - `/api/order/po/${order_id}/cancel/`, - { - method: 'POST', - title: '{% trans "Cancel Purchase Order" %}', - confirm: true, - preFormContent: function(opts) { - var html = ` -
- {% trans "Are you sure you wish to cancel this purchase order?" %} -
`; - - if (!opts.context.can_cancel) { - html += ` -
- {% trans "This purchase order can not be cancelled" %} -
`; - } - - return html; - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } - } - ); -} - - -/* - * Launches a modal form to mark a PurchaseOrder as "issued" - */ -function issuePurchaseOrder(order_id, options={}) { - - constructForm( - `/api/order/po/${order_id}/issue/`, - { - method: 'POST', - title: '{% trans "Issue Purchase Order" %}', - confirm: true, - preFormContent: function(opts) { - var html = ` -
- {% trans 'After placing this purchase order, line items will no longer be editable.' %} -
`; - - return html; - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } - } - ); -} - - -/* - * Launches a modal form to mark a SalesOrder as "complete" - */ -function completeSalesOrder(order_id, options={}) { - - constructForm( - `/api/order/so/${order_id}/complete/`, - { - method: 'POST', - title: '{% trans "Complete Sales Order" %}', - confirm: true, - fieldsFunction: function(opts) { - var fields = { - accept_incomplete: {}, - }; - - if (opts.context.is_complete) { - delete fields['accept_incomplete']; - } - - return fields; - }, - preFormContent: function(opts) { - var html = ` -
- {% trans "Mark this order as complete?" %} -
`; - - if (opts.context.pending_shipments) { - html += ` -
- {% trans "Order cannot be completed as there are incomplete shipments" %}
-
`; - } - - if (!opts.context.is_complete) { - html += ` -
- {% trans "This order has line items which have not been completed." %}
- {% trans "Completing this order means that the order and line items will no longer be editable." %} -
`; - } - - return html; - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } - } - ); -} - - -/* - * Launches a modal form to mark a SalesOrder as "cancelled" - */ -function cancelSalesOrder(order_id, options={}) { - - constructForm( - `/api/order/so/${order_id}/cancel/`, - { - method: 'POST', - title: '{% trans "Cancel Sales Order" %}', - confirm: true, - preFormContent: function(opts) { - var html = ` -
- {% trans "Cancelling this order means that the order will no longer be editable." %} -
`; - - return html; - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } - } - ); -} - -// Open a dialog to create a new sales order shipment -function createSalesOrderShipment(options={}) { - - // Work out the next shipment number for the given order - inventreeGet( - '{% url "api-so-shipment-list" %}', - { - order: options.order, - }, - { - success: function(results) { - // "predict" the next reference number - var ref = results.length + 1; - - var found = false; - - while (!found) { - - var no_match = true; - - for (var ii = 0; ii < results.length; ii++) { - if (ref.toString() == results[ii].reference.toString()) { - no_match = false; - break; - } - } - - if (no_match) { - break; - } else { - ref++; - } - } - - var fields = salesOrderShipmentFields(options); - - fields.reference.value = ref; - fields.reference.prefix = options.reference; - - constructForm('{% url "api-so-shipment-list" %}', { - method: 'POST', - fields: fields, - title: '{% trans "Create New Shipment" %}', - onSuccess: function(data) { - if (options.onSuccess) { - options.onSuccess(data); - } - } - }); - } - } - ); -} - - -/* - * Create a new SalesOrder - */ -function createSalesOrder(options={}) { - - constructForm('{% url "api-so-list" %}', { - method: 'POST', - fields: { - reference: { - icon: 'fa-hashtag', - }, - customer: { - value: options.customer, - secondary: { - title: '{% trans "Add Customer" %}', - fields: function() { - var fields = companyFormFields(); - - fields.is_customer.value = true; - - return fields; - } - } - }, - customer_reference: {}, - description: {}, - target_date: { - icon: 'fa-calendar-alt', - }, - link: { - icon: 'fa-link', - }, - responsible: { - icon: 'fa-user', - } - }, - onSuccess: function(data) { - location.href = `/order/sales-order/${data.pk}/`; - }, - title: '{% trans "Create Sales Order" %}', - }); -} - - -/* - * Launch a modal form to create a new SalesOrderLineItem - */ -function createSalesOrderLineItem(options={}) { - - var fields = soLineItemFields(options); - - constructForm('{% url "api-so-line-list" %}', { - fields: fields, - method: 'POST', - title: '{% trans "Add Line Item" %}', - onSuccess: function(response) { - handleFormSuccess(response, options); - }, - }); -} - - -/* - * Construct a set of fields for a purchase order form - */ -function purchaseOrderFields(options={}) { - - var fields = { - reference: { - icon: 'fa-hashtag', - }, - supplier: { - icon: 'fa-building', - secondary: { - title: '{% trans "Add Supplier" %}', - fields: function() { - var fields = companyFormFields(); - - fields.is_supplier.value = true; - - return fields; - } - } - }, - description: {}, - supplier_reference: {}, - target_date: { - icon: 'fa-calendar-alt', - }, - link: { - icon: 'fa-link', - }, - responsible: { - icon: 'fa-user', - }, - }; - - if (options.supplier) { - fields.supplier.value = options.supplier; - } - - if (options.hide_supplier) { - fields.supplier.hidden = true; - } - - // Add fields for order duplication (only if required) - if (options.duplicate_order) { - fields.duplicate_order = { - value: options.duplicate_order, - group: 'duplicate', - required: 'true', - type: 'related field', - model: 'purchaseorder', - filters: { - supplier_detail: true, - }, - api_url: '{% url "api-po-list" %}', - label: '{% trans "Purchase Order" %}', - help_text: '{% trans "Select purchase order to duplicate" %}', - }; - - fields.duplicate_line_items = { - value: true, - group: 'duplicate', - type: 'boolean', - label: '{% trans "Duplicate Line Items" %}', - help_text: '{% trans "Duplicate all line items from the selected order" %}', - }; - - fields.duplicate_extra_lines = { - value: true, - group: 'duplicate', - type: 'boolean', - label: '{% trans "Duplicate Extra Lines" %}', - help_text: '{% trans "Duplicate extra line items from the selected order" %}', - }; - } - - return fields; -} - - -/* - * Edit an existing PurchaseOrder - */ -function editPurchaseOrder(pk, options={}) { - - var fields = purchaseOrderFields(options); - - constructForm(`/api/order/po/${pk}/`, { - fields: fields, - title: '{% trans "Edit Purchase Order" %}', - onSuccess: function(response) { - handleFormSuccess(response, options); - } - }); -} - - -// Create a new PurchaseOrder -function createPurchaseOrder(options={}) { - - var fields = purchaseOrderFields(options); - - var groups = {}; - - if (options.duplicate_order) { - groups.duplicate = { - title: '{% trans "Duplication Options" %}', - collapsible: false, - }; - }; - - constructForm('{% url "api-po-list" %}', { - method: 'POST', - fields: fields, - groups: groups, - data: options.data, - onSuccess: function(data) { - - if (options.onSuccess) { - options.onSuccess(data); - } else { - // Default action is to redirect browser to the new PurchaseOrder - location.href = `/order/purchase-order/${data.pk}/`; - } - }, - title: options.title || '{% trans "Create Purchase Order" %}', - }); -} - -/* - * Duplicate an existing PurchaseOrder - * Provides user with option to duplicate line items for the order also. - */ -function duplicatePurchaseOrder(order_id, options={}) { - - options.duplicate_order = order_id; - - inventreeGet(`/api/order/po/${order_id}/`, {}, { - success: function(data) { - - // Clear out data we do not want to be duplicated - delete data['pk']; - delete data['reference']; - - options.data = data; - - createPurchaseOrder(options); - } - }); -} - - -// Create a new PurchaseOrderLineItem -function createPurchaseOrderLineItem(order, options={}) { - - var fields = poLineItemFields({ - order: order, - supplier: options.supplier, - currency: options.currency, - target_date: options.target_date, - }); - - constructForm('{% url "api-po-line-list" %}', { - fields: fields, - method: 'POST', - title: '{% trans "Add Line Item" %}', - onSuccess: function(response) { - handleFormSuccess(response, options); - } - }); -} - - -/* Construct a set of fields for the SalesOrderLineItem form */ -function soLineItemFields(options={}) { - - var fields = { - order: { - hidden: true, - }, - part: {}, - quantity: {}, - reference: {}, - sale_price: {}, - sale_price_currency: {}, - target_date: {}, - notes: {}, - }; - - if (options.order) { - fields.order.value = options.order; - } - - if (options.target_date) { - fields.target_date.value = options.target_date; - } - - return fields; -} - - /* Construct a set of fields for a OrderExtraLine form */ function extraLineFields(options={}) { @@ -792,9 +31,18 @@ function extraLineFields(options={}) { }, quantity: {}, reference: {}, - price: {}, - price_currency: {}, - notes: {}, + price: { + icon: 'fa-dollar-sign', + }, + price_currency: { + icon: 'fa-coins', + }, + notes: { + icon: 'fa-sticky-note', + }, + link: { + icon: 'fa-link', + } }; if (options.order) { @@ -805,142 +53,34 @@ function extraLineFields(options={}) { } -/* Construct a set of fields for the PurchaseOrderLineItem form */ -function poLineItemFields(options={}) { +/* + * Create a new ExtraLineItem + */ +function createExtraLineItem(options={}) { - var fields = { - order: { - filters: { - supplier_detail: true, - } - }, - part: { - filters: { - part_detail: true, - supplier_detail: true, - supplier: options.supplier, - }, - onEdit: function(value, name, field, opts) { - // If the pack_size != 1, add a note to the field - var pack_size = 1; - var units = ''; - var supplier_part_id = value; - var quantity = getFormFieldValue('quantity', {}, opts); - - // Remove any existing note fields - $(opts.modal).find('#info-pack-size').remove(); - - if (value == null) { - return; - } - - // Request information about the particular supplier part - inventreeGet(`/api/company/part/${value}/`, - { - part_detail: true, - }, - { - success: function(response) { - // Extract information from the returned query - pack_size = response.pack_size || 1; - units = response.part_detail.units || ''; - }, - } - ).then(function() { - // Update pack size information - if (pack_size != 1) { - var txt = ` {% trans "Pack Quantity" %}: ${pack_size} ${units}`; - $(opts.modal).find('#hint_id_quantity').after(`
${txt}
`); - } - }).then(function() { - // Update pricing data (if available) - inventreeGet( - '{% url "api-part-supplier-price-list" %}', - { - part: supplier_part_id, - ordering: 'quantity', - }, - { - success: function(response) { - // Returned prices are in increasing order of quantity - if (response.length > 0) { - var idx = 0; - - for (var idx = 0; idx < response.length; idx++) { - if (response[idx].quantity > quantity) { - break; - } - - index = idx; - } - - // Update price and currency data in the form - updateFieldValue('purchase_price', response[index].price, {}, opts); - updateFieldValue('purchase_price_currency', response[index].price_currency, {}, opts); - } - } - } - ); - }); - }, - secondary: { - method: 'POST', - title: '{% trans "Add Supplier Part" %}', - fields: function(data) { - var fields = supplierPartFields({ - part: data.part, - }); - - fields.supplier.value = options.supplier; - - // Adjust manufacturer part query based on selected part - fields.manufacturer_part.adjustFilters = function(query, opts) { - - var part = getFormFieldValue('part', {}, opts); - - if (part) { - query.part = part; - } - - return query; - }; - - return fields; - } - } - }, - quantity: {}, - reference: {}, - purchase_price: {}, - purchase_price_currency: {}, - target_date: {}, - destination: { - filters: { - structural: false, - } - }, - notes: {}, - }; - - if (options.order) { - fields.order.value = options.order; - fields.order.hidden = true; - } + let fields = extraLineFields({ + order: options.order, + }); if (options.currency) { - fields.purchase_price_currency.value = options.currency; + fields.price_currency.value = options.currency; } - if (options.target_date) { - fields.target_date.value = options.target_date; - } - - return fields; + constructForm(options.url, { + fields: fields, + method: 'POST', + title: '{% trans "Add Extra Line Item" %}', + onSuccess: function(response) { + if (options.table) { + reloadBootstrapTable(options.table); + } + } + }); } +/* Remove a part selection from an order form. */ function removeOrderRowFromOrderWizard(e) { - /* Remove a part selection from an order form. */ e = e || window.event; @@ -951,66 +91,10 @@ function removeOrderRowFromOrderWizard(e) { $('#' + row).remove(); } - -function newSupplierPartFromOrderWizard(e) { - /* Create a new supplier part directly from an order form. - * Launches a secondary modal and (if successful), - * back-populates the selected row. - */ - - e = e || window.event; - - var src = e.srcElement || e.target; - - var part = $(src).attr('part'); - - if (!part) { - part = $(src).closest('button').attr('part'); - } - - createSupplierPart({ - part: part, - onSuccess: function(data) { - - // TODO: 2021-08-23 - This whole form wizard needs to be refactored. - // In the future, use the API forms functionality to add the new item - // For now, this hack will have to do... - - var dropdown = `#id_supplier_part_${part}`; - - var pk = data.pk; - - inventreeGet( - `/api/company/part/${pk}/`, - { - supplier_detail: true, - }, - { - success: function(response) { - var text = ''; - - if (response.supplier_detail) { - text += response.supplier_detail.name; - text += ' | '; - } - - text += response.SKU; - - var option = new Option(text, pk, true, true); - - $('#modal-form').find(dropdown).append(option).trigger('change'); - } - } - ); - } - }); -} - /** * Export an order (PurchaseOrder or SalesOrder) * * - Display a simple form which presents the user with export options - * */ function exportOrder(redirect_url, options={}) { @@ -1050,2712 +134,6 @@ function exportOrder(redirect_url, options={}) { } -/* - * Create a new form to order parts based on the list of provided parts. - */ -function orderParts(parts_list, options) { - - var parts = []; - - var parts_seen = {}; - - parts_list.forEach(function(part) { - if (part.purchaseable) { - - // Prevent duplicates - if (!(part.pk in parts_seen)) { - parts_seen[part.pk] = true; - parts.push(part); - } - } - }); - - if (parts.length == 0) { - showAlertDialog( - '{% trans "Select Parts" %}', - '{% trans "At least one purchaseable part must be selected" %}', - ); - return; - } - - // Render a single part within the dialog - function renderPart(part, opts={}) { - - var pk = part.pk; - - var thumb = thumbnailImage(part.thumbnail || part.image); - - // Default quantity value - var quantity = part.quantity || 1; - - if (quantity < 0) { - quantity = 0; - } - - var quantity_input = constructField( - `quantity_${pk}`, - { - type: 'decimal', - min_value: 0, - value: quantity, - title: '{% trans "Quantity to order" %}', - required: true, - }, - { - hideLabels: true, - } - ); - - var supplier_part_prefix = ` - - `; - - var supplier_part_input = constructField( - `part_${pk}`, - { - type: 'related field', - required: true, - prefixRaw: supplier_part_prefix, - }, - { - hideLabels: true, - } - ); - - var purchase_order_prefix = ` - - `; - - var purchase_order_input = constructField( - `order_${pk}`, - { - type: 'related field', - required: true, - prefixRaw: purchase_order_prefix, - }, - { - hideLabels: 'true', - } - ); - - var buttons = `
`; - - if (parts.length > 1) { - buttons += makeIconButton( - 'fa-times icon-red', - 'button-row-remove', - pk, - '{% trans "Remove row" %}', - ); - } - - // Button to add row to purchase order - buttons += makeIconButton( - 'fa-shopping-cart icon-blue', - 'button-row-add', - pk, - '{% trans "Add to purchase order" %}', - ); - - buttons += `
`; - - var html = ` - - ${thumb} ${part.full_name} - ${supplier_part_input} - ${purchase_order_input} - ${quantity_input} - ${buttons} - `; - - return html; - } - - // Remove a single row form this dialog - function removeRow(pk, opts) { - // Remove the row - $(opts.modal).find(`#order_row_${pk}`).remove(); - - // If the modal is now "empty", dismiss it - if (!($(opts.modal).find('.part-order-row').exists())) { - closeModal(opts.modal); - // If there is a onSuccess callback defined, call it - if (options && options.onSuccess) { - options.onSuccess(); - } - } - } - - var table_entries = ''; - - parts.forEach(function(part) { - table_entries += renderPart(part); - }); - - var html = ''; - - // Add table - html += ` - - - - - - - - - - - - ${table_entries} - -
{% trans "Part" %}{% trans "Supplier Part" %}{% trans "Purchase Order" %}{% trans "Quantity" %}
- `; - - // Construct API filters for the SupplierPart field - var supplier_part_filters = { - supplier_detail: true, - part_detail: true, - }; - - if (options.supplier) { - supplier_part_filters.supplier = options.supplier; - } - - if (options.manufacturer) { - supplier_part_filters.manufacturer = options.manufacturer; - } - - if (options.manufacturer_part) { - supplier_part_filters.manufacturer_part = options.manufacturer_part; - } - - // Construct API filtres for the PurchaseOrder field - var order_filters = { - status: {{ PurchaseOrderStatus.PENDING }}, - supplier_detail: true, - }; - - if (options.supplier) { - order_filters.supplier = options.supplier; - } - - constructFormBody({}, { - preFormContent: html, - title: '{% trans "Order Parts" %}', - hideSubmitButton: true, - closeText: '{% trans "Close" %}', - afterRender: function(fields, opts) { - parts.forEach(function(part) { - - var pk = part.pk; - - // Filter by base part - supplier_part_filters.part = pk; - - if (part.manufacturer_part) { - // Filter by manufacturer part - supplier_part_filters.manufacturer_part = part.manufacturer_part; - } - - // Callback function when supplier part is changed - // This is used to update the "pack size" attribute - var onSupplierPartChanged = function(value, name, field, opts) { - var pack_size = 1; - var units = ''; - - $(opts.modal).find(`#info-pack-size-${pk}`).remove(); - - if (value != null) { - inventreeGet( - `/api/company/part/${value}/`, - { - part_detail: true, - }, - { - success: function(response) { - pack_size = response.pack_size || 1; - units = response.part_detail.units || ''; - } - } - ).then(function() { - if (pack_size != 1) { - var txt = ` {% trans "Pack Quantity" %}: ${pack_size} ${units}`; - $(opts.modal).find(`#id_quantity_${pk}`).after(`
${txt}
`); - } - }); - } - }; - - var supplier_part_field = { - name: `part_${part.pk}`, - model: 'supplierpart', - api_url: '{% url "api-supplier-part-list" %}', - required: true, - type: 'related field', - auto_fill: true, - value: options.supplier_part, - filters: supplier_part_filters, - onEdit: onSupplierPartChanged, - noResults: function(query) { - return '{% trans "No matching supplier parts" %}'; - } - }; - - // Configure the "supplier part" field - initializeRelatedField(supplier_part_field, null, opts); - addFieldCallback(`part_${part.pk}`, supplier_part_field, opts); - - // Configure the "purchase order" field - initializeRelatedField({ - name: `order_${part.pk}`, - model: 'purchaseorder', - api_url: '{% url "api-po-list" %}', - required: true, - type: 'related field', - auto_fill: false, - value: options.order, - filters: order_filters, - noResults: function(query) { - return '{% trans "No matching purchase orders" %}'; - } - }, null, opts); - - // Request 'requirements' information for each part - inventreeGet(`/api/part/${part.pk}/requirements/`, {}, { - success: function(response) { - var required = response.required || 0; - var allocated = response.allocated || 0; - var available = response.available_stock || 0; - - // Based on what we currently 'have' on hand, what do we need to order? - var deficit = Math.max(required - allocated, 0); - - if (available < deficit) { - var q = deficit - available; - - updateFieldValue( - `quantity_${part.pk}`, - q, - {}, - opts - ); - } - } - }); - }); - - // Add callback for "add to purchase order" button - $(opts.modal).find('.button-row-add').click(function() { - var pk = $(this).attr('pk'); - - opts.field_suffix = null; - - // Extract information from the row - var data = { - quantity: getFormFieldValue(`quantity_${pk}`, {type: 'decimal'}, opts), - part: getFormFieldValue(`part_${pk}`, {}, opts), - order: getFormFieldValue(`order_${pk}`, {}, opts), - }; - - // Duplicate the form options, to prevent 'field_suffix' override - var row_opts = Object.assign(opts); - row_opts.field_suffix = `_${pk}`; - - inventreePut( - '{% url "api-po-line-list" %}', - data, - { - method: 'POST', - success: function(response) { - removeRow(pk, opts); - }, - error: function(xhr) { - switch (xhr.status) { - case 400: - handleFormErrors(xhr.responseJSON, fields, row_opts); - break; - default: - console.error(`Error adding line to purchase order`); - showApiError(xhr, options.url); - break; - } - } - } - ); - }); - - // Add callback for "remove row" button - $(opts.modal).find('.button-row-remove').click(function() { - var pk = $(this).attr('pk'); - - removeRow(pk, opts); - }); - - // Add callback for "new supplier part" button - $(opts.modal).find('.button-row-new-sp').click(function() { - var pk = $(this).attr('pk'); - - // Launch dialog to create new supplier part - createSupplierPart({ - part: pk, - onSuccess: function(response) { - setRelatedFieldData( - `part_${pk}`, - response, - opts - ); - } - }); - }); - - // Add callback for "new purchase order" button - $(opts.modal).find('.button-row-new-po').click(function() { - var pk = $(this).attr('pk'); - - // Launch dialog to create new purchase order - createPurchaseOrder({ - onSuccess: function(response) { - setRelatedFieldData( - `order_${pk}`, - response, - opts - ); - } - }); - }); - } - }); - -} - -function newPurchaseOrderFromOrderWizard(e) { - /* Create a new purchase order directly from an order form. - * Launches a secondary modal and (if successful), - * back-fills the newly created purchase order. - */ - - e = e || window.event; - - var src = e.target || e.srcElement; - - var supplier = $(src).attr('supplierid'); - - createPurchaseOrder({ - supplier: supplier, - onSuccess: function(data) { - - // TODO: 2021-08-23 - The whole form wizard needs to be refactored - // In the future, the drop-down should be using a dynamic AJAX request - // to fill out the select2 options! - - var pk = data.pk; - - inventreeGet( - `/api/order/po/${pk}/`, - { - supplier_detail: true, - }, - { - success: function(response) { - var text = response.reference; - - if (response.supplier_detail) { - text += ` ${response.supplier_detail.name}`; - } - - var dropdown = `#id-purchase-order-${supplier}`; - - var option = new Option(text, pk, true, true); - - $('#modal-form').find(dropdown).append(option).trigger('change'); - } - } - ); - } - }); -} - - -/** - * Receive stock items against a PurchaseOrder - * Uses the PurchaseOrderReceive API endpoint - * - * arguments: - * - order_id, ID / PK for the PurchaseOrder instance - * - line_items: A list of PurchaseOrderLineItems objects to be allocated - * - * options: - * - - */ -function receivePurchaseOrderItems(order_id, line_items, options={}) { - - // Zero items selected? - if (line_items.length == 0) { - - showAlertDialog( - '{% trans "Select Line Items" %}', - '{% trans "At least one line item must be selected" %}', - ); - return; - } - - function renderLineItem(line_item, opts={}) { - - var pk = line_item.pk; - - // Part thumbnail + description - var thumb = thumbnailImage(line_item.part_detail.thumbnail); - - var quantity = (line_item.quantity || 0) - (line_item.received || 0); - - if (quantity < 0) { - quantity = 0; - } - - // Prepend toggles to the quantity input - var toggle_batch = ` - - - - `; - - var toggle_serials = ` - - - - `; - - var units = line_item.part_detail.units || ''; - var pack_size = line_item.supplier_part_detail.pack_size || 1; - var pack_size_div = ''; - - var received = quantity * pack_size; - - if (pack_size != 1) { - pack_size_div = ` -
- {% trans "Pack Quantity" %}: ${pack_size} ${units}
- {% trans "Received Quantity" %}: ${received} ${units} -
`; - } - - // Quantity to Receive - var quantity_input = constructField( - `items_quantity_${pk}`, - { - type: 'decimal', - min_value: 0, - value: quantity, - title: '{% trans "Quantity to receive" %}', - required: true, - }, - { - hideLabels: true, - } - ); - - // Add in options for "batch code" and "serial numbers" - var batch_input = constructField( - `items_batch_code_${pk}`, - { - type: 'string', - required: false, - label: '{% trans "Batch Code" %}', - help_text: '{% trans "Enter batch code for incoming stock items" %}', - prefixRaw: toggle_batch, - } - ); - - var sn_input = constructField( - `items_serial_numbers_${pk}`, - { - type: 'string', - required: false, - label: '{% trans "Serial Numbers" %}', - help_text: '{% trans "Enter serial numbers for incoming stock items" %}', - prefixRaw: toggle_serials, - } - ); - - // Hidden inputs below the "quantity" field - var quantity_input_group = `${quantity_input}${pack_size_div}
${batch_input}
`; - - if (line_item.part_detail.trackable) { - quantity_input_group += `
${sn_input}
`; - } - - // Construct list of StockItem status codes - var choices = []; - - for (var key in stockCodes) { - choices.push({ - value: key, - display_name: stockCodes[key].value, - }); - } - - var destination_input = constructField( - `items_location_${pk}`, - { - type: 'related field', - label: '{% trans "Location" %}', - required: false, - }, - { - hideLabels: true, - } - ); - - var status_input = constructField( - `items_status_${pk}`, - { - type: 'choice', - label: '{% trans "Stock Status" %}', - required: true, - choices: choices, - value: 10, // OK - }, - { - hideLabels: true, - } - ); - - // Button to remove the row - var buttons = `
`; - - buttons += makeIconButton( - 'fa-layer-group', - 'button-row-add-batch', - pk, - '{% trans "Add batch code" %}', - { - collapseTarget: `div-batch-${pk}` - } - ); - - if (line_item.part_detail.trackable) { - buttons += makeIconButton( - 'fa-hashtag', - 'button-row-add-serials', - pk, - '{% trans "Add serial numbers" %}', - { - collapseTarget: `div-serials-${pk}`, - } - ); - } - - if (line_items.length > 1) { - buttons += makeIconButton( - 'fa-times icon-red', - 'button-row-remove', - pk, - '{% trans "Remove row" %}', - ); - } - - buttons += '
'; - - var html = ` - - - ${thumb} ${line_item.part_detail.full_name} - - - ${line_item.supplier_part_detail.SKU} - - - ${line_item.quantity} - - - ${line_item.received} - - - ${quantity_input_group} - - - ${status_input} - - - ${destination_input} - - - ${buttons} - - `; - - return html; - } - - var table_entries = ''; - - line_items.forEach(function(item) { - if (item.received < item.quantity) { - table_entries += renderLineItem(item); - } - }); - - var html = ``; - - // Add table - html += ` - - - - - - - - - - - - - - - ${table_entries} - -
{% trans "Part" %}{% trans "Order Code" %}{% trans "Ordered" %}{% trans "Received" %}{% trans "Quantity to Receive" %}{% trans "Status" %}{% trans "Destination" %}
- `; - - constructForm(`/api/order/po/${order_id}/receive/`, { - method: 'POST', - fields: { - location: { - filters: { - structural: false, - } - }, - }, - preFormContent: html, - confirm: true, - confirmMessage: '{% trans "Confirm receipt of items" %}', - title: '{% trans "Receive Purchase Order Items" %}', - afterRender: function(fields, opts) { - - // Run initialization routines for each line in the form - line_items.forEach(function(item) { - - var pk = item.pk; - - var name = `items_location_${pk}`; - - var field_details = { - name: name, - api_url: '{% url "api-location-list" %}', - filters: { - - }, - type: 'related field', - model: 'stocklocation', - required: false, - auto_fill: false, - value: item.destination || item.part_detail.default_location, - render_description: false, - }; - - // Initialize the location field - initializeRelatedField( - field_details, - null, - opts, - ); - - // Add 'clear' button callback for the location field - addClearCallback( - name, - field_details, - opts - ); - - // Setup stock item status field - initializeChoiceField( - { - name: `items_status_${pk}`, - }, - null, - opts - ); - - // Add change callback for quantity field - if (item.supplier_part_detail.pack_size != 1) { - $(opts.modal).find(`#id_items_quantity_${pk}`).change(function() { - var value = $(opts.modal).find(`#id_items_quantity_${pk}`).val(); - - var el = $(opts.modal).find(`#quantity_${pk}`).find('.pack_received_quantity'); - - var actual = value * item.supplier_part_detail.pack_size; - actual = formatDecimal(actual); - el.text(actual); - }); - } - }); - - // Add callbacks to remove rows - $(opts.modal).find('.button-row-remove').click(function() { - var pk = $(this).attr('pk'); - - $(opts.modal).find(`#receive_row_${pk}`).remove(); - }); - }, - onSubmit: function(fields, opts) { - // Extract data elements from the form - var data = { - items: [], - location: getFormFieldValue('location', {}, opts), - }; - - var item_pk_values = []; - - line_items.forEach(function(item) { - - var pk = item.pk; - - var quantity = getFormFieldValue(`items_quantity_${pk}`, {}, opts); - - var status = getFormFieldValue(`items_status_${pk}`, {}, opts); - - var location = getFormFieldValue(`items_location_${pk}`, {}, opts); - - if (quantity != null) { - - var line = { - line_item: pk, - quantity: quantity, - status: status, - location: location, - }; - - if (getFormFieldElement(`items_batch_code_${pk}`).exists()) { - line.batch_code = getFormFieldValue(`items_batch_code_${pk}`); - } - - if (getFormFieldElement(`items_serial_numbers_${pk}`).exists()) { - line.serial_numbers = getFormFieldValue(`items_serial_numbers_${pk}`); - } - - data.items.push(line); - item_pk_values.push(pk); - } - - }); - - // Provide list of nested values - opts.nested = { - 'items': item_pk_values, - }; - - inventreePut( - opts.url, - data, - { - method: 'POST', - success: function(response) { - // Hide the modal - $(opts.modal).modal('hide'); - - if (options.success) { - options.success(response); - } - }, - error: function(xhr) { - switch (xhr.status) { - case 400: - handleFormErrors(xhr.responseJSON, fields, opts); - break; - default: - $(opts.modal).modal('hide'); - showApiError(xhr, opts.url); - break; - } - } - } - ); - } - }); -} - - -function editPurchaseOrderLineItem(e) { - - /* Edit a purchase order line item in a modal form. - */ - - e = e || window.event; - - var src = e.target || e.srcElement; - - var url = $(src).attr('url'); - - // TODO: Migrate this to the API forms - launchModalForm(url, { - reload: true, - }); -} - -function removePurchaseOrderLineItem(e) { - - /* Delete a purchase order line item in a modal form - */ - - e = e || window.event; - - var src = e.target || e.srcElement; - - var url = $(src).attr('url'); - - // TODO: Migrate this to the API forms - launchModalForm(url, { - reload: true, - }); -} - - -/* - * Load a table displaying list of purchase orders - */ -function loadPurchaseOrderTable(table, options) { - // Ensure the table starts in a known state - $(table).bootstrapTable('destroy'); - - options.params = options.params || {}; - - options.params['supplier_detail'] = true; - - var filters = loadTableFilters('purchaseorder'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - var target = '#filter-list-purchaseorder'; - - setupFilterList('purchaseorder', $(table), target, {download: true}); - - var display_mode = inventreeLoad('purchaseorder-table-display-mode', 'list'); - - // Function for rendering PurchaseOrder calendar display - function buildEvents(calendar) { - - var start = startDate(calendar); - var end = endDate(calendar); - - clearEvents(calendar); - - // Extract current filters from table - var table_options = $(table).bootstrapTable('getOptions'); - var filters = table_options.query_params || {}; - - filters.supplier_detail = true; - filters.min_date = start; - filters.max_date = end; - - // Request purchase orders from the server within specified date range - inventreeGet( - '{% url "api-po-list" %}', - filters, - { - success: function(response) { - for (var idx = 0; idx < response.length; idx++) { - - var order = response[idx]; - - var date = order.creation_date; - - if (order.complete_date) { - date = order.complete_date; - } else if (order.target_date) { - date = order.target_date; - } - - var title = `${order.reference} - ${order.supplier_detail.name}`; - - var color = '#4c68f5'; - - if (order.complete_date) { - color = '#25c235'; - } else if (order.overdue) { - color = '#c22525'; - } else { - color = '#4c68f5'; - } - - var event = { - title: title, - start: date, - end: date, - url: `/order/purchase-order/${order.pk}/`, - backgroundColor: color, - }; - - calendar.addEvent(event); - } - } - } - ); - } - - $(table).inventreeTable({ - url: '{% url "api-po-list" %}', - queryParams: filters, - name: 'purchaseorder', - groupBy: false, - sidePagination: 'server', - original: options.params, - showColumns: display_mode == 'list', - disablePagination: display_mode == 'calendar', - showCustomViewButton: false, - showCustomView: display_mode == 'calendar', - search: display_mode != 'calendar', - formatNoMatches: function() { - return '{% trans "No purchase orders found" %}'; - }, - buttons: constructOrderTableButtons({ - prefix: 'purchaseorder', - disableTreeView: true, - callback: function() { - // Reload the entire table - loadPurchaseOrderTable(table, options); - } - }), - columns: [ - { - title: '', - visible: true, - checkbox: true, - switchable: false, - }, - { - field: 'reference', - title: '{% trans "Purchase Order" %}', - sortable: true, - switchable: false, - formatter: function(value, row) { - - var html = renderLink(value, `/order/purchase-order/${row.pk}/`); - - if (row.overdue) { - html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Order is overdue" %}'); - } - - return html; - } - }, - { - field: 'supplier_detail', - title: '{% trans "Supplier" %}', - sortable: true, - sortName: 'supplier__name', - formatter: function(value, row) { - return imageHoverIcon(row.supplier_detail.image) + renderLink(row.supplier_detail.name, `/company/${row.supplier}/?display=purchase-orders`); - } - }, - { - field: 'supplier_reference', - title: '{% trans "Supplier Reference" %}', - }, - { - field: 'description', - title: '{% trans "Description" %}', - }, - { - field: 'status', - title: '{% trans "Status" %}', - switchable: true, - sortable: true, - formatter: function(value, row) { - return purchaseOrderStatusDisplay(row.status); - } - }, - { - field: 'creation_date', - title: '{% trans "Date" %}', - sortable: true, - formatter: function(value) { - return renderDate(value); - } - }, - { - field: 'target_date', - title: '{% trans "Target Date" %}', - sortable: true, - formatter: function(value) { - return renderDate(value); - } - }, - { - field: 'line_items', - title: '{% trans "Items" %}', - sortable: true, - }, - { - field: 'responsible', - title: '{% trans "Responsible" %}', - switchable: true, - sortable: false, - formatter: function(value, row) { - - if (!row.responsible_detail) { - return '-'; - } - - var html = row.responsible_detail.name; - - if (row.responsible_detail.label == 'group') { - html += ``; - } else { - html += ``; - } - - return html; - } - }, - ], - customView: function(data) { - return `
`; - }, - onRefresh: function() { - loadPurchaseOrderTable(table, options); - }, - onLoadSuccess: function() { - - if (display_mode == 'calendar') { - var el = document.getElementById('purchase-order-calendar'); - - calendar = new FullCalendar.Calendar(el, { - initialView: 'dayGridMonth', - nowIndicator: true, - aspectRatio: 2.5, - locale: options.locale, - datesSet: function() { - buildEvents(calendar); - } - }); - - calendar.render(); - } - } - }); -} - - -/** - * Load a table displaying line items for a particular PurchasesOrder - * @param {String} table - HTML ID tag e.g. '#table' - * @param {Object} options - options which must provide: - * - order (integer PK) - * - supplier (integer PK) - * - allow_edit (boolean) - * - allow_receive (boolean) - */ -function loadPurchaseOrderLineItemTable(table, options={}) { - - options.params = options.params || {}; - - options.params['order'] = options.order; - options.params['part_detail'] = true; - - // Override 'editing' if order is not pending - if (!options.pending && !global_settings.PURCHASEORDER_EDIT_COMPLETED_ORDERS) { - options.allow_edit = false; - } - - var filters = loadTableFilters('purchaseorderlineitem'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - var target = options.filter_target || '#filter-list-purchase-order-lines'; - - setupFilterList('purchaseorderlineitem', $(table), target, {download: true}); - - function setupCallbacks() { - if (options.allow_edit) { - - // Callback for "duplicate" button - $(table).find('.button-line-duplicate').click(function() { - var pk = $(this).attr('pk'); - - inventreeGet(`/api/order/po-line/${pk}/`, {}, { - success: function(data) { - - var fields = poLineItemFields({ - supplier: options.supplier, - }); - - constructForm('{% url "api-po-line-list" %}', { - method: 'POST', - fields: fields, - data: data, - title: '{% trans "Duplicate Line Item" %}', - onSuccess: function(response) { - $(table).bootstrapTable('refresh'); - } - }); - } - }); - }); - - // Callback for "edit" button - $(table).find('.button-line-edit').click(function() { - var pk = $(this).attr('pk'); - - var fields = poLineItemFields(options); - - constructForm(`/api/order/po-line/${pk}/`, { - fields: fields, - title: '{% trans "Edit Line Item" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } - }); - }); - - // Callback for "delete" button - $(table).find('.button-line-delete').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/po-line/${pk}/`, { - method: 'DELETE', - title: '{% trans "Delete Line Item" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } - }); - }); - } - - if (options.allow_receive) { - $(table).find('.button-line-receive').click(function() { - var pk = $(this).attr('pk'); - - var line_item = $(table).bootstrapTable('getRowByUniqueId', pk); - - if (!line_item) { - console.warn('getRowByUniqueId returned null'); - return; - } - - receivePurchaseOrderItems( - options.order, - [ - line_item, - ], - { - success: function() { - // Reload the line item table - $(table).bootstrapTable('refresh'); - - // Reload the "received stock" table - $('#stock-table').bootstrapTable('refresh'); - } - } - ); - }); - } - } - - $(table).inventreeTable({ - onPostBody: setupCallbacks, - name: 'purchaseorderlines', - sidePagination: 'server', - formatNoMatches: function() { - return '{% trans "No line items found" %}'; - }, - queryParams: filters, - original: options.params, - url: '{% url "api-po-line-list" %}', - showFooter: true, - uniqueId: 'pk', - columns: [ - { - checkbox: true, - visible: true, - switchable: false, - }, - { - field: 'part', - sortable: true, - sortName: 'part_name', - title: '{% trans "Part" %}', - switchable: false, - formatter: function(value, row, index, field) { - if (row.part) { - return imageHoverIcon(row.part_detail.thumbnail) + renderLink(row.part_detail.full_name, `/part/${row.part_detail.pk}/`); - } else { - return '-'; - } - }, - footerFormatter: function() { - return '{% trans "Total" %}'; - } - }, - { - field: 'part_detail.description', - title: '{% trans "Description" %}', - }, - { - sortable: true, - sortName: 'SKU', - field: 'supplier_part_detail.SKU', - title: '{% trans "SKU" %}', - formatter: function(value, row, index, field) { - if (value) { - return renderLink(value, `/supplier-part/${row.part}/`); - } else { - return '-'; - } - }, - }, - { - sortable: true, - sortName: 'MPN', - field: 'supplier_part_detail.manufacturer_part_detail.MPN', - title: '{% trans "MPN" %}', - formatter: function(value, row, index, field) { - if (row.supplier_part_detail && row.supplier_part_detail.manufacturer_part) { - return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part}/`); - } else { - return '-'; - } - }, - }, - { - sortable: true, - field: 'reference', - title: '{% trans "Reference" %}', - }, - { - sortable: true, - switchable: false, - field: 'quantity', - title: '{% trans "Quantity" %}', - formatter: function(value, row) { - var units = ''; - - if (row.part_detail.units) { - units = ` ${row.part_detail.units}`; - } - - var data = value; - - if (row.supplier_part_detail.pack_size != 1.0) { - var pack_size = row.supplier_part_detail.pack_size; - var total = value * pack_size; - data += ``; - } - - return data; - }, - footerFormatter: function(data) { - return data.map(function(row) { - return +row['quantity']; - }).reduce(function(sum, i) { - return sum + i; - }, 0); - } - }, - { - sortable: false, - switchable: true, - field: 'supplier_part_detail.pack_size', - title: '{% trans "Pack Quantity" %}', - formatter: function(value, row) { - var units = row.part_detail.units; - - if (units) { - value += ` ${units}`; - } - - return value; - } - }, - { - sortable: true, - field: 'purchase_price', - title: '{% trans "Unit Price" %}', - formatter: function(value, row) { - return formatCurrency(row.purchase_price, { - currency: row.purchase_price_currency, - }); - } - }, - { - field: 'total_price', - sortable: true, - title: '{% trans "Total Price" %}', - formatter: function(value, row) { - return formatCurrency(row.purchase_price * row.quantity, { - currency: row.purchase_price_currency - }); - }, - footerFormatter: function(data) { - return calculateTotalPrice( - data, - function(row) { - return row.purchase_price ? row.purchase_price * row.quantity : null; - }, - function(row) { - return row.purchase_price_currency; - } - ); - } - }, - { - sortable: true, - field: 'target_date', - switchable: true, - title: '{% trans "Target Date" %}', - formatter: function(value, row) { - if (row.target_date) { - var html = renderDate(row.target_date); - - if (row.overdue) { - html += ``; - } - - return html; - - } else if (row.order_detail && row.order_detail.target_date) { - return `${renderDate(row.order_detail.target_date)}`; - } else { - return '-'; - } - } - }, - { - sortable: false, - field: 'received', - switchable: false, - title: '{% trans "Received" %}', - formatter: function(value, row, index, field) { - return makeProgressBar(row.received, row.quantity, { - id: `order-line-progress-${row.pk}`, - }); - }, - sorter: function(valA, valB, rowA, rowB) { - - if (rowA.received == 0 && rowB.received == 0) { - return (rowA.quantity > rowB.quantity) ? 1 : -1; - } - - var progressA = parseFloat(rowA.received) / rowA.quantity; - var progressB = parseFloat(rowB.received) / rowB.quantity; - - return (progressA < progressB) ? 1 : -1; - } - }, - { - field: 'destination', - title: '{% trans "Destination" %}', - formatter: function(value, row) { - if (value) { - return renderLink(row.destination_detail.pathstring, `/stock/location/${value}/`); - } else { - return '-'; - } - } - }, - { - field: 'notes', - title: '{% trans "Notes" %}', - }, - { - switchable: false, - field: 'buttons', - title: '', - formatter: function(value, row, index, field) { - var html = `
`; - - var pk = row.pk; - - if (options.allow_receive && row.received < row.quantity) { - html += makeIconButton('fa-sign-in-alt icon-green', 'button-line-receive', pk, '{% trans "Receive line item" %}'); - } - - if (options.allow_edit) { - html += makeIconButton('fa-clone', 'button-line-duplicate', pk, '{% trans "Duplicate line item" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-line-edit', pk, '{% trans "Edit line item" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-line-delete', pk, '{% trans "Delete line item" %}'); - } - - html += `
`; - - return html; - }, - } - ] - }); - -} - - -/** - * Load a table displaying lines for a particular PurchaseOrder - * - * @param {String} table : HTML ID tag e.g. '#table' - * @param {Object} options : object which contains: - * - order {integer} : pk of the PurchaseOrder - * - status: {integer} : status code for the order - */ -function loadPurchaseOrderExtraLineTable(table, options={}) { - - options.table = table; - - if (!options.pending && !global_settings.PURCHASEORDER_EDIT_COMPLETED_ORDERS) { - options.allow_edit = false; - } - - options.params = options.params || {}; - - if (!options.order) { - console.error('function called without order ID'); - return; - } - - if (!options.status) { - console.error('function called without order status'); - return; - } - - options.params.order = options.order; - options.params.part_detail = true; - options.params.allocations = true; - - var filters = loadTableFilters('purchaseorderextraline'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - options.url = options.url || '{% url "api-po-extra-line-list" %}'; - - var filter_target = options.filter_target || '#filter-list-purchase-order-extra-lines'; - - setupFilterList('purchaseorderextraline', $(table), filter_target); - - // Table columns to display - var columns = [ - { - sortable: true, - field: 'reference', - title: '{% trans "Reference" %}', - switchable: true, - }, - { - sortable: true, - field: 'quantity', - title: '{% trans "Quantity" %}', - footerFormatter: function(data) { - return data.map(function(row) { - return +row['quantity']; - }).reduce(function(sum, i) { - return sum + i; - }, 0); - }, - switchable: false, - }, - { - sortable: true, - field: 'price', - title: '{% trans "Unit Price" %}', - formatter: function(value, row) { - return formatCurrency(row.price, { - currency: row.price_currency, - }); - } - }, - { - field: 'total_price', - sortable: true, - title: '{% trans "Total Price" %}', - formatter: function(value, row) { - return formatCurrency(row.price * row.quantity, { - currency: row.price_currency, - }); - }, - footerFormatter: function(data) { - return calculateTotalPrice( - data, - function(row) { - return row.price ? row.price * row.quantity : null; - }, - function(row) { - return row.price_currency; - } - ); - } - } - ]; - - columns.push({ - field: 'notes', - title: '{% trans "Notes" %}', - }); - - columns.push({ - field: 'buttons', - switchable: false, - formatter: function(value, row, index, field) { - - var html = `
`; - - var pk = row.pk; - - if (options.allow_edit) { - html += makeIconButton('fa-clone', 'button-duplicate', pk, '{% trans "Duplicate line" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-edit', pk, '{% trans "Edit line" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-delete', pk, '{% trans "Delete line" %}', ); - } - - html += `
`; - - return html; - } - }); - - function reloadTable() { - $(table).bootstrapTable('refresh'); - reloadTotal(); - } - - // Configure callback functions once the table is loaded - function setupCallbacks() { - - // Callback for duplicating lines - $(table).find('.button-duplicate').click(function() { - var pk = $(this).attr('pk'); - - inventreeGet(`/api/order/po-extra-line/${pk}/`, {}, { - success: function(data) { - - var fields = extraLineFields(); - - constructForm('{% url "api-po-extra-line-list" %}', { - method: 'POST', - fields: fields, - data: data, - title: '{% trans "Duplicate Line" %}', - onSuccess: function(response) { - $(table).bootstrapTable('refresh'); - } - }); - } - }); - }); - - // Callback for editing lines - $(table).find('.button-edit').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/po-extra-line/${pk}/`, { - fields: { - quantity: {}, - reference: {}, - price: {}, - price_currency: {}, - notes: {}, - }, - title: '{% trans "Edit Line" %}', - onSuccess: reloadTable, - }); - }); - - // Callback for deleting lines - $(table).find('.button-delete').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/po-extra-line/${pk}/`, { - method: 'DELETE', - title: '{% trans "Delete Line" %}', - onSuccess: reloadTable, - }); - }); - } - - $(table).inventreeTable({ - onPostBody: setupCallbacks, - name: 'purchaseorderextraline', - sidePagination: 'client', - formatNoMatches: function() { - return '{% trans "No matching line" %}'; - }, - queryParams: filters, - original: options.params, - url: options.url, - showFooter: true, - uniqueId: 'pk', - detailViewByClick: false, - columns: columns, - }); -} - - -/* - * Load table displaying list of sales orders - */ -function loadSalesOrderTable(table, options) { - - // Ensure the table starts in a known state - $(table).bootstrapTable('destroy'); - - options.params = options.params || {}; - options.params['customer_detail'] = true; - - var filters = loadTableFilters('salesorder'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - options.url = options.url || '{% url "api-so-list" %}'; - - var target = '#filter-list-salesorder'; - - setupFilterList('salesorder', $(table), target, {download: true}); - - var display_mode = inventreeLoad('salesorder-table-display-mode', 'list'); - - function buildEvents(calendar) { - - var start = startDate(calendar); - var end = endDate(calendar); - - clearEvents(calendar); - - // Extract current filters from table - var table_options = $(table).bootstrapTable('getOptions'); - var filters = table_options.query_params || {}; - - filters.customer_detail = true; - filters.min_date = start; - filters.max_date = end; - - // Request orders from the server within specified date range - inventreeGet( - '{% url "api-so-list" %}', - filters, - { - success: function(response) { - - for (var idx = 0; idx < response.length; idx++) { - var order = response[idx]; - - var date = order.creation_date; - - if (order.shipment_date) { - date = order.shipment_date; - } else if (order.target_date) { - date = order.target_date; - } - - var title = `${order.reference} - ${order.customer_detail.name}`; - - // Default color is blue - var color = '#4c68f5'; - - // Overdue orders are red - if (order.overdue) { - color = '#c22525'; - } else if (order.status == {{ SalesOrderStatus.SHIPPED }}) { - color = '#25c235'; - } - - var event = { - title: title, - start: date, - end: date, - url: `/order/sales-order/${order.pk}/`, - backgroundColor: color, - }; - - calendar.addEvent(event); - } - } - } - ); - } - - $(table).inventreeTable({ - url: options.url, - queryParams: filters, - name: 'salesorder', - groupBy: false, - sidePagination: 'server', - original: options.params, - showColums: display_mode != 'calendar', - search: display_mode != 'calendar', - showCustomViewButton: false, - showCustomView: display_mode == 'calendar', - disablePagination: display_mode == 'calendar', - formatNoMatches: function() { - return '{% trans "No sales orders found" %}'; - }, - buttons: constructOrderTableButtons({ - prefix: 'salesorder', - disableTreeView: true, - callback: function() { - // Reload the entire table - loadSalesOrderTable(table, options); - }, - }), - customView: function(data) { - return `
`; - }, - onRefresh: function() { - loadSalesOrderTable(table, options); - }, - onLoadSuccess: function() { - - if (display_mode == 'calendar') { - var el = document.getElementById('purchase-order-calendar'); - - calendar = new FullCalendar.Calendar(el, { - initialView: 'dayGridMonth', - nowIndicator: true, - aspectRatio: 2.5, - locale: options.locale, - datesSet: function() { - buildEvents(calendar); - } - }); - - calendar.render(); - } - }, - columns: [ - { - title: '', - checkbox: true, - visible: true, - switchable: false, - }, - { - sortable: true, - field: 'reference', - title: '{% trans "Sales Order" %}', - formatter: function(value, row) { - var html = renderLink(value, `/order/sales-order/${row.pk}/`); - - if (row.overdue) { - html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Order is overdue" %}'); - } - - return html; - }, - }, - { - sortable: true, - sortName: 'customer__name', - field: 'customer_detail', - title: '{% trans "Customer" %}', - formatter: function(value, row) { - - if (!row.customer_detail) { - return '{% trans "Invalid Customer" %}'; - } - - return imageHoverIcon(row.customer_detail.image) + renderLink(row.customer_detail.name, `/company/${row.customer}/sales-orders/`); - } - }, - { - sortable: true, - field: 'customer_reference', - title: '{% trans "Customer Reference" %}', - }, - { - sortable: false, - field: 'description', - title: '{% trans "Description" %}', - }, - { - sortable: true, - field: 'status', - title: '{% trans "Status" %}', - formatter: function(value, row) { - return salesOrderStatusDisplay(row.status); - } - }, - { - sortable: true, - field: 'creation_date', - title: '{% trans "Creation Date" %}', - formatter: function(value) { - return renderDate(value); - } - }, - { - sortable: true, - field: 'target_date', - title: '{% trans "Target Date" %}', - formatter: function(value) { - return renderDate(value); - } - }, - { - sortable: true, - field: 'shipment_date', - title: '{% trans "Shipment Date" %}', - formatter: function(value) { - return renderDate(value); - } - }, - { - sortable: true, - field: 'line_items', - title: '{% trans "Items" %}' - }, - ], - }); -} - - -/* - * Load a table displaying Shipment information against a particular order - */ -function loadSalesOrderShipmentTable(table, options={}) { - - options.table = table; - - options.params = options.params || {}; - - // Filter by order - options.params.order = options.order; - - // Filter by "shipped" status - options.params.shipped = options.shipped || false; - - var filters = loadTableFilters('salesordershipment'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - setupFilterList('salesordershipment', $(table), options.filter_target); - - // Add callbacks for expand / collapse buttons - var prefix = options.shipped ? 'completed' : 'pending'; - - $(`#${prefix}-shipments-expand`).click(function() { - $(table).bootstrapTable('expandAllRows'); - }); - - $(`#${prefix}-shipments-collapse`).click(function() { - $(table).bootstrapTable('collapseAllRows'); - }); - - function makeShipmentActions(row) { - // Construct "actions" for the given shipment row - var pk = row.pk; - - var html = `
`; - - html += makeIconButton('fa-edit icon-blue', 'button-shipment-edit', pk, '{% trans "Edit shipment" %}'); - - if (!options.shipped) { - html += makeIconButton('fa-truck icon-green', 'button-shipment-ship', pk, '{% trans "Complete shipment" %}'); - } - - var enable_delete = row.allocations && row.allocations.length == 0; - - html += makeIconButton('fa-trash-alt icon-red', 'button-shipment-delete', pk, '{% trans "Delete shipment" %}', {disabled: !enable_delete}); - - html += `
`; - - return html; - - } - - function setupShipmentCallbacks() { - // Setup action button callbacks - - $(table).find('.button-shipment-edit').click(function() { - var pk = $(this).attr('pk'); - - var fields = salesOrderShipmentFields(); - - delete fields.order; - - constructForm(`/api/order/so/shipment/${pk}/`, { - fields: fields, - title: '{% trans "Edit Shipment" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } - }); - }); - - $(table).find('.button-shipment-ship').click(function() { - var pk = $(this).attr('pk'); - - completeShipment(pk); - }); - - $(table).find('.button-shipment-delete').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/so/shipment/${pk}/`, { - title: '{% trans "Delete Shipment" %}', - method: 'DELETE', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } - }); - }); - } - - $(table).inventreeTable({ - url: '{% url "api-so-shipment-list" %}', - queryParams: filters, - original: options.params, - name: options.name || 'salesordershipment', - search: false, - paginationVAlign: 'bottom', - showColumns: true, - detailView: true, - detailViewByClick: false, - detailFilter: function(index, row) { - return row.allocations.length > 0; - }, - detailFormatter: function(index, row, element) { - return showAllocationSubTable(index, row, element, options); - }, - onPostBody: function() { - setupShipmentCallbacks(); - - // Auto-expand rows on the "pending" table - if (!options.shipped) { - $(table).bootstrapTable('expandAllRows'); - } - }, - formatNoMatches: function() { - return '{% trans "No matching shipments found" %}'; - }, - columns: [ - { - visible: false, - checkbox: true, - switchable: false, - }, - { - field: 'reference', - title: '{% trans "Shipment Reference" %}', - switchable: false, - }, - { - field: 'allocations', - title: '{% trans "Items" %}', - switchable: false, - sortable: true, - formatter: function(value, row) { - if (row && row.allocations) { - return row.allocations.length; - } else { - return '-'; - } - } - }, - { - field: 'shipment_date', - title: '{% trans "Shipment Date" %}', - sortable: true, - formatter: function(value, row) { - if (value) { - return renderDate(value); - } else { - return '{% trans "Not shipped" %}'; - } - } - }, - { - field: 'tracking_number', - title: '{% trans "Tracking" %}', - }, - { - field: 'invoice_number', - title: '{% trans "Invoice" %}', - }, - { - field: 'link', - title: '{% trans "Link" %}', - formatter: function(value) { - if (value) { - return renderLink(value, value); - } else { - return '-'; - } - } - }, - { - field: 'notes', - title: '{% trans "Notes" %}', - visible: false, - switchable: false, - // TODO: Implement 'notes' field - }, - { - title: '', - switchable: false, - formatter: function(value, row) { - return makeShipmentActions(row); - } - } - ], - }); -} - - -/** - * Allocate stock items against a SalesOrder - * - * arguments: - * - order_id: The ID / PK value for the SalesOrder - * - lines: A list of SalesOrderLineItem objects to be allocated - * - * options: - * - source_location: ID / PK of the top-level StockLocation to source stock from (or null) - */ -function allocateStockToSalesOrder(order_id, line_items, options={}) { - - function renderLineItemRow(line_item, quantity) { - // Function to render a single line_item row - - var pk = line_item.pk; - - var part = line_item.part_detail; - - var thumb = thumbnailImage(part.thumbnail || part.image); - - var delete_button = `
`; - - delete_button += makeIconButton( - 'fa-times icon-red', - 'button-row-remove', - pk, - '{% trans "Remove row" %}', - ); - - delete_button += '
'; - - var quantity_input = constructField( - `items_quantity_${pk}`, - { - type: 'decimal', - min_value: 0, - value: quantity || 0, - title: '{% trans "Specify stock allocation quantity" %}', - required: true, - }, - { - hideLabels: true, - } - ); - - var stock_input = constructField( - `items_stock_item_${pk}`, - { - type: 'related field', - required: 'true', - }, - { - hideLabels: true, - } - ); - - var html = ` - - - ${thumb} ${part.full_name} - - - ${stock_input} - - - ${quantity_input} - - - - - {% trans "Part" %} - {% trans "Stock Item" %} - {% trans "Quantity" %} - - - - ${table_entries} - - `; - - constructForm(`/api/order/so/${order_id}/allocate/`, { - method: 'POST', - fields: { - shipment: { - filters: { - order: order_id, - shipped: false, - }, - value: options.shipment || null, - auto_fill: true, - secondary: { - method: 'POST', - title: '{% trans "Add Shipment" %}', - fields: function() { - var ref = null; - - // TODO: Refactor code for getting next shipment number - inventreeGet( - '{% url "api-so-shipment-list" %}', - { - order: options.order, - }, - { - async: false, - success: function(results) { - // "predict" the next reference number - ref = results.length + 1; - - var found = false; - - while (!found) { - - var no_match = true; - - for (var ii = 0; ii < results.length; ii++) { - if (ref.toString() == results[ii].reference.toString()) { - no_match = false; - break; - } - } - - if (no_match) { - break; - } else { - ref++; - } - } - } - } - ); - - var fields = salesOrderShipmentFields(options); - - fields.reference.value = ref; - fields.reference.prefix = options.reference; - - return fields; - } - } - } - }, - preFormContent: html, - confirm: true, - confirmMessage: '{% trans "Confirm stock allocation" %}', - title: '{% trans "Allocate Stock Items to Sales Order" %}', - afterRender: function(fields, opts) { - - // Initialize source location field - var take_from_field = { - name: 'take_from', - model: 'stocklocation', - api_url: '{% url "api-location-list" %}', - required: false, - type: 'related field', - value: options.source_location || null, - noResults: function(query) { - return '{% trans "No matching stock locations" %}'; - }, - }; - - initializeRelatedField( - take_from_field, - null, - opts - ); - - // Add callback to "clear" button for take_from field - addClearCallback( - 'take_from', - take_from_field, - opts, - ); - - // Initialize fields for each line item - line_items.forEach(function(line_item) { - var pk = line_item.pk; - - initializeRelatedField( - { - name: `items_stock_item_${pk}`, - api_url: '{% url "api-stock-list" %}', - filters: { - part: line_item.part, - in_stock: true, - part_detail: true, - location_detail: true, - available: true, - }, - model: 'stockitem', - required: true, - render_part_detail: true, - render_location_detail: true, - auto_fill: true, - onSelect: function(data, field, opts) { - // Adjust the 'quantity' field based on availability - - if (!('quantity' in data)) { - return; - } - - // Calculate the available quantity - var available = Math.max((data.quantity || 0) - (data.allocated || 0), 0); - - // Remaining quantity to be allocated? - var remaining = Math.max(line_item.quantity - line_item.shipped - line_item.allocated, 0); - - // Maximum amount that we need - var desired = Math.min(available, remaining); - - updateFieldValue(`items_quantity_${pk}`, desired, {}, opts); - - }, - adjustFilters: function(filters) { - // Restrict query to the selected location - var location = getFormFieldValue( - 'take_from', - {}, - { - modal: opts.modal, - } - ); - - filters.location = location; - filters.cascade = true; - - // Exclude expired stock? - if (global_settings.STOCK_ENABLE_EXPIRY && !global_settings.STOCK_ALLOW_EXPIRED_SALE) { - filters.expired = false; - } - - return filters; - }, - noResults: function(query) { - return '{% trans "No matching stock items" %}'; - } - }, - null, - opts - ); - }); - - // Add remove-row button callbacks - $(opts.modal).find('.button-row-remove').click(function() { - var pk = $(this).attr('pk'); - - $(opts.modal).find(`#allocation_row_${pk}`).remove(); - }); - }, - onSubmit: function(fields, opts) { - // Extract data elements from the form - var data = { - items: [], - shipment: getFormFieldValue( - 'shipment', - {}, - opts - ) - }; - - var item_pk_values = []; - - line_items.forEach(function(item) { - - var pk = item.pk; - - var quantity = getFormFieldValue( - `items_quantity_${pk}`, - {}, - opts - ); - - var stock_item = getFormFieldValue( - `items_stock_item_${pk}`, - {}, - opts - ); - - if (quantity != null) { - data.items.push({ - line_item: pk, - stock_item: stock_item, - quantity: quantity, - }); - - item_pk_values.push(pk); - } - }); - - // Provide nested values - opts.nested = { - 'items': item_pk_values - }; - - inventreePut( - opts.url, - data, - { - method: 'POST', - success: function(response) { - $(opts.modal).modal('hide'); - - if (options.success) { - options.success(response); - } - }, - error: function(xhr) { - switch (xhr.status) { - case 400: - handleFormErrors(xhr.responseJSON, fields, opts); - break; - default: - $(opts.modal).modal('hide'); - showApiError(xhr); - break; - } - } - } - ); - }, - }); -} - - -function loadSalesOrderAllocationTable(table, options={}) { - /** - * Load a table with SalesOrderAllocation items - */ - - options.params = options.params || {}; - - options.params['location_detail'] = true; - options.params['part_detail'] = true; - options.params['item_detail'] = true; - options.params['order_detail'] = true; - - var filters = loadTableFilters('salesorderallocation'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - setupFilterList('salesorderallocation', $(table)); - - $(table).inventreeTable({ - url: '{% url "api-so-allocation-list" %}', - queryParams: filters, - name: options.name || 'salesorderallocation', - groupBy: false, - search: false, - paginationVAlign: 'bottom', - original: options.params, - formatNoMatches: function() { - return '{% trans "No sales order allocations found" %}'; - }, - columns: [ - { - field: 'pk', - visible: false, - switchable: false, - }, - { - field: 'order', - switchable: false, - title: '{% trans "Order" %}', - formatter: function(value, row) { - - var ref = `${row.order_detail.reference}`; - - return renderLink(ref, `/order/sales-order/${row.order}/`); - } - }, - { - field: 'item', - title: '{% trans "Stock Item" %}', - formatter: function(value, row) { - // Render a link to the particular stock item - - var link = `/stock/item/${row.item}/`; - var text = `{% trans "Stock Item" %} ${row.item}`; - - return renderLink(text, link); - } - }, - { - field: 'location', - title: '{% trans "Location" %}', - formatter: function(value, row) { - return locationDetail(row.item_detail, true); - } - }, - { - field: 'quantity', - title: '{% trans "Quantity" %}', - sortable: true, - }, - ] - }); -} - - -/** - * Display an "allocations" sub table, showing stock items allocated againt a sales order - * @param {*} index - * @param {*} row - * @param {*} element - */ -function showAllocationSubTable(index, row, element, options) { - - // Construct a sub-table element - var html = ` -
-
-
`; - - element.html(html); - - var table = $(`#allocation-table-${row.pk}`); - - function setupCallbacks() { - // Add callbacks for 'edit' buttons - table.find('.button-allocation-edit').click(function() { - - var pk = $(this).attr('pk'); - - // Edit the sales order alloction - constructForm( - `/api/order/so-allocation/${pk}/`, - { - fields: { - quantity: {}, - }, - title: '{% trans "Edit Stock Allocation" %}', - onSuccess: function() { - // Refresh the parent table - $(options.table).bootstrapTable('refresh'); - }, - }, - ); - }); - - // Add callbacks for 'delete' buttons - table.find('.button-allocation-delete').click(function() { - var pk = $(this).attr('pk'); - - constructForm( - `/api/order/so-allocation/${pk}/`, - { - method: 'DELETE', - confirmMessage: '{% trans "Confirm Delete Operation" %}', - title: '{% trans "Delete Stock Allocation" %}', - onSuccess: function() { - // Refresh the parent table - $(options.table).bootstrapTable('refresh'); - } - } - ); - }); - } - - table.bootstrapTable({ - onPostBody: setupCallbacks, - data: row.allocations, - showHeader: true, - columns: [ - { - field: 'part_detail', - title: '{% trans "Part" %}', - formatter: function(part, row) { - return imageHoverIcon(part.thumbnail) + renderLink(part.full_name, `/part/${part.pk}/`); - } - }, - { - field: 'allocated', - title: '{% trans "Stock Item" %}', - formatter: function(value, row, index, field) { - var text = ''; - - var item = row.item_detail; - - var text = `{% trans "Quantity" %}: ${row.quantity}`; - - if (item && item.serial != null && row.quantity == 1) { - text = `{% trans "Serial Number" %}: ${item.serial}`; - } - - return renderLink(text, `/stock/item/${row.item}/`); - }, - }, - { - field: 'location', - title: '{% trans "Location" %}', - formatter: function(value, row, index, field) { - - if (row.shipment_date) { - return `{% trans "Shipped to customer" %} - ${row.shipment_date}`; - } else if (row.location) { - // Location specified - return renderLink( - row.location_detail.pathstring || '{% trans "Location" %}', - `/stock/location/${row.location}/` - ); - } else { - return `{% trans "Stock location not specified" %}`; - } - }, - }, - { - field: 'buttons', - title: '', - formatter: function(value, row, index, field) { - - var html = `
`; - var pk = row.pk; - - if (row.shipment_date) { - html += `{% trans "Shipped" %}`; - } else { - html += makeIconButton('fa-edit icon-blue', 'button-allocation-edit', pk, '{% trans "Edit stock allocation" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-allocation-delete', pk, '{% trans "Delete stock allocation" %}'); - } - - html += '
'; - - return html; - }, - }, - ], - }); -} - -/** - * Display a "fulfilled" sub table, showing stock items fulfilled against a purchase order - */ -function showFulfilledSubTable(index, row, element, options) { - // Construct a table showing stock items which have been fulfilled against this line item - - if (!options.order) { - return 'ERROR: Order ID not supplied'; - } - - var id = `fulfilled-table-${row.pk}`; - - var html = ` -
- -
-
`; - - element.html(html); - - $(`#${id}`).bootstrapTable({ - url: '{% url "api-stock-list" %}', - queryParams: { - part: row.part, - sales_order: options.order, - location_detail: true, - }, - showHeader: true, - columns: [ - { - field: 'pk', - visible: false, - }, - { - field: 'stock', - title: '{% trans "Stock Item" %}', - formatter: function(value, row) { - var text = ''; - if (row.serial && row.quantity == 1) { - text = `{% trans "Serial Number" %}: ${row.serial}`; - } else { - text = `{% trans "Quantity" %}: ${row.quantity}`; - } - - return renderLink(text, `/stock/item/${row.pk}/`); - }, - }, - { - field: 'location', - title: '{% trans "Location" %}', - formatter: function(value, row) { - if (row.customer) { - return renderLink( - '{% trans "Shipped to customer" %}', - `/company/${row.customer}/` - ); - } else if (row.location && row.location_detail) { - return renderLink( - row.location_detail.pathstring, - `/stock/location/${row.location}`, - ); - } else { - return `{% trans "Stock location not specified" %}`; - } - } - } - ], - }); -} - var TotalPriceRef = ''; // reference to total price field var TotalPriceOptions = {}; // options to reload the price @@ -3777,731 +155,204 @@ function reloadTotal() { }; -/** - * Load a table displaying line items for a particular SalesOrder +/* + * Load a table displaying "extra" line items for a given order. + * Used for all external order types (e.g. PurchaseOrder / SalesOrder / ReturnOrder) * - * @param {String} table : HTML ID tag e.g. '#table' - * @param {Object} options : object which contains: - * - order {integer} : pk of the SalesOrder - * - status: {integer} : status code for the order + * options: + * - table: The DOM ID of the table element + * - order: The ID of the related order (required) + * - name: The unique 'name' for this table + * - url: The API URL for the extra line item model (required) + * - filtertarget: The DOM ID for the filter list element */ -function loadSalesOrderLineItemTable(table, options={}) { +function loadExtraLineTable(options={}) { - options.table = table; - - if (!options.pending && !global_settings.SALESORDER_EDIT_COMPLETED_ORDERS) { - options.allow_edit = false; - } + const table = options.table; options.params = options.params || {}; - if (!options.order) { - console.error('function called without order ID'); - return; - } - - if (!options.status) { - console.error('function called without order status'); - return; - } - + // Filtering options.params.order = options.order; - options.params.part_detail = true; - options.params.allocations = true; - var filters = loadTableFilters('salesorderlineitem'); + var filters = {}; - for (var key in options.params) { - filters[key] = options.params[key]; + if (options.name) { + filters = loadTableFilters(options.name); } - options.url = options.url || '{% url "api-so-line-list" %}'; + Object.assign(filters, options.params); - var filter_target = options.filter_target || '#filter-list-sales-order-lines'; - - setupFilterList('salesorderlineitem', $(table), filter_target); - - // Is the order pending? - var pending = options.pending; - - // Has the order shipped? - var shipped = options.status == {{ SalesOrderStatus.SHIPPED }}; - - // Show detail view if the PurchaseOrder is PENDING or SHIPPED - var show_detail = pending || shipped; - - // Add callbacks for expand / collapse buttons - $('#sales-lines-expand').click(function() { - $(table).bootstrapTable('expandAllRows'); - }); - - $('#sales-lines-collapse').click(function() { - $(table).bootstrapTable('collapseAllRows'); - }); - - // Table columns to display - var columns = [ - /* + setupFilterList( + options.name, + $(table), + options.filtertarget, { - checkbox: true, - visible: true, - switchable: false, - }, - */ - { - sortable: true, - sortName: 'part_detail.name', - field: 'part', - title: '{% trans "Part" %}', - switchable: false, - formatter: function(value, row, index, field) { - if (row.part) { - return imageHoverIcon(row.part_detail.thumbnail) + renderLink(row.part_detail.full_name, `/part/${value}/`); - } else { - return '-'; - } - }, - footerFormatter: function() { - return '{% trans "Total" %}'; - }, - }, - { - sortable: true, - field: 'reference', - title: '{% trans "Reference" %}', - switchable: true, - }, - { - sortable: true, - field: 'quantity', - title: '{% trans "Quantity" %}', - footerFormatter: function(data) { - return data.map(function(row) { - return +row['quantity']; - }).reduce(function(sum, i) { - return sum + i; - }, 0); - }, - switchable: false, - }, - { - sortable: true, - field: 'sale_price', - title: '{% trans "Unit Price" %}', - formatter: function(value, row) { - return formatCurrency(row.sale_price, { - currency: row.sale_price_currency - }); - } - }, - { - field: 'total_price', - sortable: true, - title: '{% trans "Total Price" %}', - formatter: function(value, row) { - return formatCurrency(row.sale_price * row.quantity, { - currency: row.sale_price_currency, - }); - }, - footerFormatter: function(data) { - return calculateTotalPrice( - data, - function(row) { - return row.sale_price ? row.sale_price * row.quantity : null; - }, - function(row) { - return row.sale_price_currency; - } - ); - } - }, - { - field: 'target_date', - title: '{% trans "Target Date" %}', - sortable: true, - switchable: true, - formatter: function(value, row) { - if (row.target_date) { - var html = renderDate(row.target_date); - - if (row.overdue) { - html += ``; - } - - return html; - - } else if (row.order_detail && row.order_detail.target_date) { - return `${renderDate(row.order_detail.target_date)}`; - } else { - return '-'; - } - } + download: true } - ]; + ); - if (pending) { - columns.push( - { - field: 'stock', - title: '{% trans "Available Stock" %}', - formatter: function(value, row) { - var available = row.available_stock; - var required = Math.max(row.quantity - row.allocated - row.shipped, 0); - - var html = ''; - - if (available > 0) { - var url = `/part/${row.part}/?display=part-stock`; - - var text = available; - - html = renderLink(text, url); - } else { - html += `{% trans "No Stock Available" %}`; - } - - if (required > 0) { - if (available >= required) { - html += ``; - } else { - html += ``; - } - } - - return html; - }, - }, - ); - - columns.push( - { - field: 'allocated', - title: '{% trans "Allocated" %}', - switchable: false, - sortable: true, - formatter: function(value, row, index, field) { - return makeProgressBar(row.allocated, row.quantity, { - id: `order-line-progress-${row.pk}`, - }); - }, - sorter: function(valA, valB, rowA, rowB) { - - var A = rowA.allocated; - var B = rowB.allocated; - - if (A == 0 && B == 0) { - return (rowA.quantity > rowB.quantity) ? 1 : -1; - } - - var progressA = parseFloat(A) / rowA.quantity; - var progressB = parseFloat(B) / rowB.quantity; - - return (progressA < progressB) ? 1 : -1; - } - }, - ); - } - - columns.push({ - field: 'shipped', - title: '{% trans "Shipped" %}', - switchable: false, - sortable: true, - formatter: function(value, row) { - return makeProgressBar(row.shipped, row.quantity, { - id: `order-line-shipped-${row.pk}` - }); - }, - sorter: function(valA, valB, rowA, rowB) { - var A = rowA.shipped; - var B = rowB.shipped; - - if (A == 0 && B == 0) { - return (rowA.quantity > rowB.quantity) ? 1 : -1; - } - - var progressA = parseFloat(A) / rowA.quantity; - var progressB = parseFloat(B) / rowB.quantity; - - return (progressA < progressB) ? 1 : -1; - } - }); - - columns.push({ - field: 'notes', - title: '{% trans "Notes" %}', - }); - - if (pending) { - columns.push({ - field: 'buttons', - switchable: false, - formatter: function(value, row, index, field) { - - var html = `
`; - - var pk = row.pk; - - if (row.part) { - var part = row.part_detail; - - if (part.trackable) { - html += makeIconButton('fa-hashtag icon-green', 'button-add-by-sn', pk, '{% trans "Allocate serial numbers" %}'); - } - - html += makeIconButton('fa-sign-in-alt icon-green', 'button-add', pk, '{% trans "Allocate stock" %}'); - - if (part.purchaseable) { - html += makeIconButton('fa-shopping-cart', 'button-buy', row.part, '{% trans "Purchase stock" %}'); - } - - if (part.assembly) { - html += makeIconButton('fa-tools', 'button-build', row.part, '{% trans "Build stock" %}'); - } - - html += makeIconButton('fa-dollar-sign icon-green', 'button-price', pk, '{% trans "Calculate price" %}'); - } - - html += makeIconButton('fa-clone', 'button-duplicate', pk, '{% trans "Duplicate line item" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-edit', pk, '{% trans "Edit line item" %}'); - - var delete_disabled = false; - - var title = '{% trans "Delete line item" %}'; - - if (!!row.shipped) { - delete_disabled = true; - title = '{% trans "Cannot be deleted as items have been shipped" %}'; - } else if (!!row.allocated) { - delete_disabled = true; - title = '{% trans "Cannot be deleted as items have been allocated" %}'; - } - - // Prevent deletion of the line item if items have been allocated or shipped! - html += makeIconButton('fa-trash-alt icon-red', 'button-delete', pk, title, {disabled: delete_disabled}); - - html += `
`; - - return html; - } - }); - } - - function reloadTable() { + // Helper function to reload table + function reloadExtraLineTable() { $(table).bootstrapTable('refresh'); - reloadTotal(); + + if (options.pricing) { + reloadTotal(); + } } // Configure callback functions once the table is loaded function setupCallbacks() { - // Callback for duplicating line items - $(table).find('.button-duplicate').click(function() { - var pk = $(this).attr('pk'); + if (options.allow_edit) { - inventreeGet(`/api/order/so-line/${pk}/`, {}, { - success: function(data) { + // Callback to duplicate line item + $(table).find('.button-duplicate').click(function() { + var pk = $(this).attr('pk'); - var fields = soLineItemFields(); + inventreeGet(`${options.url}${pk}/`, {}, { + success: function(data) { - constructForm('{% url "api-so-line-list" %}', { - method: 'POST', - fields: fields, - data: data, - title: '{% trans "Duplicate Line Item" %}', - onSuccess: function(response) { - $(table).bootstrapTable('refresh'); - } - }); - } - }); - }); + var fields = extraLineFields(); - // Callback for editing line items - $(table).find('.button-edit').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/so-line/${pk}/`, { - fields: { - quantity: {}, - reference: {}, - sale_price: {}, - sale_price_currency: {}, - target_date: {}, - notes: {}, - }, - title: '{% trans "Edit Line Item" %}', - onSuccess: reloadTable, - }); - }); - - // Callback for deleting line items - $(table).find('.button-delete').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/so-line/${pk}/`, { - method: 'DELETE', - title: '{% trans "Delete Line Item" %}', - onSuccess: reloadTable, - }); - }); - - // Callback for allocating stock items by serial number - $(table).find('.button-add-by-sn').click(function() { - var pk = $(this).attr('pk'); - - inventreeGet(`/api/order/so-line/${pk}/`, {}, - { - success: function(response) { - - constructForm(`/api/order/so/${options.order}/allocate-serials/`, { + constructForm(options.url, { method: 'POST', - title: '{% trans "Allocate Serial Numbers" %}', - fields: { - line_item: { - value: pk, - hidden: true, - }, - quantity: {}, - serial_numbers: {}, - shipment: { - filters: { - order: options.order, - shipped: false, - }, - auto_fill: true, - } - }, - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + fields: fields, + data: data, + title: '{% trans "Duplicate Line" %}', + onSuccess: reloadExtraLineTable, }); } - } - ); - }); - - // Callback for allocation stock items to the order - $(table).find('.button-add').click(function() { - var pk = $(this).attr('pk'); - - var line_item = $(table).bootstrapTable('getRowByUniqueId', pk); - - allocateStockToSalesOrder( - options.order, - [ - line_item - ], - { - order: options.order, - reference: options.reference, - success: function() { - // Reload this table - $(table).bootstrapTable('refresh'); - - // Reload the pending shipment table - $('#pending-shipments-table').bootstrapTable('refresh'); - } - } - ); - }); - - // Callback for creating a new build - $(table).find('.button-build').click(function() { - var pk = $(this).attr('pk'); - - // Extract the row data from the table! - var idx = $(this).closest('tr').attr('data-index'); - - var row = $(table).bootstrapTable('getData')[idx]; - - var quantity = 1; - - if (row.allocated < row.quantity) { - quantity = row.quantity - row.allocated; - } - - // Create a new build order - newBuildOrder({ - part: pk, - sales_order: options.order, - quantity: quantity, - success: reloadTable + }); }); - }); - // Callback for purchasing parts - $(table).find('.button-buy').click(function() { - var pk = $(this).attr('pk'); + // Callback to edit line item + // Callback for editing lines + $(table).find('.button-edit').click(function() { + var pk = $(this).attr('pk'); - inventreeGet( - `/api/part/${pk}/`, - {}, - { - success: function(part) { - orderParts( - [part], - {} - ); - } - } - ); - }); + constructForm(`${options.url}${pk}/`, { + fields: extraLineFields(), + title: '{% trans "Edit Line" %}', + onSuccess: reloadExtraLineTable, + }); + }); + } - // Callback for displaying price - $(table).find('.button-price').click(function() { - var pk = $(this).attr('pk'); - var idx = $(this).closest('tr').attr('data-index'); - var row = $(table).bootstrapTable('getData')[idx]; + if (options.allow_delete) { + // Callback for deleting lines + $(table).find('.button-delete').click(function() { + var pk = $(this).attr('pk'); - launchModalForm( - '{% url "line-pricing" %}', - { - submit_text: '{% trans "Calculate price" %}', - data: { - line_item: pk, - quantity: row.quantity, - }, - buttons: [ - { - name: 'update_price', - title: '{% trans "Update Unit Price" %}' - }, - ], - success: reloadTable, - } - ); - }); + constructForm(`${options.url}${pk}/`, { + method: 'DELETE', + title: '{% trans "Delete Line" %}', + onSuccess: reloadExtraLineTable, + }); + }); + } } $(table).inventreeTable({ + url: options.url, + name: options.name, + sidePagination: 'server', onPostBody: setupCallbacks, - name: 'salesorderlineitems', - sidePagination: 'client', formatNoMatches: function() { - return '{% trans "No matching line items" %}'; + return '{% trans "No line items found" %}'; }, queryParams: filters, original: options.params, - url: options.url, showFooter: true, uniqueId: 'pk', - detailView: show_detail, - detailViewByClick: false, - detailFilter: function(index, row) { - if (pending) { - // Order is pending - return row.allocated > 0; - } else { - return row.shipped > 0; - } - }, - detailFormatter: function(index, row, element) { - if (pending) { - return showAllocationSubTable(index, row, element, options); - } else { - return showFulfilledSubTable(index, row, element, options); - } - }, - columns: columns, - }); -} - - -/** - * Load a table displaying lines for a particular SalesOrder - * - * @param {String} table : HTML ID tag e.g. '#table' - * @param {Object} options : object which contains: - * - order {integer} : pk of the SalesOrder - * - status: {integer} : status code for the order - */ -function loadSalesOrderExtraLineTable(table, options={}) { - - options.table = table; - - if (!options.pending && !global_settings.SALESORDER_EDIT_COMPLETED_ORDERS) { - options.allow_edit = false; - } - - options.params = options.params || {}; - - if (!options.order) { - console.error('function called without order ID'); - return; - } - - if (!options.status) { - console.error('function called without order status'); - return; - } - - options.params.order = options.order; - options.params.part_detail = true; - options.params.allocations = true; - - var filters = loadTableFilters('salesorderextraline'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } - - options.url = options.url || '{% url "api-so-extra-line-list" %}'; - - var filter_target = options.filter_target || '#filter-list-sales-order-extra-lines'; - - setupFilterList('salesorderextraline', $(table), filter_target); - - // Table columns to display - var columns = [ - { - sortable: true, - field: 'reference', - title: '{% trans "Reference" %}', - switchable: true, - }, - { - sortable: true, - field: 'quantity', - title: '{% trans "Quantity" %}', - footerFormatter: function(data) { - return data.map(function(row) { - return +row['quantity']; - }).reduce(function(sum, i) { - return sum + i; - }, 0); + columns: [ + { + sortable: true, + field: 'reference', + title: '{% trans "Reference" %}', + switchable: false, }, - switchable: false, - }, - { - sortable: true, - field: 'price', - title: '{% trans "Unit Price" %}', - formatter: function(value, row) { - return formatCurrency(row.price, { - currency: row.price_currency, - }); - } - }, - { - field: 'total_price', - sortable: true, - title: '{% trans "Total Price" %}', - formatter: function(value, row) { - return formatCurrency(row.price * row.quantity, { - currency: row.price_currency, - }); + { + sortable: true, + switchable: false, + field: 'quantity', + title: '{% trans "Quantity" %}', + footerFormatter: function(data) { + return data.map(function(row) { + return +row['quantity']; + }).reduce(function(sum, i) { + return sum + i; + }, 0); + }, }, - footerFormatter: function(data) { - return calculateTotalPrice( - data, - function(row) { - return row.price ? row.price * row.quantity : null; - }, - function(row) { - return row.price_currency; - } - ); - } - } - ]; - - columns.push({ - field: 'notes', - title: '{% trans "Notes" %}', - }); - - columns.push({ - field: 'buttons', - switchable: false, - formatter: function(value, row, index, field) { - - var html = `
`; - - if (options.allow_edit) { - var pk = row.pk; - html += makeIconButton('fa-clone', 'button-duplicate', pk, '{% trans "Duplicate line" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-edit', pk, '{% trans "Edit line" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-delete', pk, '{% trans "Delete line" %}', ); - } - - html += `
`; - return html; - } - }); - - function reloadTable() { - $(table).bootstrapTable('refresh'); - reloadTotal(); - } - - // Configure callback functions once the table is loaded - function setupCallbacks() { - - // Callback for duplicating lines - $(table).find('.button-duplicate').click(function() { - var pk = $(this).attr('pk'); - - inventreeGet(`/api/order/so-extra-line/${pk}/`, {}, { - success: function(data) { - - var fields = extraLineFields(); - - constructForm('{% url "api-so-extra-line-list" %}', { - method: 'POST', - fields: fields, - data: data, - title: '{% trans "Duplicate Line" %}', - onSuccess: function(response) { - $(table).bootstrapTable('refresh'); - } + { + sortable: true, + field: 'price', + title: '{% trans "Unit Price" %}', + formatter: function(value, row) { + return formatCurrency(row.price, { + currency: row.price_currency, }); } - }); - }); - - // Callback for editing lines - $(table).find('.button-edit').click(function() { - var pk = $(this).attr('pk'); - - constructForm(`/api/order/so-extra-line/${pk}/`, { - fields: { - quantity: {}, - reference: {}, - price: {}, - price_currency: {}, - notes: {}, + }, + { + field: 'total_price', + sortable: true, + switchable: true, + title: '{% trans "Total Price" %}', + formatter: function(value, row) { + return formatCurrency(row.price * row.quantity, { + currency: row.price_currency, + }); }, - title: '{% trans "Edit Line" %}', - onSuccess: reloadTable, - }); - }); + footerFormatter: function(data) { + return calculateTotalPrice( + data, + function(row) { + return row.price ? row.price * row.quantity : null; + }, + function(row) { + return row.price_currency; + } + ); + } + }, + { + field: 'notes', + title: '{% trans "Notes" %}', + }, + { + field: 'link', + title: '{% trans "Link" %}', + formatter: function(value) { + if (value) { + return renderLink(value, value); + } + } + }, + { + field: 'buttons', + switchable: false, + formatter: function(value, row, index, field) { - // Callback for deleting lines - $(table).find('.button-delete').click(function() { - var pk = $(this).attr('pk'); + let html = ''; - constructForm(`/api/order/so-extra-line/${pk}/`, { - method: 'DELETE', - title: '{% trans "Delete Line" %}', - onSuccess: reloadTable, - }); - }); - } + if (options.allow_edit || options.allow_delete) { + var pk = row.pk; - $(table).inventreeTable({ - onPostBody: setupCallbacks, - name: 'salesorderextraline', - sidePagination: 'client', - formatNoMatches: function() { - return '{% trans "No matching lines" %}'; - }, - queryParams: filters, - original: options.params, - url: options.url, - showFooter: true, - uniqueId: 'pk', - detailViewByClick: false, - columns: columns, + if (options.allow_edit) { + html += makeCopyButton('button-duplicate', pk, '{% trans "Duplicate line" %}'); + html += makeEditButton('button-edit', pk, '{% trans "Edit line" %}'); + } + + if (options.allow_delete) { + html += makeDeleteButton('button-delete', pk, '{% trans "Delete line" %}', ); + } + } + + return wrapButtons(html); + } + }, + ] }); } diff --git a/InvenTree/templates/js/translated/part.js b/InvenTree/templates/js/translated/part.js index 1c0fa1460d..30ac5400cd 100644 --- a/InvenTree/templates/js/translated/part.js +++ b/InvenTree/templates/js/translated/part.js @@ -12,7 +12,6 @@ loadTableFilters, makeIconBadge, makeIconButton, - printPartLabels, renderLink, setFormGroupVisibility, setupFilterList, @@ -27,6 +26,7 @@ duplicatePart, editCategory, editPart, + generateStocktakeReport, loadParametricPartTable, loadPartCategoryTable, loadPartParameterTable, @@ -40,7 +40,7 @@ loadSimplePartTable, partDetail, partStockLabel, - performStocktake, + partTestTemplateFields, toggleStar, validateBom, */ @@ -97,7 +97,9 @@ function partFields(options={}) { }, name: {}, IPN: {}, - revision: {}, + revision: { + icon: 'fa-code-branch', + }, description: {}, variant_of: {}, keywords: { @@ -108,11 +110,13 @@ function partFields(options={}) { icon: 'fa-link', }, default_location: { + icon: 'fa-sitemap', filters: { structural: false, } }, default_supplier: { + icon: 'fa-building', filters: { part_detail: true, supplier_detail: true, @@ -171,11 +175,16 @@ function partFields(options={}) { }; } - // Pop expiry field + // Pop 'expiry' field if (!global_settings.STOCK_ENABLE_EXPIRY) { delete fields['default_expiry']; } + // Pop 'revision' field + if (!global_settings.PART_ENABLE_REVISION) { + delete fields['revision']; + } + if (options.create || options.duplicate) { // Add fields for creating initial supplier data @@ -209,9 +218,6 @@ function partFields(options={}) { delete fields['default_supplier']; fields.copy_category_parameters = { - type: 'boolean', - label: '{% trans "Copy Category Parameters" %}', - help_text: '{% trans "Copy parameter templates from selected part category" %}', value: global_settings.PART_CATEGORY_PARAMETERS, group: 'create', }; @@ -256,6 +262,7 @@ function categoryFields() { name: {}, description: {}, default_location: { + icon: 'fa-sitemap', filters: { structural: false, } @@ -358,7 +365,7 @@ function createPart(options={}) { */ function editPart(pk) { - var url = `/api/part/${pk}/`; + var url = `{% url "api-part-list" %}${pk}/`; var fields = partFields({ edit: true @@ -389,7 +396,7 @@ function duplicatePart(pk, options={}) { } // First we need all the part information - inventreeGet(`/api/part/${pk}/`, {}, { + inventreeGet(`{% url "api-part-list" %}${pk}/`, {}, { success: function(data) { @@ -414,6 +421,11 @@ function duplicatePart(pk, options={}) { data.is_template = false; } + // Clear IPN field if PART_ALLOW_DUPLICATE_IPN is set to False + if (!global_settings['PART_ALLOW_DUPLICATE_IPN']) { + data.IPN = ''; + } + constructForm('{% url "api-part-list" %}', { method: 'POST', fields: fields, @@ -433,7 +445,7 @@ function duplicatePart(pk, options={}) { // Launch form to delete a part function deletePart(pk, options={}) { - inventreeGet(`/api/part/${pk}/`, {}, { + inventreeGet(`{% url "api-part-list" %}${pk}/`, {}, { success: function(part) { if (part.active) { showAlertDialog( @@ -460,7 +472,7 @@ function deletePart(pk, options={}) {
`; constructForm( - `/api/part/${pk}/`, + `{% url "api-part-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Delete Part" %}', @@ -529,7 +541,7 @@ function validateBom(part_id, options={}) {
`; - constructForm(`/api/part/${part_id}/bom-validate/`, { + constructForm(`{% url "api-part-list" %}${part_id}/bom-validate/`, { method: 'PUT', fields: { valid: {}, @@ -547,7 +559,7 @@ function validateBom(part_id, options={}) { /* Duplicate a BOM */ function duplicateBom(part_id, options={}) { - constructForm(`/api/part/${part_id}/bom-copy/`, { + constructForm(`{% url "api-part-list" %}${part_id}/bom-copy/`, { method: 'POST', fields: { part: { @@ -578,49 +590,114 @@ function duplicateBom(part_id, options={}) { * Construct a "badge" label showing stock information for this particular part */ function partStockLabel(part, options={}) { + var classes = options.classes || ''; // Prevent literal string 'null' from being displayed var units = part.units || ''; - if (part.in_stock) { + let elements = []; + + // Check for stock + if (part.total_in_stock) { // There IS stock available for this part // Is stock "low" (below the 'minimum_stock' quantity)? - if ((part.minimum_stock > 0) && (part.minimum_stock > part.in_stock)) { - return `{% trans "Low stock" %}: ${part.in_stock} ${units}`; - } else if (part.unallocated_stock == 0) { - if (part.ordering) { - // There is no available stock, but stock is on order - return `{% trans "On Order" %}: ${part.ordering} ${units}`; - } else if (part.building) { - // There is no available stock, but stock is being built - return `{% trans "Building" %}: ${part.building} ${units}`; - } else { - // There is no available stock at all - return `{% trans "No stock available" %}`; - } + if ((part.minimum_stock > 0) && (part.minimum_stock > part.total_in_stock)) { + elements.push(`{% trans "Low stock" %}: ${part.total_in_stock}`); + } else if (part.unallocated_stock <= 0) { + // There is no available stock at all + elements.push(`{% trans "No stock available" %}`); } else if (part.unallocated_stock < part.in_stock) { - // Unallocated quanttiy is less than total quantity - return `{% trans "Available" %}: ${part.unallocated_stock}/${part.in_stock} ${units}`; + // Unallocated quantity is less than total quantity + if (options.hideTotalStock) { + elements.push(`{% trans "Available" %}: ${part.unallocated_stock}`); + } else { + elements.push(`{% trans "Available" %}: ${part.unallocated_stock}/${part.in_stock}`); + } } else { // Stock is completely available - return `{% trans "Available" %}: ${part.unallocated_stock} ${units}`; + if (!options.hideTotalStock) { + elements.push(`{% trans "Available" %}: ${part.unallocated_stock}`); + } } } else { // There IS NO stock available for this part - - if (part.ordering) { - // There is no stock, but stock is on order - return `{% trans "On Order" %}: ${part.ordering} ${units}`; - } else if (part.building) { - // There is no stock, but stock is being built - return `{% trans "Building" %}: ${part.building} ${units}`; - } else { - // There is no stock - return `{% trans "No Stock" %}`; - } + elements.push(`{% trans "No Stock" %}`); } + // Check for items on order + if (part.ordering) { + elements.push(`{% trans "On Order" %}: ${part.ordering}`); + } + + // Check for items beeing built + if (part.building) { + elements.push(`{% trans "Building" %}: ${part.building}`); + } + + // Determine badge color based on overall stock health + var stock_health = part.unallocated_stock + part.building + part.ordering - part.minimum_stock; + + // TODO: Refactor the API to include this information, so we don't have to request it! + if (options.showDemandInfo) { + + // Check for demand from unallocated build orders + var required_build_order_quantity = null; + var required_sales_order_quantity = null; + + inventreeGet(`{% url "api-part-list" %}${part.pk}/requirements/`, {}, { + async: false, + success: function(response) { + required_build_order_quantity = 0; + if (response.required_build_order_quantity) { + required_build_order_quantity = response.required_build_order_quantity; + } + required_sales_order_quantity = 0; + if (response.required_sales_order_quantity) { + required_sales_order_quantity = response.required_sales_order_quantity; + } + } + }); + + if ((required_build_order_quantity == null) || (required_sales_order_quantity == null)) { + console.error(`Error loading part requirements for part ${part.pk}`); + return; + } + + var demand = (required_build_order_quantity - part.allocated_to_build_orders) + (required_sales_order_quantity - part.allocated_to_sales_orders); + if (demand) { + elements.push(`{% trans "Demand" %}: ${demand}`); + } + + stock_health -= (required_build_order_quantity + required_sales_order_quantity); + } + + var bg_class = ''; + + if (stock_health < 0) { + // Unsatisfied demand and/or below minimum stock + bg_class = 'bg-danger'; + } else if (stock_health == 0) { + // Demand and minimum stock matched exactly by available stock and incoming/building + bg_class = 'bg-warning'; + } else { + // Surplus stock available or already incoming/building in sufficient quantities + bg_class = 'bg-success'; + } + + let output = ''; + + // Display units next to stock badge + if (units && !options.no_units) { + output += `{% trans "Unit" %}: ${units} `; + } + + if (elements.length > 0) { + let text = elements.join(' | '); + output += `${text}`; + } + + return output; } @@ -697,144 +774,185 @@ function partDetail(part, options={}) { /* - * Guide user through "stocktake" process + * Initiate generation of a stocktake report */ -function performStocktake(partId, options={}) { +function generateStocktakeReport(options={}) { - var part_quantity = 0; + let fields = { + }; - var date_threshold = moment().subtract(30, 'days'); - - // Helper function for formatting a StockItem row - function buildStockItemRow(item) { - - var pk = item.pk; - - // Part detail - var part = partDetail(item.part_detail, { - thumb: true, - }); - - // Location detail - var location = locationDetail(item); - - // Quantity detail - var quantity = item.quantity; - - part_quantity += item.quantity; - - if (item.serial && item.quantity == 1) { - quantity = `{% trans "Serial" %}: ${item.serial}`; - } - - quantity += stockStatusDisplay(item.status, {classes: 'float-right'}); - - // Last update - var updated = item.stocktake_date || item.updated; - - var update_rendered = renderDate(updated); - - if (updated) { - if (moment(updated) < date_threshold) { - update_rendered += `
`; - } - } - - // Actions - var actions = `
`; - - // TODO: Future work - // actions += makeIconButton('fa-check-circle icon-green', 'button-line-count', pk, '{% trans "Update item" %}'); - // actions += makeIconButton('fa-trash-alt icon-red', 'button-line-delete', pk, '{% trans "Delete item" %}'); - - actions += `
`; - - return ` - - ${part} - ${location} - ${quantity} - ${update_rendered} - ${actions} - `; + if (options.part != null) { + fields.part = options.part; } - // First, load stock information for the part - inventreeGet( - '{% url "api-stock-list" %}', + if (options.category != null) { + fields.category = options.category; + } + + if (options.location != null) { + fields.location = options.location; + } + + if (options.generate_report) { + fields.generate_report = options.generate_report; + } + + if (options.update_parts) { + fields.update_parts = options.update_parts; + } + + let content = ` +
+ {% trans "Schedule generation of a new stocktake report." %} {% trans "Once complete, the stocktake report will be available for download." %} +
+ `; + + constructForm( + '{% url "api-part-stocktake-report-generate" %}', { - part: partId, - in_stock: true, - location_detail: true, - part_detail: true, - include_variants: true, - ordering: '-stock', - }, - { - success: function(response) { - var html = ''; - - html += ` - - - - - - - - - - - - `; - - response.forEach(function(item) { - html += buildStockItemRow(item); - }); - - html += `
{% trans "Stock Item" %}{% trans "Location" %}{% trans "Quantity" %}{% trans "Updated" %}
`; - - constructForm(`/api/part/stocktake/`, { - preFormContent: html, - method: 'POST', - title: '{% trans "Part Stocktake" %}', - confirm: true, - fields: { - part: { - value: partId, - hidden: true, - }, - quantity: { - value: part_quantity, - }, - note: {}, - }, - onSuccess: function(response) { - handleFormSuccess(response, options); - } + method: 'POST', + title: '{% trans "Generate Stocktake Report" %}', + preFormContent: content, + fields: fields, + onSuccess: function(response) { + showMessage('{% trans "Stocktake report scheduled" %}', { + style: 'success', }); } } ); } +var stocktakeChart = null; + +/* + * Load chart to display part stocktake information + */ +function loadStocktakeChart(data, options={}) { + + var chart = 'part-stocktake-chart'; + var context = document.getElementById(chart); + + var quantity_data = []; + var cost_min_data = []; + var cost_max_data = []; + + var base_currency = baseCurrency(); + var rate_data = getCurrencyConversionRates(); + + data.forEach(function(row) { + var date = moment(row.date); + quantity_data.push({ + x: date, + y: row.quantity + }); + + if (row.cost_min) { + cost_min_data.push({ + x: date, + y: convertCurrency( + row.cost_min, + row.cost_min_currency || base_currency, + base_currency, + rate_data + ), + }); + } + + if (row.cost_max) { + cost_max_data.push({ + x: date, + y: convertCurrency( + row.cost_max, + row.cost_max_currency || base_currency, + base_currency, + rate_data + ), + }); + } + }); + + var chart_data = { + datasets: [ + { + label: '{% trans "Quantity" %}', + data: quantity_data, + backgroundColor: 'rgba(160, 80, 220, 0.75)', + borderWidth: 3, + borderColor: 'rgb(160, 80, 220)', + yAxisID: 'y', + }, + { + label: '{% trans "Minimum Cost" %}', + data: cost_min_data, + backgroundColor: 'rgba(220, 160, 80, 0.25)', + borderWidth: 2, + borderColor: 'rgba(220, 160, 80, 0.35)', + borderDash: [10, 5], + yAxisID: 'y1', + fill: '+1', + }, + { + label: '{% trans "Maximum Cost" %}', + data: cost_max_data, + backgroundColor: 'rgba(220, 160, 80, 0.25)', + borderWidth: 2, + borderColor: 'rgba(220, 160, 80, 0.35)', + borderDash: [10, 5], + yAxisID: 'y1', + fill: '-1', + } + ] + }; + + if (stocktakeChart != null) { + stocktakeChart.destroy(); + } + + stocktakeChart = new Chart(context, { + type: 'scatter', + data: chart_data, + options: { + showLine: true, + scales: { + x: { + type: 'time', + // suggestedMax: today.format(), + position: 'bottom', + time: { + minUnit: 'day', + } + }, + y: { + type: 'linear', + display: true, + position: 'left', + }, + y1: { + type: 'linear', + display: true, + position: 'right', + } + }, + } + }); +} + + /* * Load table for part stocktake information */ function loadPartStocktakeTable(partId, options={}) { + // HTML elements var table = options.table || '#part-stocktake-table'; var params = options.params || {}; params.part = partId; - var filters = loadTableFilters('stocktake'); - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('stocktake', params); setupFilterList('stocktake', $(table), '#filter-list-partstocktake'); @@ -848,13 +966,32 @@ function loadPartStocktakeTable(partId, options={}) { formatNoMatches: function() { return '{% trans "No stocktake information available" %}'; }, + onLoadSuccess: function(response) { + var data = response.results || response; + + loadStocktakeChart(data); + }, columns: [ + { + field: 'item_count', + title: '{% trans "Stock Items" %}', + switchable: true, + sortable: true, + }, { field: 'quantity', - title: '{% trans "Quantity" %}', + title: '{% trans "Total Quantity" %}', switchable: false, sortable: true, }, + { + field: 'cost', + title: '{% trans "Total Cost" %}', + switchable: false, + formatter: function(value, row) { + return formatPriceRange(row.cost_min, row.cost_max); + } + }, { field: 'note', title: '{% trans "Notes" %}', @@ -878,23 +1015,21 @@ function loadPartStocktakeTable(partId, options={}) { { field: 'actions', title: '', - visible: options.admin, + visible: options.allow_edit || options.allow_delete, switchable: false, sortable: false, formatter: function(value, row) { - var html = `
`; + let html = ''; if (options.allow_edit) { - html += makeIconButton('fa-edit icon-blue', 'button-edit-stocktake', row.pk, '{% trans "Edit Stocktake Entry" %}'); + html += makeEditButton('button-edit-stocktake', row.pk, '{% trans "Edit Stocktake Entry" %}'); } if (options.allow_delete) { - html += makeIconButton('fa-trash-alt icon-red', 'button-delete-stocktake', row.pk, '{% trans "Delete Stocktake Entry" %}'); + html += makeDeleteButton('button-delete-stocktake', row.pk, '{% trans "Delete Stocktake Entry" %}'); } - html += `
`; - - return html; + return wrapButtons(html); } } ], @@ -903,27 +1038,38 @@ function loadPartStocktakeTable(partId, options={}) { $(table).find('.button-edit-stocktake').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/part/stocktake/${pk}/`, { + constructForm(`{% url "api-part-stocktake-list" %}${pk}/`, { fields: { + item_count: {}, quantity: {}, - note: {}, + cost_min: { + icon: 'fa-dollar-sign', + }, + cost_min_currency: { + icon: 'fa-coins', + }, + cost_max: { + icon: 'fa-dollar-sign', + }, + cost_max_currency: { + icon: 'fa-coins', + }, + note: { + icon: 'fa-sticky-note', + }, }, title: '{% trans "Edit Stocktake Entry" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); $(table).find('.button-delete-stocktake').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/part/stocktake/${pk}/`, { + constructForm(`{% url "api-part-stocktake-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Delete Stocktake Entry" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); } @@ -931,7 +1077,8 @@ function loadPartStocktakeTable(partId, options={}) { } -/* Load part variant table +/* + * Load part variant table */ function loadPartVariantTable(table, partId, options={}) { @@ -940,11 +1087,7 @@ function loadPartVariantTable(table, partId, options={}) { params.ancestor = partId; // Load filters - var filters = loadTableFilters('variants'); - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('variants', params); setupFilterList('variants', $(table)); @@ -963,19 +1106,7 @@ function loadPartVariantTable(table, partId, options={}) { formatter: function(value, row) { var html = ''; - var name = ''; - - if (row.IPN) { - name += row.IPN; - name += ' | '; - } - - name += value; - - if (row.revision) { - name += ' | '; - name += row.revision; - } + var name = row.full_name || row.name; if (row.is_template) { name = '' + name + ''; @@ -1015,6 +1146,8 @@ function loadPartVariantTable(table, partId, options={}) { { field: 'revision', title: '{% trans "Revision" %}', + switchable: global_settings.PART_ENABLE_REVISION, + visible: global_settings.PART_ENABLE_REVISION, sortable: true, }, { @@ -1022,24 +1155,25 @@ function loadPartVariantTable(table, partId, options={}) { title: '{% trans "Description" %}', }, { - field: 'in_stock', + field: 'total_in_stock', title: '{% trans "Stock" %}', sortable: true, formatter: function(value, row) { - var base_stock = row.in_stock; - var variant_stock = row.variant_stock || 0; + var text = renderLink(value, `/part/${row.pk}/?display=part-stock`); - var total = base_stock + variant_stock; + text += partStockLabel(row, { + noDemandInfo: true, + hideTotalStock: true, + classes: 'float-right', + }); - var text = `${total}`; - - if (variant_stock > 0) { + if (row.variant_stock > 0) { text = `${text}`; text += ``; } - return renderLink(text, `/part/${row.pk}/?display=part-stock`); + return text; } }, { @@ -1099,11 +1233,7 @@ function loadPartParameterTable(table, options) { var params = options.params || {}; // Load filters - var filters = loadTableFilters('part-parameters'); - - for (var key in params) { - filters[key] = params[key]; - } + var filters = loadTableFilters('part-parameters', params); var filterTarget = options.filterTarget || '#filter-list-parameters'; @@ -1154,16 +1284,13 @@ function loadPartParameterTable(table, options) { switchable: false, sortable: false, formatter: function(value, row) { - var pk = row.pk; + let pk = row.pk; + let html = ''; - var html = `
`; + html += makeEditButton('button-parameter-edit', pk, '{% trans "Edit parameter" %}'); + html += makeDeleteButton('button-parameter-delete', pk, '{% trans "Delete parameter" %}'); - html += makeIconButton('fa-edit icon-blue', 'button-parameter-edit', pk, '{% trans "Edit parameter" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-parameter-delete', pk, '{% trans "Delete parameter" %}'); - - html += `
`; - - return html; + return wrapButtons(html); } } ], @@ -1172,26 +1299,22 @@ function loadPartParameterTable(table, options) { $(table).find('.button-parameter-edit').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/part/parameter/${pk}/`, { + constructForm(`{% url "api-part-parameter-list" %}${pk}/`, { fields: { data: {}, }, title: '{% trans "Edit Parameter" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); $(table).find('.button-parameter-delete').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/part/parameter/${pk}/`, { + constructForm(`{% url "api-part-parameter-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Delete Parameter" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); } @@ -1213,11 +1336,7 @@ function loadPartPurchaseOrderTable(table, part_id, options={}) { options.params.part_detail = true; options.params.order_detail = true; - var filters = loadTableFilters('purchaseorderlineitem'); - - for (var key in options.params) { - filters[key] = options.params[key]; - } + var filters = loadTableFilters('purchaseorderlineitem', options.params); setupFilterList('purchaseorderlineitem', $(table), '#filter-list-partpurchaseorders'); @@ -1326,12 +1445,16 @@ function loadPartPurchaseOrderTable(table, part_id, options={}) { field: 'quantity', title: '{% trans "Quantity" %}', formatter: function(value, row) { - var data = value; + let data = value; if (row.supplier_part_detail.pack_size != 1.0) { - var pack_size = row.supplier_part_detail.pack_size; - var total = value * pack_size; - data += ``; + let pack_size = row.supplier_part_detail.pack_size; + let total = value * pack_size; + + data += makeIconBadge( + 'fa-info-circle icon-blue', + `{% trans "Pack Quantity" %}: ${pack_size} - {% trans "Total Quantity" %}: ${total}` + ); } return data; @@ -1367,7 +1490,10 @@ function loadPartPurchaseOrderTable(table, part_id, options={}) { } if (overdue) { - html += ``; + html += makeIconBadge( + 'fa-calendar-alt icon-red', + '{% trans "This line item is overdue" %}', + ); } return html; @@ -1409,13 +1535,12 @@ function loadPartPurchaseOrderTable(table, part_id, options={}) { // Already recevied return `{% trans "Received" %}`; } else if (row.order_detail && row.order_detail.status == {{ PurchaseOrderStatus.PLACED }}) { - var html = `
`; + let html = ''; var pk = row.pk; html += makeIconButton('fa-sign-in-alt', 'button-line-receive', pk, '{% trans "Receive line item" %}'); - html += `
`; - return html; + return wrapButtons(html); } else { return ''; } @@ -1479,14 +1604,10 @@ function loadRelatedPartsTable(table, part_id, options={}) { title: '', switchable: false, formatter: function(value, row) { + let html = ''; + html += makeDeleteButton('button-related-delete', row.pk, '{% trans "Delete part relationship" %}'); - var html = `
`; - - html += makeIconButton('fa-trash-alt icon-red', 'button-related-delete', row.pk, '{% trans "Delete part relationship" %}'); - - html += '
'; - - return html; + return wrapButtons(html); } } ]; @@ -1504,12 +1625,10 @@ function loadRelatedPartsTable(table, part_id, options={}) { $(table).find('.button-related-delete').click(function() { var pk = $(this).attr('pk'); - constructForm(`/api/part/related/${pk}/`, { + constructForm(`{% url "api-part-related-list" %}${pk}/`, { method: 'DELETE', title: '{% trans "Delete Part Relationship" %}', - onSuccess: function() { - $(table).bootstrapTable('refresh'); - } + refreshTable: table, }); }); }, @@ -1685,19 +1804,15 @@ function loadPartTable(table, url, options={}) { var params = options.params || {}; - var filters = {}; + var filters = loadTableFilters('parts', options.params); - var col = null; - - if (!options.disableFilters) { - filters = loadTableFilters('parts'); - } - - for (var key in params) { - filters[key] = params[key]; - } - - setupFilterList('parts', $(table), options.filterTarget, {download: true}); + setupFilterList('parts', $(table), options.filterTarget, { + download: true, + labels: { + url: '{% url "api-part-label-list" %}', + key: 'part', + } + }); var columns = [ { @@ -1741,6 +1856,14 @@ function loadPartTable(table, url, options={}) { sortable: !options.params.ordering }); + columns.push({ + field: 'revision', + title: '{% trans "Revision" %}', + switchable: global_settings.PART_ENABLE_REVISION, + visible: global_settings.PART_ENABLE_REVISION, + sortable: true, + }); + columns.push({ field: 'description', title: '{% trans "Description" %}', @@ -1756,95 +1879,39 @@ function loadPartTable(table, url, options={}) { } }); - col = { + columns.push({ sortName: 'category', field: 'category_detail', title: '{% trans "Category" %}', + sortable: true, formatter: function(value, row) { - - var text = shortenString(row.category_detail.pathstring); - - if (row.category) { + if (row.category && row.category_detail) { + var text = shortenString(row.category_detail.pathstring); return withTitle(renderLink(text, `/part/category/${row.category}/`), row.category_detail.pathstring); } else { - return '{% trans "No category" %}'; + return '{% trans "No category" %}'; } } - }; + }); - if (!options.params.ordering) { - col['sortable'] = true; - } - columns.push(col); - - col = { - field: 'unallocated_stock', + columns.push({ + field: 'total_in_stock', title: '{% trans "Stock" %}', - searchable: false, + sortable: true, formatter: function(value, row) { - var text = ''; + var text = renderLink(value, `/part/${row.pk}/?display=part-stock`); - var total_stock = row.in_stock; - - if (row.variant_stock) { - total_stock += row.variant_stock; - } - - var text = `${total_stock}`; - - // Construct extra informational badges - var badges = ''; - - if (total_stock == 0) { - badges += ``; - } else if (total_stock < row.minimum_stock) { - badges += ``; - } - - if (row.ordering && row.ordering > 0) { - badges += renderLink( - ``, - `/part/${row.pk}/?display=purchase-orders` - ); - } - - if (row.building && row.building > 0) { - badges += renderLink( - ``, - `/part/${row.pk}/?display=build-orders` - ); - } - - if (row.variant_stock && row.variant_stock > 0) { - badges += ``; - } - - if (row.allocated_to_build_orders > 0) { - badges += ``; - } - - if (row.allocated_to_sales_orders > 0) { - badges += ``; - } - - if (row.units) { - text += ` ${row.units}`; - } - - text = renderLink(text, `/part/${row.pk}/?display=part-stock`); - text += badges; + text += partStockLabel(row, { + noDemandInfo: true, + hideTotalStock: true, + classes: 'float-right', + }); return text; } - }; - - if (!options.params.ordering) { - col['sortable'] = true; - } - - columns.push(col); + }); // Pricing information columns.push({ @@ -1859,6 +1926,7 @@ function loadPartTable(table, url, options={}) { } }); + // External link / URL columns.push({ field: 'link', title: '{% trans "Link" %}', @@ -2054,7 +2122,7 @@ function loadPartTable(table, url, options={}) { var part = parts.shift(); inventreePut( - `/api/part/${part}/`, + `{% url "api-part-list" %}${part}/`, { category: category, }, @@ -2077,19 +2145,6 @@ function loadPartTable(table, url, options={}) { }, }); }); - - // Callback function for the "print label" button - $('#multi-part-print-label').click(function() { - var selections = getTableData(table); - - var items = []; - - selections.forEach(function(item) { - items.push(item.pk); - }); - - printPartLabels(items); - }); } @@ -2102,15 +2157,8 @@ function loadPartCategoryTable(table, options) { var filterListElement = options.filterList || '#filter-list-category'; - var filters = {}; - var filterKey = options.filterKey || options.name || 'category'; - if (!options.disableFilters) { - filters = loadTableFilters(filterKey); - } - - var tree_view = options.allowTreeView && inventreeLoad('category-tree-view') == 1; if (tree_view) { @@ -2118,12 +2166,7 @@ function loadPartCategoryTable(table, options) { params.depth = global_settings.INVENTREE_TREE_DEPTH; } - var original = {}; - - for (var key in params) { - original[key] = params[key]; - filters[key] = params[key]; - } + let filters = loadTableFilters(filterKey, params); setupFilterList(filterKey, table, filterListElement, {download: true}); @@ -2171,7 +2214,7 @@ function loadPartCategoryTable(table, options) { serverSort: !tree_view, search: !tree_view, name: 'category', - original: original, + original: params, showColumns: true, sortable: true, buttons: options.allowTreeView ? [ @@ -2329,10 +2372,32 @@ function loadPartCategoryTable(table, options) { }); } + +/* Construct a set of fields for the PartTestTemplate model form */ +function partTestTemplateFields(options={}) { + let fields = { + test_name: {}, + description: {}, + required: {}, + requires_value: {}, + requires_attachment: {}, + part: { + hidden: true, + } + }; + + if (options.part) { + fields.part.value = options.part; + } + + return fields; +} + + +/* + * Load PartTestTemplate table. + */ function loadPartTestTemplateTable(table, options) { - /* - * Load PartTestTemplate table. - */ var params = options.params || {}; @@ -2340,13 +2405,7 @@ function loadPartTestTemplateTable(table, options) { var filterListElement = options.filterList || '#filter-list-parttests'; - var filters = loadTableFilters('parttests'); - - var original = {}; - - for (var k in params) { - original[k] = params[k]; - } + var filters = loadTableFilters('parttests', params); setupFilterList('parttests', table, filterListElement); @@ -2363,7 +2422,7 @@ function loadPartTestTemplateTable(table, options) { url: '{% url "api-part-test-template-list" %}', queryParams: filters, name: 'testtemplate', - original: original, + original: params, columns: [ { field: 'pk', @@ -2407,14 +2466,12 @@ function loadPartTestTemplateTable(table, options) { var pk = row.pk; if (row.part == part) { - var html = `
`; + let html = ''; - html += makeIconButton('fa-edit icon-blue', 'button-test-edit', pk, '{% trans "Edit test result" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-test-delete', pk, '{% trans "Delete test result" %}'); + html += makeEditButton('button-test-edit', pk, '{% trans "Edit test result" %}'); + html += makeDeleteButton('button-test-delete', pk, '{% trans "Delete test result" %}'); - html += `
`; - - return html; + return wrapButtons(html); } else { var text = '{% trans "This test is defined for a parent part" %}'; @@ -2431,13 +2488,7 @@ function loadPartTestTemplateTable(table, options) { var url = `/api/part/test-template/${pk}/`; constructForm(url, { - fields: { - test_name: {}, - description: {}, - required: {}, - requires_value: {}, - requires_attachment: {}, - }, + fields: partTestTemplateFields(), title: '{% trans "Edit Test Result Template" %}', onSuccess: function() { table.bootstrapTable('refresh'); @@ -2453,9 +2504,7 @@ function loadPartTestTemplateTable(table, options) { constructForm(url, { method: 'DELETE', title: '{% trans "Delete Test Result Template" %}', - onSuccess: function() { - table.bootstrapTable('refresh'); - }, + refreshTable: table, }); }); } @@ -2478,7 +2527,7 @@ function loadPartSchedulingChart(canvas_id, part_id) { var was_error = false; // First, grab updated data for the particular part - inventreeGet(`/api/part/${part_id}/`, {}, { + inventreeGet(`{% url "api-part-list" %}${part_id}/`, {}, { async: false, success: function(response) { part_info = response; @@ -2517,7 +2566,7 @@ function loadPartSchedulingChart(canvas_id, part_id) { * and arranged in increasing chronological order */ inventreeGet( - `/api/part/${part_id}/scheduling/`, + `{% url "api-part-list" %}${part_id}/scheduling/`, {}, { async: false, @@ -2534,15 +2583,15 @@ function loadPartSchedulingChart(canvas_id, part_id) { if (date == null) { date_string = '{% trans "No date specified" %}'; - date_string += ``; + date_string += makeIconBadge('fa-exclamation-circle icon-red', '{% trans "No date specified" %}'); } else if (date < today) { - date_string += ``; + date_string += makeIconBadge('fa-exclamation-circle icon-yellow', '{% trans "Specified date is in the past" %}'); } var quantity_string = entry.quantity + entry.speculative_quantity; if (entry.speculative_quantity != 0) { - quantity_string += ``; + quantity_string += makeIconBadge('fa-question-circle icon-blue', '{% trans "Speculative" %}'); } // Add an entry to the scheduling table diff --git a/InvenTree/templates/js/translated/pricing.js b/InvenTree/templates/js/translated/pricing.js index 83102e8204..d0af49fef8 100644 --- a/InvenTree/templates/js/translated/pricing.js +++ b/InvenTree/templates/js/translated/pricing.js @@ -26,7 +26,7 @@ * Returns the base currency used for conversion operations */ function baseCurrency() { - return global_settings.INVENTREE_BASE_CURRENCY || 'USD'; + return global_settings.INVENTREE_DEFAULT_CURRENCY || 'USD'; } @@ -45,24 +45,22 @@ function formatCurrency(value, options={}) { return null; } - var digits = options.digits || global_settings.PRICING_DECIMAL_PLACES || 6; - - // Strip out any trailing zeros, etc - value = formatDecimal(value, digits); + let maxDigits = options.digits || global_settings.PRICING_DECIMAL_PLACES || 6; + let minDigits = options.minDigits || global_settings.PRICING_DECIMAL_PLACES_MIN || 0; // Extract default currency information - var currency = options.currency || global_settings.INVENTREE_DEFAULT_CURRENCY || 'USD'; + let currency = options.currency || global_settings.INVENTREE_DEFAULT_CURRENCY || 'USD'; // Exctract locale information - var locale = options.locale || navigator.language || 'en-US'; + let locale = options.locale || navigator.language || 'en-US'; - - var formatter = new Intl.NumberFormat( + let formatter = new Intl.NumberFormat( locale, { style: 'currency', currency: currency, - maximumSignificantDigits: digits, + maximumFractionDigits: maxDigits, + minimumFractionDigits: minDigits, } ); @@ -106,9 +104,9 @@ var cached_exchange_rates = null; /* * Retrieve currency conversion rate information from the server */ -function getCurrencyConversionRates() { +function getCurrencyConversionRates(cache=true) { - if (cached_exchange_rates != null) { + if (cache && cached_exchange_rates != null) { return cached_exchange_rates; } @@ -136,7 +134,7 @@ function calculateTotalPrice(dataset, value_func, currency_func, options={}) { var currency = options.currency; - var rates = getCurrencyConversionRates(); + var rates = options.rates || getCurrencyConversionRates(); if (!rates) { console.error('Could not retrieve currency conversion information from the server'); @@ -205,6 +203,11 @@ function calculateTotalPrice(dataset, value_func, currency_func, options={}) { total += value; } + // Return raw total instead of formatted value + if (options.raw) { + return total; + } + return formatCurrency(total, { currency: currency, }); @@ -231,6 +234,11 @@ function convertCurrency(value, source_currency, target_currency, rate_data) { return value; } + if (rate_data == null) { + console.error('convertCurrency() called without rate_data'); + return null; + } + if (!('base_currency' in rate_data)) { console.error('Currency data missing base_currency parameter'); return null; @@ -595,14 +603,14 @@ function loadPriceBreakTable(table, options={}) { title: '{% trans "Price" %}', sortable: true, formatter: function(value, row) { - var html = formatCurrency(value, {currency: row.price_currency}); + let html = formatCurrency(value, {currency: row.price_currency}); - html += `
`; + let buttons = ''; - html += makeIconButton('fa-edit icon-blue', `button-${name}-edit`, row.pk, `{% trans "Edit ${human_name}" %}`); - html += makeIconButton('fa-trash-alt icon-red', `button-${name}-delete`, row.pk, `{% trans "Delete ${human_name}" %}`); + buttons += makeEditButton(`button-${name}-edit`, row.pk, `{% trans "Edit" %} ${human_name}`); + buttons += makeDeleteButton(`button-${name}-delete`, row.pk, `{% trans "Delete" %} ${human_name}"`); - html += `
`; + html += wrapButtons(buttons); return html; } @@ -647,8 +655,12 @@ function initPriceBreakSet(table, options) { value: part_id, }, quantity: {}, - price: {}, - price_currency: {}, + price: { + icon: 'fa-dollar-sign', + }, + price_currency: { + icon: 'fa-coins', + }, }, method: 'POST', title: '{% trans "Add Price Break" %}', @@ -672,8 +684,12 @@ function initPriceBreakSet(table, options) { constructForm(`${pb_url}${pk}/`, { fields: { quantity: {}, - price: {}, - price_currency: {}, + price: { + icon: 'fa-dollar-sign', + }, + price_currency: { + icon: 'fa-coins', + }, }, title: '{% trans "Edit Price Break" %}', onSuccess: reloadPriceBreakTable, diff --git a/InvenTree/templates/js/translated/purchase_order.js b/InvenTree/templates/js/translated/purchase_order.js new file mode 100644 index 0000000000..77156d9a3e --- /dev/null +++ b/InvenTree/templates/js/translated/purchase_order.js @@ -0,0 +1,2147 @@ +{% load i18n %} +{% load inventree_extras %} + +/* globals + companyFormFields, + constructForm, + createSupplierPart, + global_settings, + imageHoverIcon, + inventreeGet, + launchModalForm, + loadTableFilters, + makeIconBadge, + purchaseOrderStatusDisplay, + receivePurchaseOrderItems, + renderLink, + setupFilterList, + supplierPartFields, +*/ + +/* exported + cancelPurchaseOrder, + completePurchaseOrder, + createPurchaseOrder, + createPurchaseOrderLineItem, + duplicatePurchaseOrder, + editPurchaseOrder, + editPurchaseOrderLineItem, + issuePurchaseOrder, + loadPurchaseOrderLineItemTable, + loadPurchaseOrderTable, + newPurchaseOrderFromOrderWizard, + newSupplierPartFromOrderWizard, + orderParts, + removeOrderRowFromOrderWizard, + removePurchaseOrderLineItem, +*/ + + + +/* + * Construct a set of fields for a purchase order form + */ +function purchaseOrderFields(options={}) { + + var fields = { + reference: { + icon: 'fa-hashtag', + }, + description: {}, + supplier: { + icon: 'fa-building', + secondary: { + title: '{% trans "Add Supplier" %}', + fields: function() { + var fields = companyFormFields(); + + fields.is_supplier.value = true; + + return fields; + } + } + }, + supplier_reference: {}, + target_date: { + icon: 'fa-calendar-alt', + }, + link: { + icon: 'fa-link', + }, + contact: { + icon: 'fa-user', + adjustFilters: function(filters) { + let supplier = getFormFieldValue('supplier', {}, {modal: options.modal}); + + if (supplier) { + filters.company = supplier; + } + + return filters; + } + }, + responsible: { + icon: 'fa-user', + }, + }; + + if (options.supplier) { + fields.supplier.value = options.supplier; + } + + if (options.hide_supplier) { + fields.supplier.hidden = true; + } + + // Add fields for order duplication (only if required) + if (options.duplicate_order) { + fields.duplicate_order = { + value: options.duplicate_order, + group: 'duplicate', + required: 'true', + type: 'related field', + model: 'purchaseorder', + filters: { + supplier_detail: true, + }, + api_url: '{% url "api-po-list" %}', + label: '{% trans "Purchase Order" %}', + help_text: '{% trans "Select purchase order to duplicate" %}', + }; + + fields.duplicate_line_items = { + value: true, + group: 'duplicate', + type: 'boolean', + label: '{% trans "Duplicate Line Items" %}', + help_text: '{% trans "Duplicate all line items from the selected order" %}', + }; + + fields.duplicate_extra_lines = { + value: true, + group: 'duplicate', + type: 'boolean', + label: '{% trans "Duplicate Extra Lines" %}', + help_text: '{% trans "Duplicate extra line items from the selected order" %}', + }; + } + + return fields; +} + + +/* + * Edit an existing PurchaseOrder + */ +function editPurchaseOrder(pk, options={}) { + + var fields = purchaseOrderFields(options); + + constructForm(`{% url "api-po-list" %}${pk}/`, { + fields: fields, + title: '{% trans "Edit Purchase Order" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +// Create a new PurchaseOrder +function createPurchaseOrder(options={}) { + + var fields = purchaseOrderFields(options); + + var groups = {}; + + if (options.duplicate_order) { + groups.duplicate = { + title: '{% trans "Duplication Options" %}', + collapsible: false, + }; + }; + + constructForm('{% url "api-po-list" %}', { + method: 'POST', + fields: fields, + groups: groups, + data: options.data, + onSuccess: function(data) { + + if (options.onSuccess) { + options.onSuccess(data); + } else { + // Default action is to redirect browser to the new PurchaseOrder + location.href = `/order/purchase-order/${data.pk}/`; + } + }, + title: options.title || '{% trans "Create Purchase Order" %}', + }); +} + +/* + * Duplicate an existing PurchaseOrder + * Provides user with option to duplicate line items for the order also. + */ +function duplicatePurchaseOrder(order_id, options={}) { + + options.duplicate_order = order_id; + + inventreeGet(`{% url "api-po-list" %}${order_id}/`, {}, { + success: function(data) { + + // Clear out data we do not want to be duplicated + delete data['pk']; + delete data['reference']; + + options.data = data; + + createPurchaseOrder(options); + } + }); +} + + +/* Construct a set of fields for the PurchaseOrderLineItem form */ +function poLineItemFields(options={}) { + + var fields = { + order: { + filters: { + supplier_detail: true, + } + }, + part: { + icon: 'fa-shapes', + filters: { + part_detail: true, + supplier_detail: true, + supplier: options.supplier, + }, + onEdit: function(value, name, field, opts) { + // If the pack_size != 1, add a note to the field + var pack_size = 1; + var units = ''; + var supplier_part_id = value; + var quantity = getFormFieldValue('quantity', {}, opts); + + // Remove any existing note fields + $(opts.modal).find('#info-pack-size').remove(); + + if (value == null) { + return; + } + + // Request information about the particular supplier part + inventreeGet(`{% url "api-supplier-part-list" %}${value}/`, + { + part_detail: true, + }, + { + success: function(response) { + // Extract information from the returned query + pack_size = response.pack_size || 1; + units = response.part_detail.units || ''; + }, + } + ).then(function() { + // Update pack size information + if (pack_size != 1) { + var txt = ` {% trans "Pack Quantity" %}: ${pack_size} ${units}`; + $(opts.modal).find('#hint_id_quantity').after(`
${txt}
`); + } + }).then(function() { + // Update pricing data (if available) + if (options.update_pricing) { + inventreeGet( + '{% url "api-part-supplier-price-list" %}', + { + part: supplier_part_id, + ordering: 'quantity', + }, + { + success: function(response) { + // Returned prices are in increasing order of quantity + if (response.length > 0) { + var idx = 0; + var index = 0; + + for (var idx = 0; idx < response.length; idx++) { + if (response[idx].quantity > quantity) { + break; + } + + index = idx; + } + + // Update price and currency data in the form + updateFieldValue('purchase_price', response[index].price, {}, opts); + updateFieldValue('purchase_price_currency', response[index].price_currency, {}, opts); + } + } + } + ); + } + }); + }, + secondary: { + method: 'POST', + title: '{% trans "Add Supplier Part" %}', + fields: function(data) { + var fields = supplierPartFields({ + part: data.part, + }); + + fields.supplier.value = options.supplier; + + // Adjust manufacturer part query based on selected part + fields.manufacturer_part.adjustFilters = function(query, opts) { + + var part = getFormFieldValue('part', {}, opts); + + if (part) { + query.part = part; + } + + return query; + }; + + return fields; + } + } + }, + quantity: {}, + reference: {}, + purchase_price: { + icon: 'fa-dollar-sign', + }, + purchase_price_currency: { + icon: 'fa-coins', + }, + target_date: { + icon: 'fa-calendar-alt', + }, + destination: { + icon: 'fa-sitemap', + filters: { + structural: false, + } + }, + notes: { + icon: 'fa-sticky-note', + }, + link: { + icon: 'fa-link', + } + }; + + if (options.order) { + fields.order.value = options.order; + fields.order.hidden = true; + } + + if (options.currency) { + fields.purchase_price_currency.value = options.currency; + } + + if (options.target_date) { + fields.target_date.value = options.target_date; + } + + return fields; +} + + + +// Create a new PurchaseOrderLineItem +function createPurchaseOrderLineItem(order, options={}) { + + let fields = poLineItemFields({ + order: order, + supplier: options.supplier, + currency: options.currency, + target_date: options.target_date, + update_pricing: true, + }); + + constructForm('{% url "api-po-line-list" %}', { + fields: fields, + method: 'POST', + title: '{% trans "Add Line Item" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Launches a modal form to mark a PurchaseOrder as "complete" + */ +function completePurchaseOrder(order_id, options={}) { + + constructForm( + `/api/order/po/${order_id}/complete/`, + { + method: 'POST', + title: '{% trans "Complete Purchase Order" %}', + confirm: true, + fieldsFunction: function(opts) { + var fields = { + accept_incomplete: {}, + }; + + if (opts.context.is_complete) { + delete fields['accept_incomplete']; + } + + return fields; + }, + preFormContent: function(opts) { + + var html = ` +
+ {% trans "Mark this order as complete?" %} +
`; + + if (opts.context.is_complete) { + html += ` +
+ {% trans "All line items have been received" %} +
`; + } else { + html += ` +
+ {% trans 'This order has line items which have not been marked as received.' %}
+ {% trans 'Completing this order means that the order and line items will no longer be editable.' %} +
`; + } + + return html; + }, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + + +/* + * Launches a modal form to mark a PurchaseOrder as 'cancelled' + */ +function cancelPurchaseOrder(order_id, options={}) { + + constructForm( + `/api/order/po/${order_id}/cancel/`, + { + method: 'POST', + title: '{% trans "Cancel Purchase Order" %}', + confirm: true, + preFormContent: function(opts) { + var html = ` +
+ {% trans "Are you sure you wish to cancel this purchase order?" %} +
`; + + if (!opts.context.can_cancel) { + html += ` +
+ {% trans "This purchase order can not be cancelled" %} +
`; + } + + return html; + }, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + + +/* + * Launches a modal form to mark a PurchaseOrder as "issued" + */ +function issuePurchaseOrder(order_id, options={}) { + + let html = ` +
+ {% trans 'After placing this order, line items will no longer be editable.' %} +
`; + + constructForm(`{% url "api-po-list" %}${order_id}/issue/`, { + method: 'POST', + title: '{% trans "Issue Purchase Order" %}', + confirm: true, + preFormContent: html, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + + + +function newSupplierPartFromOrderWizard(e) { + /* Create a new supplier part directly from an order form. + * Launches a secondary modal and (if successful), + * back-populates the selected row. + */ + + e = e || window.event; + + var src = e.srcElement || e.target; + + var part = $(src).attr('part'); + + if (!part) { + part = $(src).closest('button').attr('part'); + } + + createSupplierPart({ + part: part, + onSuccess: function(data) { + + // TODO: 2021-08-23 - This whole form wizard needs to be refactored. + // In the future, use the API forms functionality to add the new item + // For now, this hack will have to do... + + var dropdown = `#id_supplier_part_${part}`; + + var pk = data.pk; + + inventreeGet( + `/api/company/part/${pk}/`, + { + supplier_detail: true, + }, + { + success: function(response) { + var text = ''; + + if (response.supplier_detail) { + text += response.supplier_detail.name; + text += ' | '; + } + + text += response.SKU; + + var option = new Option(text, pk, true, true); + + $('#modal-form').find(dropdown).append(option).trigger('change'); + } + } + ); + } + }); +} + + + + +/* + * Create a new form to order parts based on the list of provided parts. + */ +function orderParts(parts_list, options) { + + var parts = []; + + var parts_seen = {}; + + parts_list.forEach(function(part) { + if (part.purchaseable) { + + // Prevent duplicates + if (!(part.pk in parts_seen)) { + parts_seen[part.pk] = true; + parts.push(part); + } + } + }); + + if (parts.length == 0) { + showAlertDialog( + '{% trans "Select Parts" %}', + '{% trans "At least one purchaseable part must be selected" %}', + ); + return; + } + + // Render a single part within the dialog + function renderPart(part, opts={}) { + + var pk = part.pk; + + var thumb = thumbnailImage(part.thumbnail || part.image); + + // Default quantity value + var quantity = part.quantity || 1; + + if (quantity < 0) { + quantity = 0; + } + + var quantity_input = constructField( + `quantity_${pk}`, + { + type: 'decimal', + min_value: 0, + value: quantity, + title: '{% trans "Quantity to order" %}', + required: true, + }, + { + hideLabels: true, + } + ); + + var supplier_part_prefix = ` + + `; + + var supplier_part_input = constructField( + `part_${pk}`, + { + type: 'related field', + required: true, + prefixRaw: supplier_part_prefix, + }, + { + hideLabels: true, + } + ); + + var purchase_order_prefix = ` + + `; + + var purchase_order_input = constructField( + `order_${pk}`, + { + type: 'related field', + required: true, + prefixRaw: purchase_order_prefix, + }, + { + hideLabels: 'true', + } + ); + + let buttons = ''; + + if (parts.length > 1) { + buttons += makeRemoveButton( + 'button-row-remove', + pk, + '{% trans "Remove row" %}', + ); + } + + // Button to add row to purchase order + buttons += makeIconButton( + 'fa-shopping-cart icon-blue', + 'button-row-add', + pk, + '{% trans "Add to purchase order" %}', + ); + + buttons = wrapButtons(buttons); + + var html = ` + + ${thumb} ${part.full_name} + ${supplier_part_input} + ${purchase_order_input} + ${quantity_input} + ${buttons} + `; + + return html; + } + + // Remove a single row form this dialog + function removeRow(pk, opts) { + // Remove the row + $(opts.modal).find(`#order_row_${pk}`).remove(); + + // If the modal is now "empty", dismiss it + if (!($(opts.modal).find('.part-order-row').exists())) { + closeModal(opts.modal); + // If there is a onSuccess callback defined, call it + if (options && options.onSuccess) { + options.onSuccess(); + } + } + } + + var table_entries = ''; + + parts.forEach(function(part) { + table_entries += renderPart(part); + }); + + var html = ''; + + // Add table + html += ` + + + + + + + + + + + + ${table_entries} + +
{% trans "Part" %}{% trans "Supplier Part" %}{% trans "Purchase Order" %}{% trans "Quantity" %}
+ `; + + // Construct API filters for the SupplierPart field + var supplier_part_filters = { + supplier_detail: true, + part_detail: true, + }; + + if (options.supplier) { + supplier_part_filters.supplier = options.supplier; + } + + if (options.manufacturer) { + supplier_part_filters.manufacturer = options.manufacturer; + } + + if (options.manufacturer_part) { + supplier_part_filters.manufacturer_part = options.manufacturer_part; + } + + // Construct API filtres for the PurchaseOrder field + var order_filters = { + status: {{ PurchaseOrderStatus.PENDING }}, + supplier_detail: true, + }; + + if (options.supplier) { + order_filters.supplier = options.supplier; + } + + constructFormBody({}, { + preFormContent: html, + title: '{% trans "Order Parts" %}', + hideSubmitButton: true, + closeText: '{% trans "Close" %}', + afterRender: function(fields, opts) { + parts.forEach(function(part) { + + var pk = part.pk; + + // Filter by base part + supplier_part_filters.part = pk; + + if (part.manufacturer_part) { + // Filter by manufacturer part + supplier_part_filters.manufacturer_part = part.manufacturer_part; + } + + // Callback function when supplier part is changed + // This is used to update the "pack size" attribute + var onSupplierPartChanged = function(value, name, field, opts) { + var pack_size = 1; + var units = ''; + + $(opts.modal).find(`#info-pack-size-${pk}`).remove(); + + if (value != null) { + inventreeGet( + `/api/company/part/${value}/`, + { + part_detail: true, + }, + { + success: function(response) { + pack_size = response.pack_size || 1; + units = response.part_detail.units || ''; + } + } + ).then(function() { + if (pack_size != 1) { + var txt = ` {% trans "Pack Quantity" %}: ${pack_size} ${units}`; + $(opts.modal).find(`#id_quantity_${pk}`).after(`
${txt}
`); + } + }); + } + }; + + var supplier_part_field = { + name: `part_${part.pk}`, + model: 'supplierpart', + api_url: '{% url "api-supplier-part-list" %}', + required: true, + type: 'related field', + auto_fill: true, + value: options.supplier_part, + filters: supplier_part_filters, + onEdit: onSupplierPartChanged, + noResults: function(query) { + return '{% trans "No matching supplier parts" %}'; + } + }; + + // Configure the "supplier part" field + initializeRelatedField(supplier_part_field, null, opts); + addFieldCallback(`part_${part.pk}`, supplier_part_field, opts); + + // Configure the "purchase order" field + initializeRelatedField({ + name: `order_${part.pk}`, + model: 'purchaseorder', + api_url: '{% url "api-po-list" %}', + required: true, + type: 'related field', + auto_fill: false, + value: options.order, + filters: order_filters, + noResults: function(query) { + return '{% trans "No matching purchase orders" %}'; + } + }, null, opts); + + // Request 'requirements' information for each part + inventreeGet(`{% url "api-part-list" %}${part.pk}/requirements/`, {}, { + success: function(response) { + var required = response.required || 0; + var allocated = response.allocated || 0; + var available = response.available_stock || 0; + + // Based on what we currently 'have' on hand, what do we need to order? + var deficit = Math.max(required - allocated, 0); + + if (available < deficit) { + var q = deficit - available; + + updateFieldValue( + `quantity_${part.pk}`, + q, + {}, + opts + ); + } + } + }); + }); + + // Add callback for "add to purchase order" button + $(opts.modal).find('.button-row-add').click(function() { + var pk = $(this).attr('pk'); + + opts.field_suffix = null; + + // Extract information from the row + var data = { + quantity: getFormFieldValue(`quantity_${pk}`, {type: 'decimal'}, opts), + part: getFormFieldValue(`part_${pk}`, {}, opts), + order: getFormFieldValue(`order_${pk}`, {}, opts), + }; + + // Duplicate the form options, to prevent 'field_suffix' override + var row_opts = Object.assign(opts); + row_opts.field_suffix = `_${pk}`; + + inventreePut( + '{% url "api-po-line-list" %}', + data, + { + method: 'POST', + success: function(response) { + removeRow(pk, opts); + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, row_opts); + break; + default: + console.error(`Error adding line to purchase order`); + showApiError(xhr, options.url); + break; + } + } + } + ); + }); + + // Add callback for "remove row" button + $(opts.modal).find('.button-row-remove').click(function() { + var pk = $(this).attr('pk'); + + removeRow(pk, opts); + }); + + // Add callback for "new supplier part" button + $(opts.modal).find('.button-row-new-sp').click(function() { + var pk = $(this).attr('pk'); + + // Launch dialog to create new supplier part + createSupplierPart({ + part: pk, + onSuccess: function(response) { + setRelatedFieldData( + `part_${pk}`, + response, + opts + ); + } + }); + }); + + // Add callback for "new purchase order" button + $(opts.modal).find('.button-row-new-po').click(function() { + var pk = $(this).attr('pk'); + + // Launch dialog to create new purchase order + createPurchaseOrder({ + onSuccess: function(response) { + setRelatedFieldData( + `order_${pk}`, + response, + opts + ); + } + }); + }); + } + }); +} + + + +/* Create a new purchase order directly from an order form. + * Launches a secondary modal and (if successful), + * back-fills the newly created purchase order. + */ +function newPurchaseOrderFromOrderWizard(e) { + + e = e || window.event; + + var src = e.target || e.srcElement; + + var supplier = $(src).attr('supplierid'); + + createPurchaseOrder({ + supplier: supplier, + onSuccess: function(data) { + + // TODO: 2021-08-23 - The whole form wizard needs to be refactored + // In the future, the drop-down should be using a dynamic AJAX request + // to fill out the select2 options! + + var pk = data.pk; + + inventreeGet( + `/api/order/po/${pk}/`, + { + supplier_detail: true, + }, + { + success: function(response) { + var text = response.reference; + + if (response.supplier_detail) { + text += ` ${response.supplier_detail.name}`; + } + + var dropdown = `#id-purchase-order-${supplier}`; + + var option = new Option(text, pk, true, true); + + $('#modal-form').find(dropdown).append(option).trigger('change'); + } + } + ); + } + }); +} + + + +/** + * Receive stock items against a PurchaseOrder + * Uses the PurchaseOrderReceive API endpoint + * + * arguments: + * - order_id, ID / PK for the PurchaseOrder instance + * - line_items: A list of PurchaseOrderLineItems objects to be allocated + * + * options: + * - + */ +function receivePurchaseOrderItems(order_id, line_items, options={}) { + + // Zero items selected? + if (line_items.length == 0) { + + showAlertDialog( + '{% trans "Select Line Items" %}', + '{% trans "At least one line item must be selected" %}', + ); + return; + } + + function renderLineItem(line_item, opts={}) { + + var pk = line_item.pk; + + // Part thumbnail + description + var thumb = thumbnailImage(line_item.part_detail.thumbnail); + + var quantity = (line_item.quantity || 0) - (line_item.received || 0); + + if (quantity < 0) { + quantity = 0; + } + + var units = line_item.part_detail.units || ''; + var pack_size = line_item.supplier_part_detail.pack_size || 1; + var pack_size_div = ''; + + var received = quantity * pack_size; + + if (pack_size != 1) { + pack_size_div = ` +
+ {% trans "Pack Quantity" %}: ${pack_size} ${units}
+ {% trans "Received Quantity" %}: ${received} ${units} +
`; + } + + // Quantity to Receive + var quantity_input = constructField( + `items_quantity_${pk}`, + { + type: 'decimal', + min_value: 0, + value: quantity, + title: '{% trans "Quantity to receive" %}', + required: true, + }, + { + hideLabels: true, + } + ); + + // Add in options for "batch code" and "serial numbers" + var batch_input = constructField( + `items_batch_code_${pk}`, + { + type: 'string', + required: false, + label: '{% trans "Batch Code" %}', + help_text: '{% trans "Enter batch code for incoming stock items" %}', + icon: 'fa-layer-group', + }, + { + hideLabels: true, + } + ); + + // Hidden barcode input + var barcode_input = constructField( + `items_barcode_${pk}`, + { + type: 'string', + required: 'false', + hidden: 'true' + } + ); + + var sn_input = constructField( + `items_serial_numbers_${pk}`, + { + type: 'string', + required: false, + label: '{% trans "Serial Numbers" %}', + help_text: '{% trans "Enter serial numbers for incoming stock items" %}', + icon: 'fa-hashtag', + }, + { + hideLabels: true, + } + ); + + var quantity_input_group = `${quantity_input}${pack_size_div}`; + + // Construct list of StockItem status codes + var choices = []; + + for (var key in stockCodes) { + choices.push({ + value: stockCodes[key].key, + display_name: stockCodes[key].value, + }); + } + + var destination_input = constructField( + `items_location_${pk}`, + { + type: 'related field', + label: '{% trans "Location" %}', + required: false, + icon: 'fa-sitemap', + }, + { + hideLabels: true, + } + ); + + var status_input = constructField( + `items_status_${pk}`, + { + type: 'choice', + label: '{% trans "Stock Status" %}', + required: true, + choices: choices, + value: 10, // OK + }, + { + hideLabels: true, + } + ); + + // Button to remove the row + let buttons = ''; + + if (global_settings.BARCODE_ENABLE) { + buttons += makeIconButton('fa-qrcode', 'button-row-add-barcode', pk, '{% trans "Add barcode" %}'); + buttons += makeIconButton('fa-unlink icon-red', 'button-row-remove-barcode', pk, '{% trans "Remove barcode" %}', {hidden: true}); + } + + buttons += makeIconButton('fa-sitemap', 'button-row-add-location', pk, '{% trans "Specify location" %}', { + collapseTarget: `row-destination-${pk}` + }); + + buttons += makeIconButton( + 'fa-layer-group', + 'button-row-add-batch', + pk, + '{% trans "Add batch code" %}', + { + collapseTarget: `row-batch-${pk}` + } + ); + + if (line_item.part_detail.trackable) { + buttons += makeIconButton( + 'fa-hashtag', + 'button-row-add-serials', + pk, + '{% trans "Add serial numbers" %}', + { + collapseTarget: `row-serials-${pk}`, + } + ); + } + + if (line_items.length > 1) { + buttons += makeRemoveButton('button-row-remove', pk, '{% trans "Remove row" %}'); + } + + buttons = wrapButtons(buttons); + + let progress = makeProgressBar(line_item.received, line_item.quantity); + + var html = ` + + + ${thumb} ${line_item.part_detail.full_name} + + + ${line_item.supplier_part_detail.SKU} + + + ${progress} + + + ${quantity_input_group} + + + ${status_input} + + + ${barcode_input} + ${buttons} + + + + + + {% trans "Location" %} + ${destination_input} + + + + + {% trans "Batch" %} + ${batch_input} + + + + + {% trans "Serials" %} + ${sn_input} + + + `; + + return html; + } + + var table_entries = ''; + + line_items.forEach(function(item) { + if (item.received < item.quantity) { + table_entries += renderLineItem(item); + } + }); + + var html = ``; + + // Add table + html += ` + + + + + + + + + + + + + ${table_entries} + +
{% trans "Part" %}{% trans "Order Code" %}{% trans "Received" %}{% trans "Quantity to Receive" %}{% trans "Status" %}
+ `; + + constructForm(`{% url "api-po-list" %}${order_id}/receive/`, { + method: 'POST', + fields: { + location: { + filters: { + structural: false, + } + }, + }, + preFormContent: html, + confirm: true, + confirmMessage: '{% trans "Confirm receipt of items" %}', + title: '{% trans "Receive Purchase Order Items" %}', + afterRender: function(fields, opts) { + + // Run initialization routines for each line in the form + line_items.forEach(function(item) { + + var pk = item.pk; + + var name = `items_location_${pk}`; + + var field_details = { + name: name, + api_url: '{% url "api-location-list" %}', + filters: { + + }, + type: 'related field', + model: 'stocklocation', + required: false, + auto_fill: false, + value: item.destination || item.part_detail.default_location, + render_description: false, + }; + + // Initialize the location field + initializeRelatedField( + field_details, + null, + opts, + ); + + // Add 'clear' button callback for the location field + addClearCallback( + name, + field_details, + opts + ); + + // Setup stock item status field + initializeChoiceField( + { + name: `items_status_${pk}`, + }, + null, + opts + ); + + // Add change callback for quantity field + if (item.supplier_part_detail.pack_size != 1) { + $(opts.modal).find(`#id_items_quantity_${pk}`).change(function() { + var value = $(opts.modal).find(`#id_items_quantity_${pk}`).val(); + + var el = $(opts.modal).find(`#quantity_${pk}`).find('.pack_received_quantity'); + + var actual = value * item.supplier_part_detail.pack_size; + actual = formatDecimal(actual); + el.text(actual); + }); + } + }); + + // Add callbacks to add barcode + if (global_settings.BARCODE_ENABLE) { + $(opts.modal).find('.button-row-add-barcode').click(function() { + var btn = $(this); + let pk = btn.attr('pk'); + + // Scan to see if the barcode matches an existing StockItem + barcodeDialog('{% trans "Scan Item Barcode" %}', { + details: '{% trans "Scan barcode on incoming item (must not match any existing stock items)" %}', + onScan: function(response, barcode_options) { + // A 'success' result means that the barcode matches something existing in the database + showBarcodeMessage(barcode_options.modal, '{% trans "Barcode matches existing item" %}'); + }, + onError400: function(response, barcode_options) { + if (response.barcode_data && response.barcode_hash) { + // Success! Hide the modal and update the value + $(barcode_options.modal).modal('hide'); + + btn.hide(); + $(opts.modal).find(`#button-row-remove-barcode-${pk}`).show(); + updateFieldValue(`items_barcode_${pk}`, response.barcode_data, {}, opts); + } else { + showBarcodeMessage(barcode_options.modal, '{% trans "Invalid barcode data" %}'); + } + } + }); + }); + + $(opts.modal).find('.button-row-remove-barcode').click(function() { + var btn = $(this); + let pk = btn.attr('pk'); + + btn.hide(); + $(opts.modal).find(`#button-row-add-barcode-${pk}`).show(); + updateFieldValue(`items_barcode_${pk}`, '', {}, opts); + }); + } + + // Add callbacks to remove rows + $(opts.modal).find('.button-row-remove').click(function() { + var pk = $(this).attr('pk'); + + $(opts.modal).find(`#receive_row_${pk}`).remove(); + }); + }, + onSubmit: function(fields, opts) { + // Extract data elements from the form + var data = { + items: [], + location: getFormFieldValue('location', {}, opts), + }; + + var item_pk_values = []; + + line_items.forEach(function(item) { + + var pk = item.pk; + + // Extract data for each line + var quantity = getFormFieldValue(`items_quantity_${pk}`, {}, opts); + var status = getFormFieldValue(`items_status_${pk}`, {}, opts); + var location = getFormFieldValue(`items_location_${pk}`, {}, opts); + + if (quantity != null) { + + var line = { + line_item: pk, + quantity: quantity, + status: status, + location: location, + }; + + if (global_settings.BARCODE_ENABLE) { + line.barcode = getFormFieldValue(`items_barcode_${pk}`, {}, opts); + } + + if (getFormFieldElement(`items_batch_code_${pk}`).exists()) { + line.batch_code = getFormFieldValue(`items_batch_code_${pk}`); + } + + if (getFormFieldElement(`items_serial_numbers_${pk}`).exists()) { + line.serial_numbers = getFormFieldValue(`items_serial_numbers_${pk}`); + } + + data.items.push(line); + item_pk_values.push(pk); + } + + }); + + // Provide list of nested values + opts.nested = { + 'items': item_pk_values, + }; + + inventreePut( + opts.url, + data, + { + method: 'POST', + success: function(response) { + // Hide the modal + $(opts.modal).modal('hide'); + + if (options.success) { + options.success(response); + } + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, opts); + break; + default: + $(opts.modal).modal('hide'); + showApiError(xhr, opts.url); + break; + } + } + } + ); + } + }); +} + + +/* + * Edit a purchase order line item in a modal form. + */ +function editPurchaseOrderLineItem(e) { + e = e || window.event; + + var src = e.target || e.srcElement; + + var url = $(src).attr('url'); + + // TODO: Migrate this to the API forms + launchModalForm(url, { + reload: true, + }); +} + +/* + * Delete a purchase order line item in a modal form + */ +function removePurchaseOrderLineItem(e) { + + e = e || window.event; + + var src = e.target || e.srcElement; + + var url = $(src).attr('url'); + + // TODO: Migrate this to the API forms + launchModalForm(url, { + reload: true, + }); +} + + +/* + * Load a table displaying list of purchase orders + */ +function loadPurchaseOrderTable(table, options) { + // Ensure the table starts in a known state + $(table).bootstrapTable('destroy'); + + options.params = options.params || {}; + + options.params['supplier_detail'] = true; + + var filters = loadTableFilters('purchaseorder', options.params); + + setupFilterList('purchaseorder', $(table), '#filter-list-purchaseorder', { + download: true, + report: { + url: '{% url "api-po-report-list" %}', + key: 'order', + } + }); + + var display_mode = inventreeLoad('purchaseorder-table-display-mode', 'list'); + + // Function for rendering PurchaseOrder calendar display + function buildEvents(calendar) { + + var start = startDate(calendar); + var end = endDate(calendar); + + clearEvents(calendar); + + // Extract current filters from table + var table_options = $(table).bootstrapTable('getOptions'); + var filters = table_options.query_params || {}; + + filters.supplier_detail = true; + filters.min_date = start; + filters.max_date = end; + + // Request purchase orders from the server within specified date range + inventreeGet( + '{% url "api-po-list" %}', + filters, + { + success: function(response) { + for (var idx = 0; idx < response.length; idx++) { + + var order = response[idx]; + + var date = order.creation_date; + + if (order.complete_date) { + date = order.complete_date; + } else if (order.target_date) { + date = order.target_date; + } + + var title = `${order.reference} - ${order.supplier_detail.name}`; + + var color = '#4c68f5'; + + if (order.complete_date) { + color = '#25c235'; + } else if (order.overdue) { + color = '#c22525'; + } else { + color = '#4c68f5'; + } + + var event = { + title: title, + start: date, + end: date, + url: `/order/purchase-order/${order.pk}/`, + backgroundColor: color, + }; + + calendar.addEvent(event); + } + } + } + ); + } + + $(table).inventreeTable({ + url: '{% url "api-po-list" %}', + queryParams: filters, + name: 'purchaseorder', + groupBy: false, + sidePagination: 'server', + original: options.params, + showColumns: display_mode == 'list', + disablePagination: display_mode == 'calendar', + showCustomViewButton: false, + showCustomView: display_mode == 'calendar', + search: display_mode != 'calendar', + formatNoMatches: function() { + return '{% trans "No purchase orders found" %}'; + }, + buttons: constructOrderTableButtons({ + prefix: 'purchaseorder', + disableTreeView: true, + callback: function() { + // Reload the entire table + loadPurchaseOrderTable(table, options); + } + }), + columns: [ + { + title: '', + visible: true, + checkbox: true, + switchable: false, + }, + { + field: 'reference', + title: '{% trans "Purchase Order" %}', + sortable: true, + switchable: false, + formatter: function(value, row) { + + var html = renderLink(value, `/order/purchase-order/${row.pk}/`); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Order is overdue" %}'); + } + + return html; + } + }, + { + field: 'supplier_detail', + title: '{% trans "Supplier" %}', + sortable: true, + sortName: 'supplier__name', + formatter: function(value, row) { + return imageHoverIcon(row.supplier_detail.image) + renderLink(row.supplier_detail.name, `/company/${row.supplier}/?display=purchase-orders`); + } + }, + { + field: 'supplier_reference', + title: '{% trans "Supplier Reference" %}', + }, + { + field: 'description', + title: '{% trans "Description" %}', + }, + { + field: 'status', + title: '{% trans "Status" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + return purchaseOrderStatusDisplay(row.status); + } + }, + { + field: 'creation_date', + title: '{% trans "Date" %}', + sortable: true, + formatter: function(value) { + return renderDate(value); + } + }, + { + field: 'target_date', + title: '{% trans "Target Date" %}', + sortable: true, + formatter: function(value) { + return renderDate(value); + } + }, + { + field: 'line_items', + title: '{% trans "Items" %}', + sortable: true, + }, + { + field: 'total_price', + title: '{% trans "Total Cost" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + return formatCurrency(value, { + currency: row.total_price_currency, + }); + }, + }, + { + field: 'responsible', + title: '{% trans "Responsible" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + + if (!row.responsible_detail) { + return '-'; + } + + var html = row.responsible_detail.name; + + if (row.responsible_detail.label == 'group') { + html += ``; + } else { + html += ``; + } + + return html; + } + }, + ], + customView: function(data) { + return `
`; + }, + onRefresh: function() { + loadPurchaseOrderTable(table, options); + }, + onLoadSuccess: function() { + + if (display_mode == 'calendar') { + var el = document.getElementById('purchase-order-calendar'); + + calendar = new FullCalendar.Calendar(el, { + initialView: 'dayGridMonth', + nowIndicator: true, + aspectRatio: 2.5, + locale: options.locale, + datesSet: function() { + buildEvents(calendar); + } + }); + + calendar.render(); + } + } + }); +} + + +/* + * Delete the selected Purchase Order Line Items from the database + */ +function deletePurchaseOrderLineItems(items, options={}) { + + function renderItem(item, opts={}) { + + var part = item.part_detail; + var thumb = thumbnailImage(item.part_detail.thumbnail || item.part_detail.image); + var MPN = item.supplier_part_detail.manufacturer_part_detail ? item.supplier_part_detail.manufacturer_part_detail.MPN : '-'; + + var html = ` + + ${thumb} ${part.full_name} + ${part.description} + ${item.supplier_part_detail.SKU} + ${MPN} + ${item.quantity} + + `; + + return html; + } + + var rows = ''; + var ids = []; + + items.forEach(function(item) { + rows += renderItem(item); + ids.push(item.pk); + }); + + var html = ` +
+ {% trans "All selected Line items will be deleted" %} +
+ + + + + + + + + + ${rows} +
{% trans "Part" %}{% trans "Description" %}{% trans "SKU" %}{% trans "MPN" %}{% trans "Quantity" %}
+ `; + + constructForm('{% url "api-po-line-list" %}', { + method: 'DELETE', + multi_delete: true, + title: '{% trans "Delete selected Line items?" %}', + form_data: { + items: ids, + }, + preFormContent: html, + refreshTable: '#po-line-table', + }); +} + + +/** + * Load a table displaying line items for a particular PurchasesOrder + * @param {String} table - HTML ID tag e.g. '#table' + * @param {Object} options - options which must provide: + * - order (integer PK) + * - supplier (integer PK) + * - allow_edit (boolean) + * - allow_receive (boolean) + */ +function loadPurchaseOrderLineItemTable(table, options={}) { + + options.params = options.params || {}; + + options.params['order'] = options.order; + options.params['part_detail'] = true; + + // Override 'editing' if order is not pending + if (!options.pending && !global_settings.PURCHASEORDER_EDIT_COMPLETED_ORDERS) { + options.allow_edit = false; + } + + var filters = loadTableFilters('purchaseorderlineitem', options.params); + + setupFilterList( + 'purchaseorderlineitem', + $(table), + options.filter_target || '#filter-list-purchase-order-lines', + { + download: true + } + ); + + function setupCallbacks() { + if (options.allow_edit) { + + // Callback for "duplicate" button + $(table).find('.button-line-duplicate').click(function() { + var pk = $(this).attr('pk'); + + inventreeGet(`{% url "api-po-line-list" %}${pk}/`, {}, { + success: function(data) { + + var fields = poLineItemFields({ + supplier: options.supplier, + }); + + constructForm('{% url "api-po-line-list" %}', { + method: 'POST', + fields: fields, + data: data, + title: '{% trans "Duplicate Line Item" %}', + refreshTable: table, + }); + } + }); + }); + + // Callback for "edit" button + $(table).find('.button-line-edit').click(function() { + var pk = $(this).attr('pk'); + + var fields = poLineItemFields(options); + + constructForm(`{% url "api-po-line-list" %}${pk}/`, { + fields: fields, + title: '{% trans "Edit Line Item" %}', + refreshTable: table, + }); + }); + + // Callback for "delete" button + $(table).find('.button-line-delete').click(function() { + var pk = $(this).attr('pk'); + + constructForm(`{% url "api-po-line-list" %}${pk}/`, { + method: 'DELETE', + title: '{% trans "Delete Line Item" %}', + refreshTable: table, + }); + }); + + // Callback for bulk deleting mutliple lines + $('#po-lines-bulk-delete').off('click').on('click', function() { + var rows = getTableData(' #po-line-table'); + + deletePurchaseOrderLineItems(rows); + }); + } + + if (options.allow_receive) { + $(table).find('.button-line-receive').click(function() { + var pk = $(this).attr('pk'); + + var line_item = $(table).bootstrapTable('getRowByUniqueId', pk); + + if (!line_item) { + console.warn('getRowByUniqueId returned null'); + return; + } + + receivePurchaseOrderItems( + options.order, + [ + line_item, + ], + { + success: function() { + // Reload the line item table + reloadBootstrapTable(table); + + // Reload the "received stock" table + reloadBootstrapTable('#stock-table'); + } + } + ); + }); + } + } + + $(table).inventreeTable({ + onPostBody: setupCallbacks, + name: 'purchaseorderlines', + sidePagination: 'server', + formatNoMatches: function() { + return '{% trans "No line items found" %}'; + }, + queryParams: filters, + original: options.params, + url: '{% url "api-po-line-list" %}', + showFooter: true, + uniqueId: 'pk', + columns: [ + { + checkbox: true, + visible: true, + switchable: false, + }, + { + field: 'part', + sortable: true, + sortName: 'part_name', + title: '{% trans "Part" %}', + switchable: false, + formatter: function(value, row, index, field) { + if (row.part) { + return imageHoverIcon(row.part_detail.thumbnail) + renderLink(row.part_detail.full_name, `/part/${row.part_detail.pk}/`); + } else { + return '-'; + } + }, + footerFormatter: function() { + return '{% trans "Total" %}'; + } + }, + { + field: 'part_detail.description', + title: '{% trans "Description" %}', + }, + { + sortable: true, + sortName: 'SKU', + field: 'supplier_part_detail.SKU', + title: '{% trans "SKU" %}', + formatter: function(value, row, index, field) { + if (value) { + return renderLink(value, `/supplier-part/${row.part}/`); + } else { + return '-'; + } + }, + }, + { + sortable: false, + field: 'supplier_part_detail.link', + title: '{% trans "Link" %}', + formatter: function(value, row, index, field) { + if (value) { + return renderLink(value, value); + } else { + return ''; + } + }, + }, + { + sortable: true, + sortName: 'MPN', + field: 'supplier_part_detail.manufacturer_part_detail.MPN', + title: '{% trans "MPN" %}', + formatter: function(value, row, index, field) { + if (row.supplier_part_detail && row.supplier_part_detail.manufacturer_part) { + return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part}/`); + } else { + return '-'; + } + }, + }, + { + sortable: true, + field: 'reference', + title: '{% trans "Reference" %}', + }, + { + sortable: true, + switchable: false, + field: 'quantity', + title: '{% trans "Quantity" %}', + formatter: function(value, row) { + let units = ''; + + if (row.part_detail && row.part_detail.units) { + units = ` ${row.part_detail.units}`; + } + + let data = value; + + if (row.supplier_part_detail && row.supplier_part_detail.pack_size != 1.0) { + var pack_size = row.supplier_part_detail.pack_size; + var total = value * pack_size; + data += ``; + } + + return data; + }, + footerFormatter: function(data) { + return data.map(function(row) { + return +row['quantity']; + }).reduce(function(sum, i) { + return sum + i; + }, 0); + } + }, + { + sortable: false, + switchable: true, + field: 'supplier_part_detail.pack_size', + title: '{% trans "Pack Quantity" %}', + formatter: function(value, row) { + var units = row.part_detail.units; + + if (units) { + value += ` ${units}`; + } + + return value; + } + }, + { + sortable: true, + field: 'purchase_price', + title: '{% trans "Unit Price" %}', + formatter: function(value, row) { + return formatCurrency(row.purchase_price, { + currency: row.purchase_price_currency, + }); + } + }, + { + field: 'total_price', + sortable: true, + title: '{% trans "Total Price" %}', + formatter: function(value, row) { + return formatCurrency(row.purchase_price * row.quantity, { + currency: row.purchase_price_currency + }); + }, + footerFormatter: function(data) { + return calculateTotalPrice( + data, + function(row) { + return row.purchase_price ? row.purchase_price * row.quantity : null; + }, + function(row) { + return row.purchase_price_currency; + } + ); + } + }, + { + sortable: true, + field: 'target_date', + switchable: true, + title: '{% trans "Target Date" %}', + formatter: function(value, row) { + if (row.target_date) { + var html = renderDate(row.target_date); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times icon-red', '{% trans "This line item is overdue" %}'); + } + + return html; + + } else if (row.order_detail && row.order_detail.target_date) { + return `${renderDate(row.order_detail.target_date)}`; + } else { + return '-'; + } + } + }, + { + sortable: false, + field: 'received', + switchable: false, + title: '{% trans "Received" %}', + formatter: function(value, row, index, field) { + return makeProgressBar(row.received, row.quantity, { + id: `order-line-progress-${row.pk}`, + }); + }, + sorter: function(valA, valB, rowA, rowB) { + + if (rowA.received == 0 && rowB.received == 0) { + return (rowA.quantity > rowB.quantity) ? 1 : -1; + } + + var progressA = parseFloat(rowA.received) / rowA.quantity; + var progressB = parseFloat(rowB.received) / rowB.quantity; + + return (progressA < progressB) ? 1 : -1; + } + }, + { + field: 'destination', + title: '{% trans "Destination" %}', + formatter: function(value, row) { + if (value) { + return renderLink(row.destination_detail.pathstring, `/stock/location/${value}/`); + } else { + return '-'; + } + } + }, + { + field: 'notes', + title: '{% trans "Notes" %}', + }, + { + field: 'link', + title: '{% trans "Link" %}', + formatter: function(value) { + if (value) { + return renderLink(value, value); + } + } + }, + { + switchable: false, + field: 'buttons', + title: '', + formatter: function(value, row, index, field) { + let buttons = ''; + let pk = row.pk; + + if (options.allow_receive && row.received < row.quantity) { + buttons += makeIconButton('fa-sign-in-alt icon-green', 'button-line-receive', pk, '{% trans "Receive line item" %}'); + } + + if (options.allow_edit) { + buttons += makeCopyButton('button-line-duplicate', pk, '{% trans "Duplicate line item" %}'); + buttons += makeEditButton('button-line-edit', pk, '{% trans "Edit line item" %}'); + buttons += makeDeleteButton('button-line-delete', pk, '{% trans "Delete line item" %}'); + } + + return wrapButtons(buttons); + }, + } + ] + }); + + linkButtonsToSelection( + table, + [ + '#multi-select-options', + ] + ); + +} diff --git a/InvenTree/templates/js/translated/report.js b/InvenTree/templates/js/translated/report.js index 7187674635..a6d124a3cd 100644 --- a/InvenTree/templates/js/translated/report.js +++ b/InvenTree/templates/js/translated/report.js @@ -14,21 +14,17 @@ */ /* exported - printBomReports, - printBuildReports, - printPurchaseOrderReports, - printSalesOrderReports, - printTestReports, + printReports, */ +/** + * Present the user with the available reports, + * and allow them to select which report to print. + * + * The intent is that the available report templates have been requested + * (via AJAX) from the server. + */ function selectReport(reports, items, options={}) { - /** - * Present the user with the available reports, - * and allow them to select which report to print. - * - * The intent is that the available report templates have been requested - * (via AJAX) from the server. - */ // If there is only a single report available, just print! if (reports.length == 1) { @@ -108,270 +104,57 @@ function selectReport(reports, items, options={}) { } -function printTestReports(items) { - /** - * Print test reports for the provided stock item(s) - */ +/* + * Print report(s) for the selected items: + * + * - Retrieve a list of matching report templates from the server + * - Present the available templates to the user (if more than one available) + * - Request printed document + * + * Required options: + * - url: The list URL for the particular template type + * - items: The list of objects to print + * - key: The key to use in the query parameters + */ +function printReports(options) { - if (items.length == 0) { + if (!options.items || options.items.length == 0) { showAlertDialog( - '{% trans "Select Stock Items" %}', - '{% trans "Stock item(s) must be selected before printing reports" %}' + '{% trans "Select Items" %}', + '{% trans "No items selected for printing" }', ); - return; } - // Request available reports from the server - inventreeGet( - '{% url "api-stockitem-testreport-list" %}', - { - enabled: true, - items: items, - }, - { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Reports Found" %}', - '{% trans "No report templates found which match selected stock item(s)" %}', - ); + let params = { + enabled: true, + }; - return; - } + params[options.key] = options.items; - // Select report template to print - selectReport( - response, - items, - { - success: function(pk) { - var href = `/api/report/test/${pk}/print/?`; - - items.forEach(function(item) { - href += `item=${item}&`; - }); - - window.open(href); - } - } + // Request a list of available report templates + inventreeGet(options.url, params, { + success: function(response) { + if (response.length == 0) { + showAlertDialog( + '{% trans "No Reports Found" %}', + '{% trans "No report templates found which match the selected items" %}', ); + return; } - } - ); -} + // Select report template for printing + selectReport(response, options.items, { + success: function(pk) { + let href = `${options.url}${pk}/print/?`; -function printBuildReports(builds) { - /** - * Print Build report for the provided build(s) - */ + options.items.forEach(function(item) { + href += `${options.key}=${item}&`; + }); - if (builds.length == 0) { - showAlertDialog( - '{% trans "Select Builds" %}', - '{% trans "Build(s) must be selected before printing reports" %}', - ); - - return; - } - - inventreeGet( - '{% url "api-build-report-list" %}', - { - enabled: true, - builds: builds, - }, - { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Reports Found" %}', - '{% trans "No report templates found which match selected build(s)" %}' - ); - - return; + window.open(href); } - - // Select which report to print - selectReport( - response, - builds, - { - success: function(pk) { - var href = `/api/report/build/${pk}/print/?`; - - builds.forEach(function(build) { - href += `build=${build}&`; - }); - - window.open(href); - } - } - ); - } + }); } - ); -} - - -function printBomReports(parts) { - /** - * Print BOM reports for the provided part(s) - */ - - if (parts.length == 0) { - showAlertDialog( - '{% trans "Select Parts" %}', - '{% trans "Part(s) must be selected before printing reports" %}' - ); - - return; - } - - // Request available reports from the server - inventreeGet( - '{% url "api-bom-report-list" %}', - { - enabled: true, - parts: parts, - }, - { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Reports Found" %}', - '{% trans "No report templates found which match selected part(s)" %}', - ); - - return; - } - - // Select which report to print - selectReport( - response, - parts, - { - success: function(pk) { - var href = `/api/report/bom/${pk}/print/?`; - - parts.forEach(function(part) { - href += `part=${part}&`; - }); - - window.open(href); - } - } - ); - } - } - ); -} - - -function printPurchaseOrderReports(orders) { - /** - * Print PurchaseOrder reports for the provided purchase order(s) - */ - - if (orders.length == 0) { - showAlertDialog( - '{% trans "Select Purchase Orders" %}', - '{% trans "Purchase Order(s) must be selected before printing report" %}', - ); - - return; - } - - // Request avaiable report templates - inventreeGet( - '{% url "api-po-report-list" %}', - { - enabled: true, - orders: orders, - }, - { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Reports Found" %}', - '{% trans "No report templates found which match selected orders" %}', - ); - - return; - } - - // Select report template - selectReport( - response, - orders, - { - success: function(pk) { - var href = `/api/report/po/${pk}/print/?`; - - orders.forEach(function(order) { - href += `order=${order}&`; - }); - - window.open(href); - } - } - ); - } - } - ); -} - - -function printSalesOrderReports(orders) { - /** - * Print SalesOrder reports for the provided purchase order(s) - */ - - if (orders.length == 0) { - showAlertDialog( - '{% trans "Select Sales Orders" %}', - '{% trans "Sales Order(s) must be selected before printing report" %}', - ); - - return; - } - - // Request avaiable report templates - inventreeGet( - '{% url "api-so-report-list" %}', - { - enabled: true, - orders: orders, - }, - { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Reports Found" %}', - '{% trans "No report templates found which match selected orders" %}', - ); - - return; - } - - // Select report template - selectReport( - response, - orders, - { - success: function(pk) { - var href = `/api/report/so/${pk}/print/?`; - - orders.forEach(function(order) { - href += `order=${order}&`; - }); - - window.open(href); - } - } - ); - } - } - ); + }); } diff --git a/InvenTree/templates/js/translated/return_order.js b/InvenTree/templates/js/translated/return_order.js new file mode 100644 index 0000000000..884d9e2a10 --- /dev/null +++ b/InvenTree/templates/js/translated/return_order.js @@ -0,0 +1,755 @@ +{% load i18n %} +{% load inventree_extras %} + +/* globals + companyFormFields, + constructForm, + imageHoverIcon, + loadTableFilters, + renderLink, + returnOrderStatusDisplay, + setupFilterList, +*/ + +/* exported + cancelReturnOrder, + completeReturnOrder, + createReturnOrder, + createReturnOrderLineItem, + editReturnOrder, + editReturnOrderLineItem, + issueReturnOrder, + loadReturnOrderTable, + loadReturnOrderLineItemTable, +*/ + + +/* + * Construct a set of fields for a ReturnOrder form + */ +function returnOrderFields(options={}) { + + let fields = { + reference: { + icon: 'fa-hashtag', + }, + description: {}, + customer: { + icon: 'fa-user-tie', + secondary: { + title: '{% trans "Add Customer" %}', + fields: function() { + var fields = companyFormFields(); + fields.is_customer.value = true; + return fields; + } + } + }, + customer_reference: {}, + target_date: { + icon: 'fa-calendar-alt', + }, + link: { + icon: 'fa-link', + }, + contact: { + icon: 'fa-user', + adjustFilters: function(filters) { + let customer = getFormFieldValue('customer', {}, {modal: options.modal}); + + if (customer) { + filters.company = customer; + } + + return filters; + } + }, + responsible: { + icon: 'fa-user', + } + }; + + return fields; +} + + +/* + * Create a new Return Order + */ +function createReturnOrder(options={}) { + let fields = returnOrderFields(options); + + if (options.customer) { + fields.customer.value = options.customer; + } + + constructForm('{% url "api-return-order-list" %}', { + method: 'POST', + fields: fields, + title: '{% trans "Create Return Order" %}', + onSuccess: function(data) { + location.href = `/order/return-order/${data.pk}/`; + }, + }); +} + + +/* + * Edit an existing Return Order + */ +function editReturnOrder(order_id, options={}) { + + constructForm(`{% url "api-return-order-list" %}${order_id}/`, { + fields: returnOrderFields(options), + title: '{% trans "Edit Return Order" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * "Issue" a ReturnOrder, to mark it as "in progress" + */ +function issueReturnOrder(order_id, options={}) { + + let html = ` +
+ {% trans 'After placing this order, line items will no longer be editable.' %} +
`; + + constructForm(`{% url "api-return-order-list" %}${order_id}/issue/`, { + method: 'POST', + title: '{% trans "Issue Return Order" %}', + confirm: true, + preFormContent: html, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Launches a modal form to cancel a ReturnOrder + */ +function cancelReturnOrder(order_id, options={}) { + + let html = ` +
+ {% trans "Are you sure you wish to cancel this Return Order?" %} +
`; + + constructForm( + `{% url "api-return-order-list" %}${order_id}/cancel/`, + { + method: 'POST', + title: '{% trans "Cancel Return Order" %}', + confirm: true, + preFormContent: html, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + + +/* + * Launches a modal form to mark a ReturnOrder as "complete" + */ +function completeReturnOrder(order_id, options={}) { + let html = ` +
+ {% trans "Mark this order as complete?" %} +
+ `; + + constructForm( + `{% url "api-return-order-list" %}${order_id}/complete/`, + { + method: 'POST', + title: '{% trans "Complete Return Order" %}', + confirm: true, + preFormContent: html, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + + +/* + * Load a table of return orders + */ +function loadReturnOrderTable(table, options={}) { + + // Ensure the table starts in a known state + $(table).bootstrapTable('destroy'); + + options.params = options.params || {}; + options.params['customer_detail'] = true; + + let filters = loadTableFilters('returnorder', options.params); + + setupFilterList('returnorder', $(table), '#filter-list-returnorder', { + download: true, + report: { + url: '{% url "api-return-order-report-list" %}', + key: 'order', + } + }); + + let display_mode = inventreeLoad('returnorder-table-display-mode', 'list'); + + let is_calendar = display_mode == 'calendar'; + + $(table).inventreeTable({ + url: '{% url "api-return-order-list" %}', + queryParams: filters, + name: 'returnorder', + sidePagination: 'server', + original: options.params, + showColumns: !is_calendar, + search: !is_calendar, + showCustomViewButton: false, + showCustomView: is_calendar, + disablePagination: is_calendar, + formatNoMatches: function() { + return '{% trans "No return orders found" %}'; + }, + onRefresh: function() { + loadReturnOrderTable(table, options); + }, + onLoadSuccess: function() { + // TODO + }, + columns: [ + { + title: '', + checkbox: true, + visible: true, + switchable: false, + }, + { + sortable: true, + field: 'reference', + title: '{% trans "Return Order" %}', + formatter: function(value, row) { + let html = renderLink(value, `/order/return-order/${row.pk}/`); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Order is overdue" %}'); + } + + return html; + }, + }, + { + sortable: true, + sortName: 'customer__name', + field: 'customer_detail', + title: '{% trans "Customer" %}', + formatter: function(value, row) { + + if (!row.customer_detail) { + return '{% trans "Invalid Customer" %}'; + } + + return imageHoverIcon(row.customer_detail.image) + renderLink(row.customer_detail.name, `/company/${row.customer}/sales-orders/`); + } + }, + { + sortable: true, + field: 'customer_reference', + title: '{% trans "Customer Reference" %}', + }, + { + sortable: false, + field: 'description', + title: '{% trans "Description" %}', + }, + { + sortable: true, + field: 'status', + title: '{% trans "Status" %}', + formatter: function(value, row) { + return returnOrderStatusDisplay(row.status); + } + }, + { + sortable: true, + field: 'creation_date', + title: '{% trans "Creation Date" %}', + formatter: function(value) { + return renderDate(value); + } + }, + { + sortable: true, + field: 'target_date', + title: '{% trans "Target Date" %}', + formatter: function(value) { + return renderDate(value); + } + }, + { + field: 'line_items', + title: '{% trans "Items" %}', + sortable: true, + }, + { + field: 'responsible', + title: '{% trans "Responsible" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + if (!row.responsible_detail) { + return '-'; + } + + let html = row.responsible_detail.name; + + if (row.responsible_detail.label == 'group') { + html += ``; + } else { + html += ``; + } + + return html; + } + }, + { + // TODO: Add in the 'total cost' field + field: 'total_price', + title: '{% trans "Total Cost" %}', + switchable: true, + sortable: true, + visible: false, + formatter: function(value, row) { + return formatCurrency(value, { + currency: row.total_price_currency + }); + } + } + ] + }); +} + + +/* + * Construct a set of fields for a ReturnOrderLineItem form + */ +function returnOrderLineItemFields(options={}) { + + let fields = { + order: { + filters: { + customer_detail: true, + } + }, + item: { + filters: { + part_detail: true, + serialized: true, + } + }, + reference: {}, + outcome: { + icon: 'fa-route', + }, + price: { + icon: 'fa-dollar-sign', + }, + price_currency: { + icon: 'fa-coins', + }, + target_date: { + icon: 'fa-calendar-alt', + }, + notes: { + icon: 'fa-sticky-note', + }, + link: { + icon: 'fa-link', + }, + }; + + return fields; +} + + +/* + * Create a new ReturnOrderLineItem + */ +function createReturnOrderLineItem(options={}) { + + let fields = returnOrderLineItemFields(); + + if (options.order) { + fields.order.value = options.order; + fields.order.hidden = true; + } + + if (options.customer) { + Object.assign(fields.item.filters, { + customer: options.customer + }); + } + + constructForm('{% url "api-return-order-line-list" %}', { + fields: fields, + method: 'POST', + title: '{% trans "Add Line Item" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Edit an existing ReturnOrderLineItem + */ +function editReturnOrderLineItem(pk, options={}) { + + let fields = returnOrderLineItemFields(); + + constructForm(`{% url "api-return-order-line-list" %}${pk}/`, { + fields: fields, + title: '{% trans "Edit Line Item" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Receive one or more items against a ReturnOrder + */ +function receiveReturnOrderItems(order_id, line_items, options={}) { + + if (line_items.length == 0) { + showAlertDialog( + '{% trans "Select Line Items"% }', + '{% trans "At least one line item must be selected" %}' + ); + return; + } + + function renderLineItem(line_item) { + let pk = line_item.pk; + + // Render thumbnail + description + let thumb = thumbnailImage(line_item.part_detail.thumbnail); + + let buttons = ''; + + if (line_items.length > 1) { + buttons += makeRemoveButton('button-row-remove', pk, '{% trans "Remove row" %}'); + } + + buttons = wrapButtons(buttons); + + let html = ` + + + ${thumb} ${line_item.part_detail.full_name} + + + ${line_item.item_detail.serial} + + ${buttons} + `; + + return html; + } + + let table_entries = ''; + + line_items.forEach(function(item) { + if (!item.received_date) { + table_entries += renderLineItem(item); + } + }); + + let html = ''; + + html += ` + + + + + + + + ${table_entries} +
{% trans "Part" %}{% trans "Serial Number" %}
`; + + constructForm(`{% url "api-return-order-list" %}${order_id}/receive/`, { + method: 'POST', + preFormContent: html, + fields: { + location: { + filters: { + strucutral: false, + } + } + }, + confirm: true, + confirmMessage: '{% trans "Confirm receipt of items" %}', + title: '{% trans "Receive Return Order Items" %}', + afterRender: function(fields, opts) { + // Add callback to remove rows + $(opts.modal).find('.button-row-remove').click(function() { + let pk = $(this).attr('pk'); + $(opts.modal).find(`#receive_row_${pk}`).remove(); + }); + }, + onSubmit: function(fields, opts) { + // Extract data elements from the form + let data = { + items: [], + location: getFormFieldValue('location', {}, opts), + }; + + let item_pk_values = []; + + line_items.forEach(function(item) { + let pk = item.pk; + let row = $(opts.modal).find(`#receive_row_${pk}`); + + if (row.exists()) { + data.items.push({ + item: pk, + }); + item_pk_values.push(pk); + } + }); + + opts.nested = { + 'items': item_pk_values, + }; + + inventreePut( + opts.url, + data, + { + method: 'POST', + success: function(response) { + $(opts.modal).modal('hide'); + + handleFormSuccess(response, options); + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, opts); + break; + default: + $(opts.modal).modal('hide'); + showApiError(xhr, opts.url); + break; + } + } + } + ); + } + }); +} + + +/* + * Load a table displaying line items for a particular ReturnOrder + */ +function loadReturnOrderLineItemTable(options={}) { + + var table = options.table; + + options.params = options.params || {}; + + options.params.order = options.order; + options.params.item_detail = true; + options.params.order_detail = false; + options.params.part_detail = true; + + let filters = loadTableFilters('returnorderlineitem', options.params); + + setupFilterList('returnorderlineitem', $(table), '#filter-list-returnorderlines', {download: true}); + + function setupCallbacks() { + if (options.allow_edit) { + + // Callback for "receive" button + if (options.allow_receive) { + $(table).find('.button-line-receive').click(function() { + let pk = $(this).attr('pk'); + + let line = $(table).bootstrapTable('getRowByUniqueId', pk); + + receiveReturnOrderItems( + options.order, + [line], + { + onSuccess: function(response) { + reloadBootstrapTable(table); + } + } + ); + }); + } + + // Callback for "edit" button + $(table).find('.button-line-edit').click(function() { + let pk = $(this).attr('pk'); + + constructForm(`{% url "api-return-order-line-list" %}${pk}/`, { + fields: returnOrderLineItemFields(), + title: '{% trans "Edit Line Item" %}', + refreshTable: table, + }); + }); + } + + if (options.allow_delete) { + // Callback for "delete" button + $(table).find('.button-line-delete').click(function() { + let pk = $(this).attr('pk'); + + constructForm(`{% url "api-return-order-line-list" %}${pk}/`, { + method: 'DELETE', + title: '{% trans "Delete Line Item" %}', + refreshTable: table, + }); + }); + } + } + + $(table).inventreeTable({ + url: '{% url "api-return-order-line-list" %}', + name: 'returnorderlineitems', + formatNoMatches: function() { + return '{% trans "No matching line items" %}'; + }, + onPostBody: setupCallbacks, + queryParams: filters, + original: options.params, + showColumns: true, + showFooter: true, + uniqueId: 'pk', + columns: [ + { + checkbox: true, + switchable: false, + }, + { + field: 'part', + sortable: true, + switchable: false, + title: '{% trans "Part" %}', + formatter: function(value, row) { + let part = row.part_detail; + let html = thumbnailImage(part.thumbnail) + ' '; + html += renderLink(part.full_name, `/part/${part.pk}/`); + return html; + } + }, + { + field: 'item', + sortable: true, + switchable: false, + title: '{% trans "Item" %}', + formatter: function(value, row) { + return renderLink(`{% trans "Serial Number" %}: ${row.item_detail.serial}`, `/stock/item/${row.item}/`); + } + }, + { + field: 'reference', + title: '{% trans "Reference" %}', + }, + { + field: 'outcome', + title: '{% trans "Outcome" %}', + sortable: true, + formatter: function(value, row) { + return returnOrderLineItemStatusDisplay(value); + } + }, + { + field: 'price', + title: '{% trans "Price" %}', + formatter: function(value, row) { + return formatCurrency(row.price, { + currency: row.price_currency, + }); + } + }, + { + sortable: true, + field: 'target_date', + title: '{% trans "Target Date" %}', + formatter: function(value, row) { + let html = renderDate(value); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times icon-red', '{% trans "This line item is overdue" %}'); + } + + return html; + } + }, + { + field: 'received_date', + title: '{% trans "Received" %}', + sortable: true, + formatter: function(value) { + if (!value) { + yesNoLabel(value); + } else { + return renderDate(value); + } + } + }, + { + field: 'notes', + title: '{% trans "Notes" %}', + }, + { + field: 'link', + title: '{% trans "Link" %}', + formatter: function(value, row) { + if (value) { + return renderLink(value, value); + } + } + }, + { + field: 'buttons', + title: '', + switchable: false, + formatter: function(value, row) { + let buttons = ''; + let pk = row.pk; + + if (options.allow_edit) { + + if (options.allow_receive && !row.received_date) { + buttons += makeIconButton('fa-sign-in-alt icon-green', 'button-line-receive', pk, '{% trans "Mark item as received" %}'); + } + + buttons += makeEditButton('button-line-edit', pk, '{% trans "Edit line item" %}'); + } + + if (options.allow_delete) { + buttons += makeDeleteButton('button-line-delete', pk, '{% trans "Delete line item" %}'); + } + + return wrapButtons(buttons); + } + } + ] + }); +} diff --git a/InvenTree/templates/js/translated/sales_order.js b/InvenTree/templates/js/translated/sales_order.js new file mode 100644 index 0000000000..29834f6caf --- /dev/null +++ b/InvenTree/templates/js/translated/sales_order.js @@ -0,0 +1,2146 @@ +{% load i18n %} +{% load inventree_extras %} + + +/* globals + companyFormFields, + constructForm, + global_settings, + imageHoverIcon, + inventreeGet, + launchModalForm, + loadTableFilters, + makeIconBadge, + renderLink, + salesOrderStatusDisplay, + setupFilterList, +*/ + +/* exported + allocateStockToSalesOrder, + cancelSalesOrder, + completeSalesOrder, + completeSalesOrderShipment, + completePendingShipments, + createSalesOrder, + createSalesOrderLineItem, + createSalesOrderShipment, + editSalesOrder, + exportOrder, + issueSalesOrder, + loadSalesOrderAllocationTable, + loadSalesOrderLineItemTable, + loadSalesOrderShipmentTable, + loadSalesOrderTable, + orderParts, + loadOrderTotal +*/ + + + +/* + * Construct a set of form fields for the SalesOrder model + */ +function salesOrderFields(options={}) { + let fields = { + reference: { + icon: 'fa-hashtag', + }, + description: {}, + customer: { + icon: 'fa-user-tie', + secondary: { + title: '{% trans "Add Customer" %}', + fields: function() { + var fields = companyFormFields(); + fields.is_customer.value = true; + return fields; + } + } + }, + customer_reference: {}, + target_date: { + icon: 'fa-calendar-alt', + }, + link: { + icon: 'fa-link', + }, + contact: { + icon: 'fa-user', + adjustFilters: function(filters) { + let customer = getFormFieldValue('customer', {}, {modal: options.modal}); + + if (customer) { + filters.company = customer; + } + + return filters; + } + }, + responsible: { + icon: 'fa-user', + } + }; + + return fields; +} + + +/* + * Create a new SalesOrder + */ +function createSalesOrder(options={}) { + + let fields = salesOrderFields(options); + + if (options.customer) { + fields.customer.value = options.customer; + } + + constructForm('{% url "api-so-list" %}', { + method: 'POST', + fields: fields, + title: '{% trans "Create Sales Order" %}', + onSuccess: function(data) { + location.href = `/order/sales-order/${data.pk}/`; + }, + }); +} + + +/* + * Edit an existing SalesOrder + */ +function editSalesOrder(order_id, options={}) { + + constructForm(`{% url "api-so-list" %}${order_id}/`, { + fields: salesOrderFields(options), + title: '{% trans "Edit Sales Order" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + + + +/* Construct a set of fields for the SalesOrderLineItem form */ +function soLineItemFields(options={}) { + + let fields = { + order: { + hidden: true, + }, + part: { + icon: 'fa-shapes', + }, + quantity: {}, + reference: {}, + sale_price: { + icon: 'fa-dollar-sign', + }, + sale_price_currency: { + icon: 'fa-coins', + }, + target_date: { + icon: 'fa-calendar-alt', + }, + notes: { + icon: 'fa-sticky-note', + }, + link: { + icon: 'fa-link', + } + }; + + if (options.order) { + fields.order.value = options.order; + } + + if (options.target_date) { + fields.target_date.value = options.target_date; + } + + return fields; +} + + +/* + * Launch a modal form to create a new SalesOrderLineItem + */ +function createSalesOrderLineItem(options={}) { + + let fields = soLineItemFields(options); + + constructForm('{% url "api-so-line-list" %}', { + fields: fields, + method: 'POST', + title: '{% trans "Add Line Item" %}', + onSuccess: function(response) { + handleFormSuccess(response, options); + }, + }); +} + + +/* + * Form field definitions for a SalesOrderShipment + */ +function salesOrderShipmentFields(options={}) { + var fields = { + order: {}, + reference: {}, + tracking_number: { + icon: 'fa-hashtag', + }, + invoice_number: { + icon: 'fa-dollar-sign', + }, + link: { + icon: 'fa-link', + } + }; + + // If order is specified, hide the order field + if (options.order) { + fields.order.value = options.order; + fields.order.hidden = true; + } + + return fields; +} + + +/* + * Complete a Sales Order shipment + */ +function completeSalesOrderShipment(shipment_id, options={}) { + + // Request the list of stock items which will be shipped + inventreeGet(`{% url "api-so-shipment-list" %}${shipment_id}/`, {}, { + success: function(shipment) { + var allocations = shipment.allocations; + + var html = ''; + + if (!allocations || allocations.length == 0) { + html = ` +
+ {% trans "No stock items have been allocated to this shipment" %} +
+ `; + } else { + html = ` + {% trans "The following stock items will be shipped" %} + + + + + + + + + `; + + allocations.forEach(function(allocation) { + + var part = allocation.part_detail; + var thumb = thumbnailImage(part.thumbnail || part.image); + + var stock = ''; + + if (allocation.serial) { + stock = `{% trans "Serial Number" %}: ${allocation.serial}`; + } else { + stock = `{% trans "Quantity" %}: ${allocation.quantity}`; + } + + html += ` + + + + + `; + }); + + html += ` + +
{% trans "Part" %}{% trans "Stock Item" %}
${thumb} ${part.full_name}${stock}
+ `; + } + + constructForm(`{% url "api-so-shipment-list" %}${shipment_id}/ship/`, { + method: 'POST', + title: `{% trans "Complete Shipment" %} ${shipment.reference}`, + fields: { + shipment_date: { + value: moment().format('YYYY-MM-DD'), + }, + tracking_number: { + value: shipment.tracking_number, + icon: 'fa-hashtag', + }, + invoice_number: { + value: shipment.invoice_number, + icon: 'fa-dollar-sign', + }, + link: { + value: shipment.link, + icon: 'fa-link', + } + }, + preFormContent: html, + confirm: true, + confirmMessage: '{% trans "Confirm Shipment" %}', + buttons: options.buttons, + onSuccess: function(data) { + // Reload tables + $('#so-lines-table').bootstrapTable('refresh'); + $('#pending-shipments-table').bootstrapTable('refresh'); + $('#completed-shipments-table').bootstrapTable('refresh'); + + if (options.onSuccess instanceof Function) { + options.onSuccess(data); + } + }, + reload: options.reload + }); + } + }); +} + +/* + * Launches a modal to mark all allocated pending shipments as complete + */ +function completePendingShipments(order_id, options={}) { + var pending_shipments = null; + + // Request the list of stock items which will be shipped + inventreeGet(`{% url "api-so-shipment-list" %}`, + { + order: order_id, + shipped: false + }, + { + async: false, + success: function(shipments) { + pending_shipments = shipments; + } + } + ); + + var allocated_shipments = []; + + for (var idx = 0; idx < pending_shipments.length; idx++) { + if (pending_shipments[idx].allocations.length > 0) { + allocated_shipments.push(pending_shipments[idx]); + } + } + + if (allocated_shipments.length > 0) { + completePendingShipmentsHelper(allocated_shipments, 0, options); + + } else { + html = ` +
+ `; + + if (!pending_shipments.length) { + html += ` + {% trans "No pending shipments found" %} + `; + } else { + html += ` + {% trans "No stock items have been allocated to pending shipments" %} + `; + } + + html += ` +
+ `; + + constructForm(`{% url "api-so-shipment-list" %}0/ship/`, { + method: 'POST', + title: '{% trans "Complete Shipments" %}', + preFormContent: html, + onSubmit: function(fields, options) { + handleFormSuccess(fields, options); + }, + closeText: 'Close', + hideSubmitButton: true, + }); + } +} + + +/* + * Recursive helper for opening shipment completion modals + */ +function completePendingShipmentsHelper(shipments, shipment_idx, options={}) { + if (shipment_idx < shipments.length) { + completeSalseOrderShipment(shipments[shipment_idx].pk, + { + buttons: [ + { + name: 'skip', + title: `{% trans "Skip" %}`, + onClick: function(form_options) { + if (form_options.modal) { + $(form_options.modal).modal('hide'); + } + + completePendingShipmentsHelper(shipments, shipment_idx + 1, options); + } + } + ], + onSuccess: function(data) { + completePendingShipmentsHelper(shipments, shipment_idx + 1, options); + }, + } + ); + + } else if (options.reload) { + location.reload(); + } +} + + + +/* + * Launches a modal form to mark a SalesOrder as "complete" + */ +function completeSalesOrder(order_id, options={}) { + + constructForm( + `/api/order/so/${order_id}/complete/`, + { + method: 'POST', + title: '{% trans "Complete Sales Order" %}', + confirm: true, + fieldsFunction: function(opts) { + var fields = { + accept_incomplete: {}, + }; + + if (opts.context.is_complete) { + delete fields['accept_incomplete']; + } + + return fields; + }, + preFormContent: function(opts) { + var html = ` +
+ {% trans "Mark this order as complete?" %} +
`; + + if (opts.context.pending_shipments) { + html += ` +
+ {% trans "Order cannot be completed as there are incomplete shipments" %}
+
`; + } + + if (!opts.context.is_complete) { + html += ` +
+ {% trans "This order has line items which have not been completed." %}
+ {% trans "Completing this order means that the order and line items will no longer be editable." %} +
`; + } + + return html; + }, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + + +/* + * Launches sa modal form to mark a SalesOrder as "issued" + */ +function issueSalesOrder(order_id, options={}) { + + let html = ` +
+ {% trans "Issue this Sales Order?" %} +
`; + + constructForm(`{% url "api-so-list" %}${order_id}/issue/`, { + method: 'POST', + title: '{% trans "Issue Sales Order" %}', + confirm: true, + preFormContent: html, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + }); +} + + +/* + * Launches a modal form to mark a SalesOrder as "cancelled" + */ +function cancelSalesOrder(order_id, options={}) { + + constructForm( + `/api/order/so/${order_id}/cancel/`, + { + method: 'POST', + title: '{% trans "Cancel Sales Order" %}', + confirm: true, + preFormContent: function(opts) { + var html = ` +
+ {% trans "Cancelling this order means that the order will no longer be editable." %} +
`; + + return html; + }, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + +// Open a dialog to create a new sales order shipment +function createSalesOrderShipment(options={}) { + + // Work out the next shipment number for the given order + inventreeGet( + '{% url "api-so-shipment-list" %}', + { + order: options.order, + }, + { + success: function(results) { + // "predict" the next reference number + var ref = results.length + 1; + + var found = false; + + while (!found) { + + var no_match = true; + + for (var ii = 0; ii < results.length; ii++) { + if (ref.toString() == results[ii].reference.toString()) { + no_match = false; + break; + } + } + + if (no_match) { + break; + } else { + ref++; + } + } + + var fields = salesOrderShipmentFields(options); + + fields.reference.value = ref; + fields.reference.prefix = options.reference; + + constructForm('{% url "api-so-shipment-list" %}', { + method: 'POST', + fields: fields, + title: '{% trans "Create New Shipment" %}', + onSuccess: function(data) { + if (options.onSuccess) { + options.onSuccess(data); + } + } + }); + } + } + ); +} + + + +/* + * Load table displaying list of sales orders + */ +function loadSalesOrderTable(table, options) { + + // Ensure the table starts in a known state + $(table).bootstrapTable('destroy'); + + options.params = options.params || {}; + options.params['customer_detail'] = true; + + var filters = loadTableFilters('salesorder', options.params); + + setupFilterList('salesorder', $(table), '#filter-list-salesorder', { + download: true, + report: { + url: '{% url "api-so-report-list" %}', + key: 'order' + } + }); + + var display_mode = inventreeLoad('salesorder-table-display-mode', 'list'); + + function buildEvents(calendar) { + + var start = startDate(calendar); + var end = endDate(calendar); + + clearEvents(calendar); + + // Extract current filters from table + var table_options = $(table).bootstrapTable('getOptions'); + var filters = table_options.query_params || {}; + + filters.customer_detail = true; + filters.min_date = start; + filters.max_date = end; + + // Request orders from the server within specified date range + inventreeGet( + '{% url "api-so-list" %}', + filters, + { + success: function(response) { + + for (var idx = 0; idx < response.length; idx++) { + var order = response[idx]; + + var date = order.creation_date; + + if (order.shipment_date) { + date = order.shipment_date; + } else if (order.target_date) { + date = order.target_date; + } + + var title = `${order.reference} - ${order.customer_detail.name}`; + + // Default color is blue + var color = '#4c68f5'; + + // Overdue orders are red + if (order.overdue) { + color = '#c22525'; + } else if (order.status == {{ SalesOrderStatus.SHIPPED }}) { + color = '#25c235'; + } + + var event = { + title: title, + start: date, + end: date, + url: `/order/sales-order/${order.pk}/`, + backgroundColor: color, + }; + + calendar.addEvent(event); + } + } + } + ); + } + + $(table).inventreeTable({ + url: '{% url "api-so-list" %}', + queryParams: filters, + name: 'salesorder', + groupBy: false, + sidePagination: 'server', + original: options.params, + showColums: display_mode != 'calendar', + search: display_mode != 'calendar', + showCustomViewButton: false, + showCustomView: display_mode == 'calendar', + disablePagination: display_mode == 'calendar', + formatNoMatches: function() { + return '{% trans "No sales orders found" %}'; + }, + buttons: constructOrderTableButtons({ + prefix: 'salesorder', + disableTreeView: true, + callback: function() { + // Reload the entire table + loadSalesOrderTable(table, options); + }, + }), + customView: function(data) { + return `
`; + }, + onRefresh: function() { + loadSalesOrderTable(table, options); + }, + onLoadSuccess: function() { + + if (display_mode == 'calendar') { + var el = document.getElementById('purchase-order-calendar'); + + calendar = new FullCalendar.Calendar(el, { + initialView: 'dayGridMonth', + nowIndicator: true, + aspectRatio: 2.5, + locale: options.locale, + datesSet: function() { + buildEvents(calendar); + } + }); + + calendar.render(); + } + }, + columns: [ + { + title: '', + checkbox: true, + visible: true, + switchable: false, + }, + { + sortable: true, + field: 'reference', + title: '{% trans "Sales Order" %}', + formatter: function(value, row) { + var html = renderLink(value, `/order/sales-order/${row.pk}/`); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times icon-red', '{% trans "Order is overdue" %}'); + } + + return html; + }, + }, + { + sortable: true, + sortName: 'customer__name', + field: 'customer_detail', + title: '{% trans "Customer" %}', + formatter: function(value, row) { + + if (!row.customer_detail) { + return '{% trans "Invalid Customer" %}'; + } + + return imageHoverIcon(row.customer_detail.image) + renderLink(row.customer_detail.name, `/company/${row.customer}/sales-orders/`); + } + }, + { + sortable: true, + field: 'customer_reference', + title: '{% trans "Customer Reference" %}', + }, + { + sortable: false, + field: 'description', + title: '{% trans "Description" %}', + }, + { + sortable: true, + field: 'status', + title: '{% trans "Status" %}', + formatter: function(value, row) { + return salesOrderStatusDisplay(row.status); + } + }, + { + sortable: true, + field: 'creation_date', + title: '{% trans "Creation Date" %}', + formatter: function(value) { + return renderDate(value); + } + }, + { + sortable: true, + field: 'target_date', + title: '{% trans "Target Date" %}', + formatter: function(value) { + return renderDate(value); + } + }, + { + sortable: true, + field: 'shipment_date', + title: '{% trans "Shipment Date" %}', + formatter: function(value) { + return renderDate(value); + } + }, + { + sortable: true, + field: 'line_items', + title: '{% trans "Items" %}' + }, + { + field: 'total_price', + title: '{% trans "Total Cost" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + return formatCurrency(value, { + currency: row.total_price_currency, + }); + } + } + ], + }); +} + + +/* + * Load a table displaying Shipment information against a particular order + */ +function loadSalesOrderShipmentTable(table, options={}) { + + options.table = table; + + options.params = options.params || {}; + + // Filter by order + options.params.order = options.order; + + // Filter by "shipped" status + options.params.shipped = options.shipped || false; + + var filters = loadTableFilters('salesordershipment', options.params); + + setupFilterList('salesordershipment', $(table), options.filter_target); + + // Add callbacks for expand / collapse buttons + var prefix = options.shipped ? 'completed' : 'pending'; + + $(`#${prefix}-shipments-expand`).click(function() { + $(table).bootstrapTable('expandAllRows'); + }); + + $(`#${prefix}-shipments-collapse`).click(function() { + $(table).bootstrapTable('collapseAllRows'); + }); + + function makeShipmentActions(row) { + // Construct "actions" for the given shipment row + var pk = row.pk; + + let html = ''; + + html += makeEditButton('button-shipment-edit', pk, '{% trans "Edit shipment" %}'); + + if (!options.shipped) { + html += makeIconButton('fa-truck icon-green', 'button-shipment-ship', pk, '{% trans "Complete shipment" %}'); + } + + var enable_delete = row.allocations && row.allocations.length == 0; + + html += makeDeleteButton('button-shipment-delete', pk, '{% trans "Delete shipment" %}', {disabled: !enable_delete}); + + return wrapButtons(html); + } + + function setupShipmentCallbacks() { + // Setup action button callbacks + + $(table).find('.button-shipment-edit').click(function() { + var pk = $(this).attr('pk'); + + var fields = salesOrderShipmentFields(); + + delete fields.order; + + constructForm(`{% url "api-so-shipment-list" %}${pk}/`, { + fields: fields, + title: '{% trans "Edit Shipment" %}', + refreshTable: table, + }); + }); + + $(table).find('.button-shipment-ship').click(function() { + var pk = $(this).attr('pk'); + + completeSalesOrderShipment(pk); + }); + + $(table).find('.button-shipment-delete').click(function() { + var pk = $(this).attr('pk'); + + constructForm(`{% url "api-so-shipment-list" %}${pk}/`, { + title: '{% trans "Delete Shipment" %}', + method: 'DELETE', + refreshTable: table, + }); + }); + } + + $(table).inventreeTable({ + url: '{% url "api-so-shipment-list" %}', + queryParams: filters, + original: options.params, + name: options.name || 'salesordershipment', + search: false, + paginationVAlign: 'bottom', + showColumns: true, + detailView: true, + detailViewByClick: false, + buttons: constructExpandCollapseButtons(table), + detailFilter: function(index, row) { + return row.allocations.length > 0; + }, + detailFormatter: function(index, row, element) { + return showAllocationSubTable(index, row, element, options); + }, + onPostBody: function() { + setupShipmentCallbacks(); + + // Auto-expand rows on the "pending" table + if (!options.shipped) { + $(table).bootstrapTable('expandAllRows'); + } + }, + formatNoMatches: function() { + return '{% trans "No matching shipments found" %}'; + }, + columns: [ + { + visible: false, + checkbox: true, + switchable: false, + }, + { + field: 'reference', + title: '{% trans "Shipment Reference" %}', + switchable: false, + }, + { + field: 'allocations', + title: '{% trans "Items" %}', + switchable: false, + sortable: true, + formatter: function(value, row) { + if (row && row.allocations) { + return row.allocations.length; + } else { + return '-'; + } + } + }, + { + field: 'shipment_date', + title: '{% trans "Shipment Date" %}', + sortable: true, + formatter: function(value, row) { + if (value) { + return renderDate(value); + } else { + return '{% trans "Not shipped" %}'; + } + } + }, + { + field: 'tracking_number', + title: '{% trans "Tracking" %}', + }, + { + field: 'invoice_number', + title: '{% trans "Invoice" %}', + }, + { + field: 'link', + title: '{% trans "Link" %}', + formatter: function(value) { + if (value) { + return renderLink(value, value); + } else { + return '-'; + } + } + }, + { + field: 'notes', + title: '{% trans "Notes" %}', + visible: false, + switchable: false, + // TODO: Implement 'notes' field + }, + { + title: '', + switchable: false, + formatter: function(value, row) { + return makeShipmentActions(row); + } + } + ], + }); +} + + +/** + * Allocate stock items against a SalesOrder + * + * arguments: + * - order_id: The ID / PK value for the SalesOrder + * - lines: A list of SalesOrderLineItem objects to be allocated + * + * options: + * - source_location: ID / PK of the top-level StockLocation to source stock from (or null) + */ +function allocateStockToSalesOrder(order_id, line_items, options={}) { + + function renderLineItemRow(line_item, quantity) { + // Function to render a single line_item row + + var pk = line_item.pk; + + var part = line_item.part_detail; + + var thumb = thumbnailImage(part.thumbnail || part.image); + + let delete_button = wrapButtons( + makeRemoveButton( + 'button-row-remove', + pk, + '{% trans "Remove row" %}', + ) + ); + + delete_button += '
'; + + var quantity_input = constructField( + `items_quantity_${pk}`, + { + type: 'decimal', + min_value: 0, + value: quantity || 0, + title: '{% trans "Specify stock allocation quantity" %}', + required: true, + }, + { + hideLabels: true, + } + ); + + var stock_input = constructField( + `items_stock_item_${pk}`, + { + type: 'related field', + required: 'true', + }, + { + hideLabels: true, + } + ); + + var html = ` + + + ${thumb} ${part.full_name} + + + ${stock_input} + + + ${quantity_input} + + + + + {% trans "Part" %} + {% trans "Stock Item" %} + {% trans "Quantity" %} + + + + ${table_entries} + + `; + + constructForm(`{% url "api-so-list" %}${order_id}/allocate/`, { + method: 'POST', + fields: { + shipment: { + filters: { + order: order_id, + shipped: false, + }, + value: options.shipment || null, + auto_fill: true, + secondary: { + method: 'POST', + title: '{% trans "Add Shipment" %}', + fields: function() { + var ref = null; + + // TODO: Refactor code for getting next shipment number + inventreeGet( + '{% url "api-so-shipment-list" %}', + { + order: options.order, + }, + { + async: false, + success: function(results) { + // "predict" the next reference number + ref = results.length + 1; + + var found = false; + + while (!found) { + + var no_match = true; + + for (var ii = 0; ii < results.length; ii++) { + if (ref.toString() == results[ii].reference.toString()) { + no_match = false; + break; + } + } + + if (no_match) { + break; + } else { + ref++; + } + } + } + } + ); + + var fields = salesOrderShipmentFields(options); + + fields.reference.value = ref; + fields.reference.prefix = options.reference; + + return fields; + } + } + } + }, + preFormContent: html, + confirm: true, + confirmMessage: '{% trans "Confirm stock allocation" %}', + title: '{% trans "Allocate Stock Items to Sales Order" %}', + afterRender: function(fields, opts) { + + // Initialize source location field + var take_from_field = { + name: 'take_from', + model: 'stocklocation', + api_url: '{% url "api-location-list" %}', + required: false, + type: 'related field', + value: options.source_location || null, + noResults: function(query) { + return '{% trans "No matching stock locations" %}'; + }, + }; + + initializeRelatedField( + take_from_field, + null, + opts + ); + + // Add callback to "clear" button for take_from field + addClearCallback( + 'take_from', + take_from_field, + opts, + ); + + // Initialize fields for each line item + line_items.forEach(function(line_item) { + var pk = line_item.pk; + + initializeRelatedField( + { + name: `items_stock_item_${pk}`, + api_url: '{% url "api-stock-list" %}', + filters: { + part: line_item.part, + in_stock: true, + part_detail: true, + location_detail: true, + available: true, + }, + model: 'stockitem', + required: true, + render_part_detail: true, + render_location_detail: true, + auto_fill: true, + onSelect: function(data, field, opts) { + // Adjust the 'quantity' field based on availability + + if (!('quantity' in data)) { + return; + } + + // Calculate the available quantity + var available = Math.max((data.quantity || 0) - (data.allocated || 0), 0); + + // Remaining quantity to be allocated? + var remaining = Math.max(line_item.quantity - line_item.shipped - line_item.allocated, 0); + + // Maximum amount that we need + var desired = Math.min(available, remaining); + + updateFieldValue(`items_quantity_${pk}`, desired, {}, opts); + + }, + adjustFilters: function(filters) { + // Restrict query to the selected location + var location = getFormFieldValue( + 'take_from', + {}, + { + modal: opts.modal, + } + ); + + filters.location = location; + filters.cascade = true; + + // Exclude expired stock? + if (global_settings.STOCK_ENABLE_EXPIRY && !global_settings.STOCK_ALLOW_EXPIRED_SALE) { + filters.expired = false; + } + + return filters; + }, + noResults: function(query) { + return '{% trans "No matching stock items" %}'; + } + }, + null, + opts + ); + }); + + // Add remove-row button callbacks + $(opts.modal).find('.button-row-remove').click(function() { + var pk = $(this).attr('pk'); + + $(opts.modal).find(`#allocation_row_${pk}`).remove(); + }); + }, + onSubmit: function(fields, opts) { + // Extract data elements from the form + var data = { + items: [], + shipment: getFormFieldValue( + 'shipment', + {}, + opts + ) + }; + + var item_pk_values = []; + + line_items.forEach(function(item) { + + var pk = item.pk; + + var quantity = getFormFieldValue( + `items_quantity_${pk}`, + {}, + opts + ); + + var stock_item = getFormFieldValue( + `items_stock_item_${pk}`, + {}, + opts + ); + + if (quantity != null) { + data.items.push({ + line_item: pk, + stock_item: stock_item, + quantity: quantity, + }); + + item_pk_values.push(pk); + } + }); + + // Provide nested values + opts.nested = { + 'items': item_pk_values + }; + + inventreePut( + opts.url, + data, + { + method: 'POST', + success: function(response) { + $(opts.modal).modal('hide'); + + if (options.success) { + options.success(response); + } + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, opts); + break; + default: + $(opts.modal).modal('hide'); + showApiError(xhr); + break; + } + } + } + ); + }, + }); +} + + +/** + * Load a table with SalesOrderAllocation items + */ +function loadSalesOrderAllocationTable(table, options={}) { + + options.params = options.params || {}; + + options.params['location_detail'] = true; + options.params['part_detail'] = true; + options.params['item_detail'] = true; + options.params['order_detail'] = true; + + let filters = loadTableFilters('salesorderallocation', options.params); + + setupFilterList('salesorderallocation', $(table)); + + $(table).inventreeTable({ + url: '{% url "api-so-allocation-list" %}', + queryParams: filters, + name: options.name || 'salesorderallocation', + groupBy: false, + search: false, + paginationVAlign: 'bottom', + original: options.params, + formatNoMatches: function() { + return '{% trans "No sales order allocations found" %}'; + }, + columns: [ + { + field: 'pk', + visible: false, + switchable: false, + }, + { + field: 'order', + switchable: false, + title: '{% trans "Order" %}', + formatter: function(value, row) { + + var ref = `${row.order_detail.reference}`; + + return renderLink(ref, `/order/sales-order/${row.order}/`); + } + }, + { + field: 'item', + switchable: false, + title: '{% trans "Stock Item" %}', + formatter: function(value, row) { + // Render a link to the particular stock item + + var link = `/stock/item/${row.item}/`; + var text = `{% trans "Stock Item" %} ${row.item}`; + + return renderLink(text, link); + } + }, + { + field: 'location', + title: '{% trans "Location" %}', + formatter: function(value, row) { + return locationDetail(row.item_detail, true); + } + }, + { + field: 'quantity', + title: '{% trans "Quantity" %}', + sortable: true, + }, + { + field: 'shipment_date', + title: '{% trans "Shipped" %}', + sortable: true, + formatter: function(value, row) { + if (value) { + return renderDate(value); + } else { + return `{% trans "Not shipped" %}`; + } + } + } + ] + }); +} + + +/** + * Display an "allocations" sub table, showing stock items allocated againt a sales order + * @param {*} index + * @param {*} row + * @param {*} element + */ +function showAllocationSubTable(index, row, element, options) { + + // Construct a sub-table element + var html = ` +
+
+
`; + + element.html(html); + + var table = $(`#allocation-table-${row.pk}`); + + function setupCallbacks() { + // Add callbacks for 'edit' buttons + table.find('.button-allocation-edit').click(function() { + + var pk = $(this).attr('pk'); + + // Edit the sales order alloction + constructForm( + `/api/order/so-allocation/${pk}/`, + { + fields: { + quantity: {}, + }, + title: '{% trans "Edit Stock Allocation" %}', + refreshTable: options.table, + }, + ); + }); + + // Add callbacks for 'delete' buttons + table.find('.button-allocation-delete').click(function() { + var pk = $(this).attr('pk'); + + constructForm( + `/api/order/so-allocation/${pk}/`, + { + method: 'DELETE', + confirmMessage: '{% trans "Confirm Delete Operation" %}', + title: '{% trans "Delete Stock Allocation" %}', + refreshTable: options.table, + } + ); + }); + } + + table.bootstrapTable({ + onPostBody: setupCallbacks, + data: row.allocations, + showHeader: true, + columns: [ + { + field: 'part_detail', + title: '{% trans "Part" %}', + formatter: function(part, row) { + return imageHoverIcon(part.thumbnail) + renderLink(part.full_name, `/part/${part.pk}/`); + } + }, + { + field: 'allocated', + title: '{% trans "Stock Item" %}', + formatter: function(value, row, index, field) { + var text = ''; + + var item = row.item_detail; + + var text = `{% trans "Quantity" %}: ${row.quantity}`; + + if (item && item.serial != null && row.quantity == 1) { + text = `{% trans "Serial Number" %}: ${item.serial}`; + } + + return renderLink(text, `/stock/item/${row.item}/`); + }, + }, + { + field: 'location', + title: '{% trans "Location" %}', + formatter: function(value, row, index, field) { + + if (row.shipment_date) { + return `{% trans "Shipped to customer" %} - ${row.shipment_date}`; + } else if (row.location) { + // Location specified + return renderLink( + row.location_detail.pathstring || '{% trans "Location" %}', + `/stock/location/${row.location}/` + ); + } else { + return `{% trans "Stock location not specified" %}`; + } + }, + }, + { + field: 'buttons', + title: '', + formatter: function(value, row, index, field) { + + let html = ''; + let pk = row.pk; + + if (row.shipment_date) { + html += `{% trans "Shipped" %}`; + } else { + html += makeEditButton('button-allocation-edit', pk, '{% trans "Edit stock allocation" %}'); + html += makeDeleteButton('button-allocation-delete', pk, '{% trans "Delete stock allocation" %}'); + } + + return wrapButtons(html); + }, + }, + ], + }); +} + +/** + * Display a "fulfilled" sub table, showing stock items fulfilled against a purchase order + */ +function showFulfilledSubTable(index, row, element, options) { + // Construct a table showing stock items which have been fulfilled against this line item + + if (!options.order) { + return 'ERROR: Order ID not supplied'; + } + + var id = `fulfilled-table-${row.pk}`; + + var html = ` +
+ +
+
`; + + element.html(html); + + $(`#${id}`).bootstrapTable({ + url: '{% url "api-stock-list" %}', + queryParams: { + part: row.part, + sales_order: options.order, + location_detail: true, + }, + showHeader: true, + columns: [ + { + field: 'pk', + visible: false, + }, + { + field: 'stock', + title: '{% trans "Stock Item" %}', + formatter: function(value, row) { + var text = ''; + if (row.serial && row.quantity == 1) { + text = `{% trans "Serial Number" %}: ${row.serial}`; + } else { + text = `{% trans "Quantity" %}: ${row.quantity}`; + } + + return renderLink(text, `/stock/item/${row.pk}/`); + }, + }, + { + field: 'location', + title: '{% trans "Location" %}', + formatter: function(value, row) { + if (row.customer) { + return renderLink( + '{% trans "Shipped to customer" %}', + `/company/${row.customer}/` + ); + } else if (row.location && row.location_detail) { + return renderLink( + row.location_detail.pathstring, + `/stock/location/${row.location}`, + ); + } else { + return `{% trans "Stock location not specified" %}`; + } + } + } + ], + }); +} + + + +/** + * Load a table displaying line items for a particular SalesOrder + * + * @param {String} table : HTML ID tag e.g. '#table' + * @param {Object} options : object which contains: + * - order {integer} : pk of the SalesOrder + * - status: {integer} : status code for the order + */ +function loadSalesOrderLineItemTable(table, options={}) { + + options.table = table; + + options.params = options.params || {}; + + if (!options.order) { + console.error('function called without order ID'); + return; + } + + if (!options.status) { + console.error('function called without order status'); + return; + } + + options.params.order = options.order; + options.params.part_detail = true; + options.params.allocations = true; + + var filters = loadTableFilters('salesorderlineitem', options.params); + + options.url = options.url || '{% url "api-so-line-list" %}'; + + var filter_target = options.filter_target || '#filter-list-sales-order-lines'; + + setupFilterList( + 'salesorderlineitem', + $(table), + filter_target, + { + download: true, + } + ); + + var show_detail = true; + + // Add callbacks for expand / collapse buttons + $('#sales-lines-expand').click(function() { + $(table).bootstrapTable('expandAllRows'); + }); + + $('#sales-lines-collapse').click(function() { + $(table).bootstrapTable('collapseAllRows'); + }); + + // Table columns to display + var columns = [ + /* + { + checkbox: true, + visible: true, + switchable: false, + }, + */ + { + sortable: true, + sortName: 'part_detail.name', + field: 'part', + title: '{% trans "Part" %}', + switchable: false, + formatter: function(value, row, index, field) { + if (row.part) { + return imageHoverIcon(row.part_detail.thumbnail) + renderLink(row.part_detail.full_name, `/part/${value}/`); + } else { + return '-'; + } + }, + footerFormatter: function() { + return '{% trans "Total" %}'; + }, + }, + { + sortable: true, + field: 'reference', + title: '{% trans "Reference" %}', + switchable: true, + }, + { + sortable: true, + field: 'quantity', + title: '{% trans "Quantity" %}', + footerFormatter: function(data) { + return data.map(function(row) { + return +row['quantity']; + }).reduce(function(sum, i) { + return sum + i; + }, 0); + }, + switchable: false, + }, + { + sortable: true, + field: 'sale_price', + title: '{% trans "Unit Price" %}', + formatter: function(value, row) { + return formatCurrency(row.sale_price, { + currency: row.sale_price_currency + }); + } + }, + { + field: 'total_price', + sortable: true, + title: '{% trans "Total Price" %}', + formatter: function(value, row) { + return formatCurrency(row.sale_price * row.quantity, { + currency: row.sale_price_currency, + }); + }, + footerFormatter: function(data) { + return calculateTotalPrice( + data, + function(row) { + return row.sale_price ? row.sale_price * row.quantity : null; + }, + function(row) { + return row.sale_price_currency; + } + ); + } + }, + { + field: 'target_date', + title: '{% trans "Target Date" %}', + sortable: true, + switchable: true, + formatter: function(value, row) { + if (row.target_date) { + var html = renderDate(row.target_date); + + if (row.overdue) { + html += makeIconBadge('fa-calendar-times', '{% trans "This line item is overdue" %}'); + } + + return html; + + } else if (row.order_detail && row.order_detail.target_date) { + return `${renderDate(row.order_detail.target_date)}`; + } else { + return '-'; + } + } + } + ]; + + if (options.open) { + columns.push( + { + field: 'stock', + title: '{% trans "Available Stock" %}', + formatter: function(value, row) { + var available = row.available_stock; + var required = Math.max(row.quantity - row.allocated - row.shipped, 0); + + var html = ''; + + if (available > 0) { + var url = `/part/${row.part}/?display=part-stock`; + + var text = available; + + html = renderLink(text, url); + } else { + html += `{% trans "No Stock Available" %}`; + } + + if (required > 0) { + if (available >= required) { + html += makeIconBadge('fa-check-circle icon-green', '{% trans "Sufficient stock available" %}'); + } else { + html += makeIconBadge('fa-times-circle icon-red', '{% trans "Insufficient stock available" %}'); + } + } + + return html; + }, + }, + ); + + columns.push( + { + field: 'allocated', + title: '{% trans "Allocated" %}', + switchable: false, + sortable: true, + formatter: function(value, row, index, field) { + return makeProgressBar(row.allocated, row.quantity, { + id: `order-line-progress-${row.pk}`, + }); + }, + sorter: function(valA, valB, rowA, rowB) { + + var A = rowA.allocated; + var B = rowB.allocated; + + if (A == 0 && B == 0) { + return (rowA.quantity > rowB.quantity) ? 1 : -1; + } + + var progressA = parseFloat(A) / rowA.quantity; + var progressB = parseFloat(B) / rowB.quantity; + + return (progressA < progressB) ? 1 : -1; + } + }, + ); + } + + columns.push({ + field: 'shipped', + title: '{% trans "Shipped" %}', + switchable: false, + sortable: true, + formatter: function(value, row) { + return makeProgressBar(row.shipped, row.quantity, { + id: `order-line-shipped-${row.pk}` + }); + }, + sorter: function(valA, valB, rowA, rowB) { + var A = rowA.shipped; + var B = rowB.shipped; + + if (A == 0 && B == 0) { + return (rowA.quantity > rowB.quantity) ? 1 : -1; + } + + var progressA = parseFloat(A) / rowA.quantity; + var progressB = parseFloat(B) / rowB.quantity; + + return (progressA < progressB) ? 1 : -1; + } + }); + + columns.push({ + field: 'notes', + title: '{% trans "Notes" %}', + }); + + columns.push({ + field: 'link', + title: '{% trans "Link" %}', + formatter: function(value) { + if (value) { + return renderLink(value, value); + } + } + }); + + columns.push({ + field: 'buttons', + switchable: false, + formatter: function(value, row, index, field) { + let pk = row.pk; + let buttons = ''; + + // Construct a set of buttons to display + if (row.part && row.part_detail) { + let part = row.part_detail; + + if (options.allow_edit && !row.shipped) { + if (part.trackable) { + buttons += makeIconButton('fa-hashtag icon-green', 'button-add-by-sn', pk, '{% trans "Allocate serial numbers" %}'); + } + buttons += makeIconButton('fa-sign-in-alt icon-green', 'button-add', pk, '{% trans "Allocate stock" %}'); + if (part.purchaseable) { + buttons += makeIconButton('fa-shopping-cart', 'button-buy', row.part, '{% trans "Purchase stock" %}'); + } + + if (part.assembly) { + buttons += makeIconButton('fa-tools', 'button-build', row.part, '{% trans "Build stock" %}'); + } + } + } + + buttons += makeIconButton('fa-dollar-sign icon-green', 'button-price', pk, '{% trans "Calculate price" %}'); + + if (options.allow_edit) { + buttons += makeCopyButton('button-duplicate', pk, '{% trans "Duplicate line item" %}'); + buttons += makeEditButton('button-edit', pk, '{% trans "Edit line item" %}'); + } + + if (options.allow_delete) { + var delete_disabled = false; + + var title = '{% trans "Delete line item" %}'; + + if (!!row.shipped) { + delete_disabled = true; + title = '{% trans "Cannot be deleted as items have been shipped" %}'; + } else if (!!row.allocated) { + delete_disabled = true; + title = '{% trans "Cannot be deleted as items have been allocated" %}'; + } + + // Prevent deletion of the line item if items have been allocated or shipped! + buttons += makeDeleteButton('button-delete', pk, title, {disabled: delete_disabled}); + } + + return wrapButtons(buttons); + } + }); + + function reloadTable() { + $(table).bootstrapTable('refresh'); + reloadTotal(); + } + + // Configure callback functions once the table is loaded + function setupCallbacks() { + + // Callback for duplicating line items + $(table).find('.button-duplicate').click(function() { + var pk = $(this).attr('pk'); + + inventreeGet(`{% url "api-so-line-list" %}${pk}/`, {}, { + success: function(data) { + + let fields = soLineItemFields(); + + constructForm('{% url "api-so-line-list" %}', { + method: 'POST', + fields: fields, + data: data, + title: '{% trans "Duplicate Line Item" %}', + refreshTable: table, + }); + } + }); + }); + + // Callback for editing line items + $(table).find('.button-edit').click(function() { + var pk = $(this).attr('pk'); + + constructForm(`{% url "api-so-line-list" %}${pk}/`, { + fields: soLineItemFields(), + title: '{% trans "Edit Line Item" %}', + onSuccess: reloadTable, + }); + }); + + // Callback for deleting line items + $(table).find('.button-delete').click(function() { + var pk = $(this).attr('pk'); + + constructForm(`{% url "api-so-line-list" %}${pk}/`, { + method: 'DELETE', + title: '{% trans "Delete Line Item" %}', + onSuccess: reloadTable, + }); + }); + + // Callback for allocating stock items by serial number + $(table).find('.button-add-by-sn').click(function() { + var pk = $(this).attr('pk'); + + inventreeGet(`{% url "api-so-line-list" %}${pk}/`, {}, + { + success: function(response) { + + constructForm(`{% url "api-so-list" %}${options.order}/allocate-serials/`, { + method: 'POST', + title: '{% trans "Allocate Serial Numbers" %}', + fields: { + line_item: { + value: pk, + hidden: true, + }, + quantity: {}, + serial_numbers: {}, + shipment: { + filters: { + order: options.order, + shipped: false, + }, + auto_fill: true, + } + }, + refreshTable: table, + }); + } + } + ); + }); + + // Callback for allocation stock items to the order + $(table).find('.button-add').click(function() { + var pk = $(this).attr('pk'); + + var line_item = $(table).bootstrapTable('getRowByUniqueId', pk); + + allocateStockToSalesOrder( + options.order, + [ + line_item + ], + { + order: options.order, + reference: options.reference, + success: function() { + // Reload this table + $(table).bootstrapTable('refresh'); + + // Reload the pending shipment table + $('#pending-shipments-table').bootstrapTable('refresh'); + } + } + ); + }); + + // Callback for creating a new build + $(table).find('.button-build').click(function() { + var pk = $(this).attr('pk'); + + // Extract the row data from the table! + var idx = $(this).closest('tr').attr('data-index'); + + var row = $(table).bootstrapTable('getData')[idx]; + + var quantity = 1; + + if (row.allocated < row.quantity) { + quantity = row.quantity - row.allocated; + } + + // Create a new build order + newBuildOrder({ + part: pk, + sales_order: options.order, + quantity: quantity, + success: reloadTable + }); + }); + + // Callback for purchasing parts + $(table).find('.button-buy').click(function() { + var pk = $(this).attr('pk'); + + inventreeGet( + `/api/part/${pk}/`, + {}, + { + success: function(part) { + orderParts( + [part], + {} + ); + } + } + ); + }); + + // Callback for displaying price + $(table).find('.button-price').click(function() { + var pk = $(this).attr('pk'); + var idx = $(this).closest('tr').attr('data-index'); + var row = $(table).bootstrapTable('getData')[idx]; + + launchModalForm( + '{% url "line-pricing" %}', + { + submit_text: '{% trans "Calculate price" %}', + data: { + line_item: pk, + quantity: row.quantity, + }, + buttons: [ + { + name: 'update_price', + title: '{% trans "Update Unit Price" %}' + }, + ], + success: reloadTable, + } + ); + }); + } + + $(table).inventreeTable({ + onPostBody: setupCallbacks, + name: 'salesorderlineitems', + sidePagination: 'client', + formatNoMatches: function() { + return '{% trans "No matching line items" %}'; + }, + queryParams: filters, + original: options.params, + url: options.url, + showFooter: true, + uniqueId: 'pk', + detailView: show_detail, + detailViewByClick: false, + buttons: constructExpandCollapseButtons(table), + detailFilter: function(index, row) { + if (options.open) { + // Order is pending + return row.allocated > 0; + } else { + return row.shipped > 0; + } + }, + detailFormatter: function(index, row, element) { + if (options.open) { + return showAllocationSubTable(index, row, element, options); + } else { + return showFulfilledSubTable(index, row, element, options); + } + }, + columns: columns, + }); +} diff --git a/InvenTree/templates/js/translated/search.js b/InvenTree/templates/js/translated/search.js index b4ce964cc4..3181cb8a98 100644 --- a/InvenTree/templates/js/translated/search.js +++ b/InvenTree/templates/js/translated/search.js @@ -60,6 +60,10 @@ function openSearchPanel() { var panel = $('#offcanvas-search'); + let search_input = panel.find('#search-input'); + search_input.find('#search-input').val(''); + search_input.focus(); + clearSearchResults(); // Request user roles if we do not have them @@ -72,7 +76,7 @@ function openSearchPanel() { } // Callback for text input changed - panel.find('#search-input').on('keyup change', searchTextChanged); + search_input.on('keyup change', searchTextChanged); // Callback for "clear search" button panel.find('#search-clear').click(function(event) { @@ -80,7 +84,7 @@ function openSearchPanel() { // Prevent this button from actually submitting the form event.preventDefault(); - panel.find('#search-input').val(''); + search_input('#search-input').val(''); clearSearchResults(); }); @@ -94,7 +98,9 @@ function openSearchPanel() { var searchInputTimer = null; var searchText = null; var searchTextCurrent = null; -var searchQueries = []; +var searchQuery = null; +var searchResultTypes = []; +var searchRequest = null; function searchTextChanged(event) { @@ -121,41 +127,42 @@ function updateSearch() { searchTextCurrent = searchText; - // Cancel any previous AJAX requests - searchQueries.forEach(function(query) { - query.abort(); - }); - - searchQueries = []; + // Cancel previous search request + if (searchRequest != null) { + searchRequest.abort(); + searchRequest = null; + } // Show the "searching" text $('#offcanvas-search').find('#search-pending').show(); + searchResultTypes = []; + + // Construct base query + searchQuery = { + search: searchTextCurrent, + search_regex: user_settings.SEARCH_REGEX ? true : false, + search_whole: user_settings.SEARCH_WHOLE ? true : false, + limit: user_settings.SEARCH_PREVIEW_RESULTS, + offset: 0, + }; + + // Search for 'part' results if (checkPermission('part') && user_settings.SEARCH_PREVIEW_SHOW_PARTS) { - var params = {}; + let filters = {}; if (user_settings.SEARCH_HIDE_INACTIVE_PARTS) { // Return *only* active parts - params.active = true; + filters.active = true; } - // Search for matching parts - addSearchQuery( - 'part', - '{% trans "Parts" %}', - '{% url "api-part-list" %}', - params, - renderPart, - { - url: '/part', - } - ); + addSearchQuery('part', '{% trans "Parts" %}', filters); } if (checkPermission('part') && checkPermission('purchase_order')) { - var params = { + let filters = { part_detail: true, supplier_detail: true, manufacturer_detail: true, @@ -163,54 +170,26 @@ function updateSearch() { if (user_settings.SEARCH_HIDE_INACTIVE_PARTS) { // Return *only* active parts - params.active = true; + filters.active = true; } if (user_settings.SEARCH_PREVIEW_SHOW_SUPPLIER_PARTS) { - addSearchQuery( - 'supplierpart', - '{% trans "Supplier Parts" %}', - '{% url "api-supplier-part-list" %}', - params, - renderSupplierPart, - { - url: '/supplier-part', - } - ); + addSearchQuery('supplierpart', '{% trans "Supplier Parts" %}', filters); } if (user_settings.SEARCH_PREVIEW_SHOW_MANUFACTURER_PARTS) { - addSearchQuery( - 'manufacturerpart', - '{% trans "Manufacturer Parts" %}', - '{% url "api-manufacturer-part-list" %}', - params, - renderManufacturerPart, - { - url: '/manufacturer-part', - } - ); + addSearchQuery('manufacturerpart', '{% trans "Manufacturer Parts" %}', filters); } } if (checkPermission('part_category') && user_settings.SEARCH_PREVIEW_SHOW_CATEGORIES) { - // Search for matching part categories - addSearchQuery( - 'category', - '{% trans "Part Categories" %}', - '{% url "api-part-category-list" %}', - {}, - renderPartCategory, - { - url: '/part/category', - }, - ); + let filters = {}; + + addSearchQuery('partcategory', '{% trans "Part Categories" %}', filters); } if (checkPermission('stock') && user_settings.SEARCH_PREVIEW_SHOW_STOCK) { - // Search for matching stock items - - var filters = { + let filters = { part_detail: true, location_detail: true, }; @@ -220,66 +199,32 @@ function updateSearch() { filters.in_stock = true; } - addSearchQuery( - 'stock', - '{% trans "Stock Items" %}', - '{% url "api-stock-list" %}', - filters, - renderStockItem, - { - url: '/stock/item', - render_location_detail: true, - } - ); + addSearchQuery('stockitem', '{% trans "Stock Items" %}', filters); } if (checkPermission('stock_location') && user_settings.SEARCH_PREVIEW_SHOW_LOCATIONS) { - // Search for matching stock locations - addSearchQuery( - 'location', - '{% trans "Stock Locations" %}', - '{% url "api-location-list" %}', - {}, - renderStockLocation, - { - url: '/stock/location', - } - ); + let filters = {}; + + addSearchQuery('stocklocation', '{% trans "Stock Locations" %}', filters); } if (checkPermission('build') && user_settings.SEARCH_PREVIEW_SHOW_BUILD_ORDERS) { - // Search for matching build orders - addSearchQuery( - 'build', - '{% trans "Build Orders" %}', - '{% url "api-build-list" %}', - { - part_detail: true, - }, - renderBuild, - { - url: '/build', - } - ); + let filters = { + part_detail: true + }; + + addSearchQuery('build', '{% trans "Build Orders" %}', filters); } if ((checkPermission('sales_order') || checkPermission('purchase_order')) && user_settings.SEARCH_PREVIEW_SHOW_COMPANIES) { - // Search for matching companies - addSearchQuery( - 'company', - '{% trans "Companies" %}', - '{% url "api-company-list" %}', - {}, - renderCompany, - { - url: '/company', - } - ); + let filters = {}; + + addSearchQuery('company', '{% trans "Companies" %}', filters); } if (checkPermission('purchase_order') && user_settings.SEARCH_PREVIEW_SHOW_PURCHASE_ORDERS) { - var filters = { + let filters = { supplier_detail: true, }; @@ -287,22 +232,12 @@ function updateSearch() { filters.outstanding = true; } - // Search for matching purchase orders - addSearchQuery( - 'purchaseorder', - '{% trans "Purchase Orders" %}', - '{% url "api-po-list" %}', - filters, - renderPurchaseOrder, - { - url: '/order/purchase-order', - } - ); + addSearchQuery('purchaseorder', '{% trans "Purchase Orders" %}', filters); } if (checkPermission('sales_order') && user_settings.SEARCH_PREVIEW_SHOW_SALES_ORDERS) { - var filters = { + let filters = { customer_detail: true, }; @@ -311,23 +246,68 @@ function updateSearch() { filters.outstanding = true; } - // Search for matching sales orders - addSearchQuery( - 'salesorder', - '{% trans "Sales Orders" %}', - '{% url "api-so-list" %}', - filters, - renderSalesOrder, - { - url: '/order/sales-order', - } - ); + addSearchQuery('salesorder', '{% trans "Sales Orders" %}', filters); } - // Wait until all the pending queries are completed - $.when.apply($, searchQueries).done(function() { - $('#offcanvas-search').find('#search-pending').hide(); - }); + if (checkPermission('return_order') && user_settings.SEARCH_PREVIEW_SHOW_RETURN_ORDERS) { + let filters = { + customer_detail: true, + }; + + // Hide inactive (not "outstanding" orders) + if (user_settings.SEARCH_PREVIEW_EXCLUDE_INACTIVE_RETURN_ORDERS) { + filters.outstanding = true; + } + + addSearchQuery('returnorder', '{% trans "Return Orders" %}', filters); + } + + let ctx = $('#offcanvas-search').find('#search-context'); + + ctx.html(` +
+ {% trans "Searching" %} +
+ `); + + // Send off the search query + searchRequest = inventreePut( + '{% url "api-search" %}', + searchQuery, + { + method: 'POST', + success: function(response) { + + let any_results = false; + + searchResultTypes.forEach(function(resultType) { + if (resultType.key in response) { + let result = response[resultType.key]; + + if (result.count != null && result.count > 0 && result.results) { + addSearchResults(result.results, resultType, result.count); + + any_results = true; + } + } + }); + + if (any_results) { + ctx.html(''); + } else { + ctx.html(` +
+ {% trans "No results" %} +
+ `); + } + }, + complete: function() { + // Hide the "pending" icon + $('#offcanvas-search').find('#search-pending').hide(); + } + } + ); } @@ -335,12 +315,14 @@ function clearSearchResults() { var panel = $('#offcanvas-search'); - // Ensure the 'no results found' element is visible - panel.find('#search-no-results').show(); - - // Ensure that the 'searching' element is hidden panel.find('#search-pending').hide(); + panel.find('#search-context').html(` +
+ {% trans "Enter search query" %} +
+ `); + // Delete any existing search results panel.find('#search-results').empty(); @@ -349,62 +331,52 @@ function clearSearchResults() { } -function addSearchQuery(key, title, query_url, query_params, render_func, render_params={}) { +/* + * Add an individual search query, with callback for rendering + */ +function addSearchQuery(key, title, query_params, render_params={}) { - // Include current search term - query_params.search = searchTextCurrent; + searchQuery[key] = query_params; - // How many results to show in each group? - query_params.offset = 0; - query_params.limit = user_settings.SEARCH_PREVIEW_RESULTS; - - // Do not display "pk" value for search results - render_params.render_pk = false; - - // Add the result group to the panel - $('#offcanvas-search').find('#search-results').append(` -
- `); - - var request = inventreeGet( - query_url, - query_params, - { - success: function(response) { - addSearchResults( - key, - response.results, - title, - render_func, - render_params, - ); - } - }, - ); - - // Add the query to the stack - searchQueries.push(request); + render_params.showImage = true; + render_params.showLink = true; + render_params.showLabels = true; + searchResultTypes.push({ + key: key, + title: title, + renderer: getModelRenderer(key), + renderParams: render_params, + }); } // Add a group of results to the list -function addSearchResults(key, results, title, renderFunc, renderParams={}) { +function addSearchResults(results, resultType, resultCount) { if (results.length == 0) { // Do not display this group, as there are no results return; } - var panel = $('#offcanvas-search'); + let panel = $('#offcanvas-search'); // Ensure the 'no results found' element is hidden panel.find('#search-no-results').hide(); - panel.find(`#search-results-wrapper-${key}`).append(` + let key = resultType.key; + let title = resultType.title; + let renderer = resultType.renderer; + let renderParams = resultType.renderParams; + + let resultText = resultCount == 1 ? '{% trans "result" %}' : '{% trans "results" %}'; + + // Add the result group to the panel + panel.find('#search-results').append(` +
-
${title}
+
${title}
 - ${resultCount} ${resultText}
+
`); results.forEach(function(result) { var pk = result.pk || result.id; - var html = renderFunc(key, result, renderParams); - - if (renderParams.url) { - html = `` + html + ``; - } + var html = renderer(result, renderParams); var result_html = `
diff --git a/InvenTree/templates/js/translated/status_codes.js b/InvenTree/templates/js/translated/status_codes.js new file mode 100644 index 0000000000..3b4c38e6df --- /dev/null +++ b/InvenTree/templates/js/translated/status_codes.js @@ -0,0 +1,65 @@ +{% load i18n %} +{% load status_codes %} +{% load inventree_extras %} + +/* globals +*/ + +/* exported + buildStatusDisplay, + purchaseOrderStatusDisplay, + returnOrderStatusDisplay, + returnOrderLineItemStatusDisplay, + salesOrderStatusDisplay, + stockHistoryStatusDisplay, + stockStatusDisplay, +*/ + + +/* + * Generic function to render a status label + */ +function renderStatusLabel(key, codes, options={}) { + + let text = null; + let label = null; + + // Find the entry which matches the provided key + for (var name in codes) { + let entry = codes[name]; + + if (entry.key == key) { + text = entry.value; + label = entry.label; + break; + } + } + + if (!text) { + console.error(`renderStatusLabel could not find match for code ${key}`); + } + + // Fallback for color + label = label || 'bg-dark'; + + if (!text) { + text = key; + } + + let classes = `badge rounded-pill ${label}`; + + if (options.classes) { + classes += ` ${options.classes}`; + } + + return `${text}`; +} + + +{% include "status_codes.html" with label='stock' data=StockStatus.list %} +{% include "status_codes.html" with label='stockHistory' data=StockHistoryCode.list %} +{% include "status_codes.html" with label='build' data=BuildStatus.list %} +{% include "status_codes.html" with label='purchaseOrder' data=PurchaseOrderStatus.list %} +{% include "status_codes.html" with label='salesOrder' data=SalesOrderStatus.list %} +{% include "status_codes.html" with label='returnOrder' data=ReturnOrderStatus.list %} +{% include "status_codes.html" with label='returnOrderLineItem' data=ReturnOrderLineStatus.list %} diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index 867c71bd0c..dcc8d88e59 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -24,8 +24,6 @@ modalSetTitle, modalSubmit, openModal, - printStockItemLabels, - printTestReports, renderLink, scanItemsIntoLocation, showAlertDialog, @@ -88,7 +86,7 @@ function serializeStockItem(pk, options={}) { if (options.part) { // Work out the next available serial number - inventreeGet(`/api/part/${options.part}/serial-numbers/`, {}, { + inventreeGet(`{% url "api-part-list" %}${options.part}/serial-numbers/`, {}, { success: function(data) { if (data.next) { options.fields.serial_numbers.placeholder = `{% trans "Next available serial number" %}: ${data.next}`; @@ -117,6 +115,7 @@ function stockLocationFields(options={}) { description: {}, owner: {}, structural: {}, + external: {}, icon: { help_text: `{% trans "Icon (optional) - Explore all available icons on" %} Font Awesome.`, placeholder: 'fas fa-box', @@ -229,7 +228,7 @@ function stockItemFields(options={}) { enableFormInput('serial_numbers', opts); // Request part serial number information from the server - inventreeGet(`/api/part/${data.pk}/serial-numbers/`, {}, { + inventreeGet(`{% url "api-part-list" %}${data.pk}/serial-numbers/`, {}, { success: function(data) { var placeholder = ''; if (data.next) { @@ -310,18 +309,24 @@ function stockItemFields(options={}) { icon: 'fa-layer-group', }, status: {}, - expiry_date: {}, + expiry_date: { + icon: 'fa-calendar-alt', + }, purchase_price: { icon: 'fa-dollar-sign', }, - purchase_price_currency: {}, + purchase_price_currency: { + icon: 'fa-coins', + }, packaging: { icon: 'fa-box', }, link: { icon: 'fa-link', }, - owner: {}, + owner: { + icon: 'fa-user', + }, delete_on_deplete: {}, }; @@ -372,7 +377,7 @@ function duplicateStockItem(pk, options) { } // First, we need the StockItem information - inventreeGet(`/api/stock/${pk}/`, {}, { + inventreeGet(`{% url "api-stock-list" %}${pk}/`, {}, { success: function(data) { // Do not duplicate the serial number @@ -649,8 +654,7 @@ function assignStockToCustomer(items, options={}) { var buttons = `
`; - buttons += makeIconButton( - 'fa-times icon-red', + buttons += makeRemoveButton( 'button-stock-item-remove', pk, '{% trans "Remove row" %}', @@ -685,7 +689,9 @@ function assignStockToCustomer(items, options={}) { is_customer: true, }, }, - notes: {}, + notes: { + icon: 'fa-sticky-note', + }, }, confirm: true, confirmMessage: '{% trans "Confirm stock assignment" %}', @@ -815,13 +821,13 @@ function mergeStockItems(items, options={}) { quantity += stockStatusDisplay(item.status, {classes: 'float-right'}); - var buttons = `
`; - - buttons += makeIconButton( - 'fa-times icon-red', - 'button-stock-item-remove', - pk, - '{% trans "Remove row" %}', + let buttons = wrapButtons( + makeIconButton( + 'fa-times icon-red', + 'button-stock-item-remove', + pk, + '{% trans "Remove row" %}', + ) ); html += ` @@ -854,7 +860,9 @@ function mergeStockItems(items, options={}) { structural: false, } }, - notes: {}, + notes: { + icon: 'fa-sticky-note', + }, allow_mismatched_suppliers: {}, allow_mismatched_status: {}, }, @@ -1046,6 +1054,10 @@ function adjustStock(action, items, options={}) { var quantity = item.quantity; + if (item.part_detail.units != null) { + quantity += ` ${item.part_detail.units}`; + } + var location = locationDetail(item, false); if (item.location_detail) { @@ -1079,16 +1091,11 @@ function adjustStock(action, items, options={}) { ); } - var buttons = `
`; - - buttons += makeIconButton( - 'fa-times icon-red', + let buttons = wrapButtons(makeRemoveButton( 'button-stock-item-remove', pk, '{% trans "Remove stock item" %}', - ); - - buttons += `
`; + )); html += ` @@ -1294,6 +1301,28 @@ function formatDate(row) { return html; } +/* Construct set of default fields for a StockItemTestResult */ +function stockItemTestResultFields(options={}) { + let fields = { + test: {}, + result: {}, + value: {}, + attachment: {}, + notes: { + icon: 'fa-sticky-note', + }, + stock_item: { + hidden: true, + }, + }; + + if (options.stock_item) { + fields.stock_item.value = options.stock_item; + } + + return fields; +} + /* * Load StockItemTestResult table */ @@ -1304,18 +1333,11 @@ function loadStockTestResultsTable(table, options) { var filterKey = options.filterKey || options.name || 'stocktests'; - var filters = loadTableFilters(filterKey); - - var params = { + let params = { part: options.part, }; - var original = {}; - - for (var k in params) { - original[k] = params[k]; - filters[k] = params[k]; - } + var filters = loadTableFilters(filterKey, params); setupFilterList(filterKey, table, filterTarget); @@ -1323,7 +1345,7 @@ function loadStockTestResultsTable(table, options) { // Helper function for rendering buttons - var html = `
`; + let html = ''; if (row.requires_attachment == false && row.requires_value == false && !row.result) { // Enable a "quick tick" option for this test result @@ -1334,13 +1356,11 @@ function loadStockTestResultsTable(table, options) { if (!grouped && row.result != null) { var pk = row.pk; - html += makeIconButton('fa-edit icon-blue', 'button-test-edit', pk, '{% trans "Edit test result" %}'); - html += makeIconButton('fa-trash-alt icon-red', 'button-test-delete', pk, '{% trans "Delete test result" %}'); + html += makeEditButton('button-test-edit', pk, '{% trans "Edit test result" %}'); + html += makeDeleteButton('button-test-delete', pk, '{% trans "Delete test result" %}'); } - html += '
'; - - return html; + return wrapButtons(html); } var parent_node = 'parent node'; @@ -1359,7 +1379,7 @@ function loadStockTestResultsTable(table, options) { return '{% trans "No test results found" %}'; }, queryParams: filters, - original: original, + original: params, onPostBody: function() { table.treegrid({ treeColumn: 0, @@ -1407,7 +1427,7 @@ function loadStockTestResultsTable(table, options) { var html = value; if (row.attachment) { - var text = ``; + let text = makeIconBadge('fa-file-alt', ''); html += renderLink(text, row.attachment, {download: true}); } @@ -1559,7 +1579,9 @@ function loadStockTestResultsTable(table, options) { result: {}, value: {}, attachment: {}, - notes: {}, + notes: { + icon: 'fa-sticky-note', + }, stock_item: { value: options.stock_item, hidden: true, @@ -1579,13 +1601,7 @@ function loadStockTestResultsTable(table, options) { var url = `/api/stock/test/${pk}/`; constructForm(url, { - fields: { - test: {}, - result: {}, - value: {}, - attachment: {}, - notes: {}, - }, + fields: stockItemTestResultFields(), title: '{% trans "Edit Test Result" %}', onSuccess: reloadTestTable, }); @@ -1667,65 +1683,50 @@ function locationDetail(row, showLink=true) { } +/* Load data into a stock table with adjustable options. + * Fetches data (via AJAX) and loads into a bootstrap table. + * Also links in default button callbacks. + * + * Options: + * url - URL for the stock query + * params - query params for augmenting stock data request + * buttons - Which buttons to link to stock selection callbacks + * filterList -
    element where filters are displayed + * disableFilters: If true, disable custom filters + */ function loadStockTable(table, options) { - /* Load data into a stock table with adjustable options. - * Fetches data (via AJAX) and loads into a bootstrap table. - * Also links in default button callbacks. - * - * Options: - * url - URL for the stock query - * params - query params for augmenting stock data request - * groupByField - Column for grouping stock items - * buttons - Which buttons to link to stock selection callbacks - * filterList -
      element where filters are displayed - * disableFilters: If true, disable custom filters - */ // List of user-params which override the default filters - options.params['location_detail'] = true; options.params['part_detail'] = true; var params = options.params || {}; - var filterTarget = options.filterTarget || '#filter-list-stock'; + const filterTarget = options.filterTarget || '#filter-list-stock'; - var filters = {}; + const filterKey = options.filterKey || options.name || 'stock'; - var filterKey = options.filterKey || options.name || 'stock'; + let filters = loadTableFilters(filterKey, params); - if (!options.disableFilters) { - filters = loadTableFilters(filterKey); - } - - var original = {}; - - for (var k in params) { - original[k] = params[k]; - } - - setupFilterList(filterKey, table, filterTarget, {download: true}); + setupFilterList(filterKey, table, filterTarget, { + download: true, + report: { + url: '{% url "api-stockitem-testreport-list" %}', + key: 'item', + }, + labels: { + url: '{% url "api-stockitem-label-list" %}', + key: 'item', + } + }); // Override the default values, or add new ones for (var key in params) { filters[key] = params[key]; } - var grouping = true; - - if ('grouping' in options) { - grouping = options.grouping; - } - var col = null; - // Explicitly disable part grouping functionality - // Might be able to add this in later on, - // but there is a bug which makes this crash if paginating on the server side. - // Ref: https://github.com/wenzhixin/bootstrap-table/issues/3250 - // eslint-disable-next-line no-unused-vars - grouping = false; - var columns = [ { checkbox: true, @@ -1863,6 +1864,18 @@ function loadStockTable(table, options) { } return html; + }, + footerFormatter: function(data) { + // Display "total" stock quantity of all rendered rows + let total = 0; + + data.forEach(function(row) { + if (row.quantity != null) { + total += row.quantity; + } + }); + + return total; } }; @@ -2008,9 +2021,107 @@ function loadStockTable(table, options) { title: '{% trans "Purchase Price" %}', sortable: false, formatter: function(value, row) { - return formatCurrency(value, { + let html = formatCurrency(value, { currency: row.purchase_price_currency, }); + + var base = baseCurrency(); + + if (row.purchase_price_currency != base) { + let converted = convertCurrency( + row.purchase_price, + row.purchase_price_currency, + base, + getCurrencyConversionRates(), + ); + + if (converted) { + converted = formatCurrency(converted, {currency: baseCurrency()}); + html += `
      ${converted}`; + } + } + + return html; + } + }); + + // Total value of stock + // This is not sortable, and may default to the 'price range' for the parent part + columns.push({ + field: 'stock_value', + title: '{% trans "Stock Value" %}', + sortable: false, + switchable: true, + formatter: function(value, row) { + let min_price = row.purchase_price; + let max_price = row.purchase_price; + let currency = row.purchase_price_currency; + + if (min_price == null && max_price == null && row.part_detail) { + min_price = row.part_detail.pricing_min; + max_price = row.part_detail.pricing_max; + currency = baseCurrency(); + } + + return formatPriceRange( + min_price, + max_price, + { + quantity: row.quantity, + currency: currency + } + ); + }, + footerFormatter: function(data) { + // Display overall range of value for the selected items + let rates = getCurrencyConversionRates(); + let base = baseCurrency(); + + let min_price = calculateTotalPrice( + data, + function(row) { + return row.quantity * (row.purchase_price || row.part_detail.pricing_min); + }, + function(row) { + if (row.purchase_price) { + return row.purchase_price_currency; + } else { + return base; + } + }, + { + currency: base, + rates: rates, + raw: true, + } + ); + + let max_price = calculateTotalPrice( + data, + function(row) { + return row.quantity * (row.purchase_price || row.part_detail.pricing_max); + }, + function(row) { + if (row.purchase_price) { + return row.purchase_price_currency; + } else { + return base; + } + }, + { + currency: base, + rates: rates, + raw: true, + } + ); + + return formatPriceRange( + min_price, + max_price, + { + currency: base, + } + ); } }); @@ -2032,13 +2143,13 @@ function loadStockTable(table, options) { queryParams: filters, sidePagination: 'server', name: 'stock', - original: original, + original: params, showColumns: true, + showFooter: true, columns: columns, }); var buttons = [ - '#stock-print-options', '#stock-options', ]; @@ -2062,31 +2173,6 @@ function loadStockTable(table, options) { } // Automatically link button callbacks - - $('#multi-item-print-label').click(function() { - var selections = getTableData(table); - - var items = []; - - selections.forEach(function(item) { - items.push(item.pk); - }); - - printStockItemLabels(items); - }); - - $('#multi-item-print-test-report').click(function() { - var selections = getTableData(table); - - var items = []; - - selections.forEach(function(item) { - items.push(item.pk); - }); - - printTestReports(items); - }); - if (global_settings.BARCODE_ENABLE) { $('#multi-item-barcode-scan-into-location').click(function() { var selections = getTableData(table); @@ -2276,21 +2362,17 @@ function loadStockLocationTable(table, options) { params.depth = global_settings.INVENTREE_TREE_DEPTH; } - var filters = {}; - var filterKey = options.filterKey || options.name || 'location'; - if (!options.disableFilters) { - filters = loadTableFilters(filterKey); - } + let filters = loadTableFilters(filterKey, params); - var original = {}; - - for (var k in params) { - original[k] = params[k]; - } - - setupFilterList(filterKey, table, filterListElement, {download: true}); + setupFilterList(filterKey, table, filterListElement, { + download: true, + labels: { + url: '{% url "api-stocklocation-label-list" %}', + key: 'location' + } + }); for (var key in params) { filters[key] = params[key]; @@ -2340,7 +2422,7 @@ function loadStockLocationTable(table, options) { url: options.url || '{% url "api-location-list" %}', queryParams: filters, name: 'location', - original: original, + original: params, sortable: true, showColumns: true, onPostBody: function() { @@ -2487,31 +2569,43 @@ function loadStockLocationTable(table, options) { title: '{% trans "Stock Items" %}', switchable: true, sortable: true, + }, + { + field: 'structural', + title: '{% trans "Structural" %}', + switchable: true, + sortable: false, + formatter: function(value) { + return yesNoLabel(value); + } + }, + { + field: 'external', + title: '{% trans "External" %}', + switchable: true, + sortable: false, + formatter: function(value) { + return yesNoLabel(value); + } } ] }); } +/* + * Load stock history / tracking table for a given StockItem + */ function loadStockTrackingTable(table, options) { var cols = []; - var filterTarget = '#filter-list-stocktracking'; + const filterKey = 'stocktracking'; - var filterKey = 'stocktracking'; + let params = options.params || {}; - var filters = loadTableFilters(filterKey); + let filters = loadTableFilters(filterKey, params); - var params = options.params; - - var original = {}; - - for (var k in params) { - original[k] = params[k]; - filters[k] = params[k]; - } - - setupFilterList(filterKey, table, filterTarget); + setupFilterList(filterKey, table, '#filter-list-stocktracking'); // Date cols.push({ @@ -2585,10 +2679,10 @@ function loadStockTrackingTable(table, options) { html += ''; } - // Purchase Order Information + // PurchaseOrder Information if (details.purchaseorder) { - html += `{% trans "Purchase Order" %}`; + html += `{% trans "Purchase Order" %}`; html += ''; @@ -2604,6 +2698,40 @@ function loadStockTrackingTable(table, options) { html += ''; } + // SalesOrder information + if (details.salesorder) { + html += `{% trans "Sales Order" %}`; + html += ''; + + if (details.salesorder_detail) { + html += renderLink( + details.salesorder_detail.reference, + `/order/sales-order/${details.salesorder}` + ); + } else { + html += `{% trans "Sales Order no longer exists" %}`; + } + + html += ``; + } + + // ReturnOrder information + if (details.returnorder) { + html += `{% trans "Return Order" %}`; + html += ''; + + if (details.returnorder_detail) { + html += renderLink( + details.returnorder_detail.reference, + `/order/return-order/${details.returnorder}/` + ); + } else { + html += `{% trans "Return Order no longer exists" %}`; + } + + html += ``; + } + // Customer information if (details.customer) { @@ -2646,12 +2774,7 @@ function loadStockTrackingTable(table, options) { html += `{% trans "Status" %}`; html += ''; - html += stockStatusDisplay( - details.status, - { - classes: 'float-right', - } - ); + html += stockStatusDisplay(details.status); html += ''; } @@ -2703,7 +2826,7 @@ function loadStockTrackingTable(table, options) { table.inventreeTable({ method: 'get', queryParams: filters, - original: original, + original: params, columns: cols, url: options.url, }); @@ -2738,7 +2861,7 @@ function loadInstalledInTable(table, options) { table.inventreeTable({ url: '{% url "api-stock-list" %}', queryParams: { - installed_in: options.stock_item, + belongs_to: options.stock_item, part_detail: true, }, formatNoMatches: function() { @@ -2789,14 +2912,12 @@ function loadInstalledInTable(table, options) { title: '', switchable: false, formatter: function(value, row) { - var pk = row.pk; - var html = ''; + let pk = row.pk; + let html = ''; - html += `
      `; html += makeIconButton('fa-unlink', 'button-uninstall', pk, '{% trans "Uninstall Stock Item" %}'); - html += `
      `; - return html; + return wrapButtons(html); } } ], @@ -2837,7 +2958,9 @@ function uninstallStockItem(installed_item_id, options={}) { structural: false, } }, - note: {}, + note: { + icon: 'fa-sticky-note', + }, }, preFormContent: function(opts) { var html = ''; diff --git a/InvenTree/templates/js/translated/table_filters.js b/InvenTree/templates/js/translated/table_filters.js index 5035c7178e..8e32862f2d 100644 --- a/InvenTree/templates/js/translated/table_filters.js +++ b/InvenTree/templates/js/translated/table_filters.js @@ -2,23 +2,15 @@ {% load status_codes %} {% load inventree_extras %} -{% include "status_codes.html" with label='stock' options=StockStatus.list %} -{% include "status_codes.html" with label='stockHistory' options=StockHistoryCode.list %} -{% include "status_codes.html" with label='build' options=BuildStatus.list %} -{% include "status_codes.html" with label='purchaseOrder' options=PurchaseOrderStatus.list %} -{% include "status_codes.html" with label='salesOrder' options=SalesOrderStatus.list %} - /* globals global_settings + purchaseOrderCodes, + returnOrderCodes, + salesOrderCodes, */ /* exported - buildStatusDisplay, getAvailableTableFilters, - purchaseOrderStatusDisplay, - salesOrderStatusDisplay, - stockHistoryStatusDisplay, - stockStatusDisplay, */ @@ -26,6 +18,42 @@ function getAvailableTableFilters(tableKey) { tableKey = tableKey.toLowerCase(); + // Filters for "returnorder" table + if (tableKey == 'returnorder') { + return { + status: { + title: '{% trans "Order status" %}', + options: returnOrderCodes + }, + outstanding: { + type: 'bool', + title: '{% trans "Outstanding" %}', + }, + overdue: { + type: 'bool', + title: '{% trans "Overdue" %}', + }, + assigned_to_me: { + type: 'bool', + title: '{% trans "Assigned to me" %}', + }, + }; + } + + // Filters for "returnorderlineitem" table + if (tableKey == 'returnorderlineitem') { + return { + received: { + type: 'bool', + title: '{% trans "Received" %}', + }, + outcome: { + title: '{% trans "Outcome" %}', + options: returnOrderLineItemCodes, + } + }; + } + // Filters for "variant" table if (tableKey == 'variants') { return { @@ -73,7 +101,7 @@ function getAvailableTableFilters(tableKey) { }, inherited: { type: 'bool', - title: '{% trans "Inherited" %}', + title: '{% trans "Gets inherited" %}', }, allow_variants: { type: 'bool', @@ -105,7 +133,7 @@ function getAvailableTableFilters(tableKey) { return { 'inherited': { type: 'bool', - title: '{% trans "Inherited" %}', + title: '{% trans "Gets inherited" %}', }, 'optional': { type: 'bool', @@ -134,6 +162,10 @@ function getAvailableTableFilters(tableKey) { type: 'bool', title: '{% trans "Structural" %}', }, + external: { + type: 'bool', + title: '{% trans "External" %}', + }, }; } @@ -288,6 +320,10 @@ function getAvailableTableFilters(tableKey) { type: 'date', title: '{% trans "Expiry Date after" %}', }, + external: { + type: 'bool', + title: '{% trans "External Location" %}', + } }; // Optional filters if stock expiry functionality is enabled @@ -351,6 +387,25 @@ function getAvailableTableFilters(tableKey) { type: 'bool', title: '{% trans "Assigned to me" %}', }, + assigned_to: { + title: '{% trans "Responsible" %}', + options: function() { + var ownersList = {}; + inventreeGet('{% url "api-owner-list" %}', {}, { + async: false, + success: function(response) { + for (key in response) { + var owner = response[key]; + ownersList[owner.pk] = { + key: owner.pk, + value: `${owner.name} (${owner.label})`, + }; + } + } + }); + return ownersList; + }, + }, }; } @@ -418,6 +473,10 @@ function getAvailableTableFilters(tableKey) { type: 'bool', title: '{% trans "Overdue" %}', }, + assigned_to_me: { + type: 'bool', + title: '{% trans "Assigned to me" %}', + }, }; } diff --git a/InvenTree/templates/js/translated/tables.js b/InvenTree/templates/js/translated/tables.js index 807051e65f..cc38763e14 100644 --- a/InvenTree/templates/js/translated/tables.js +++ b/InvenTree/templates/js/translated/tables.js @@ -9,9 +9,10 @@ customGroupSorter, downloadTableData, getTableData, - reloadtable, + reloadBootstrapTable, renderLink, reloadTableFilters, + constructExpandCollapseButtons, constructOrderTableButtons, */ @@ -19,8 +20,23 @@ * Reload a named table * @param table */ -function reloadtable(table) { - $(table).bootstrapTable('refresh'); +function reloadBootstrapTable(table) { + + let tbl = table; + + if (tbl) { + if (typeof tbl === 'string' || tbl instanceof String) { + tbl = $(tbl); + } + + if (tbl.exists()) { + tbl.bootstrapTable('refresh'); + } else { + console.error(`Invalid table name passed to reloadTable(): ${table}`); + } + } else { + console.error(`Null value passed to reloadTable()`); + } } @@ -98,13 +114,35 @@ function constructOrderTableButtons(options={}) { } +/* + * Construct buttons to expand / collapse all rows in a table + */ +function constructExpandCollapseButtons(table, idx=0) { + + return [ + { + html: ``, + event: function() { + $(table).bootstrapTable('expandAllRows'); + } + }, + { + html: ``, + event: function() { + $(table).bootstrapTable('collapseAllRows'); + } + } + ]; +} + + /* Return the 'selected' data rows from a bootstrap table. * If allowEmpty = false, and the returned dataset is empty, * then instead try to return *all* the data */ function getTableData(table, allowEmpty=false) { - var data = $(table).bootstrapTable('getSelections'); + let data = $(table).bootstrapTable('getSelections'); if (data.length == 0 && !allowEmpty) { data = $(table).bootstrapTable('getData'); @@ -317,6 +355,16 @@ function convertQueryParameters(params, filters) { delete params['original_search']; } + // Enable regex search + if (user_settings.SEARCH_REGEX) { + params['search_regex'] = true; + } + + // Enable whole word search + if (user_settings.SEARCH_WHOLE) { + params['search_whole'] = true; + } + return params; } diff --git a/InvenTree/templates/navbar.html b/InvenTree/templates/navbar.html index 620aaf3eff..1be812c509 100644 --- a/InvenTree/templates/navbar.html +++ b/InvenTree/templates/navbar.html @@ -47,18 +47,23 @@ {% endif %} - {% if roles.sales_order.view %} + {% if roles.sales_order.view or roles.return_order.view %} {% endif %} diff --git a/InvenTree/templates/price_data.html b/InvenTree/templates/price_data.html deleted file mode 100644 index e7cd03e17a..0000000000 --- a/InvenTree/templates/price_data.html +++ /dev/null @@ -1,8 +0,0 @@ -{% load inventree_extras %} -{% load i18n %} - -{% if price %} -{% render_currency price %} -{% else %} -{% trans "No data" %} -{% endif %} diff --git a/InvenTree/templates/search.html b/InvenTree/templates/search.html index 3a855b4c2e..64508e6986 100644 --- a/InvenTree/templates/search.html +++ b/InvenTree/templates/search.html @@ -12,11 +12,6 @@ - @@ -25,15 +20,11 @@
-

- {% trans "Searching" %}... - - - -

-

- {% trans "No search results" %} -

+
+
+ {% trans "Enter search query" %} +
+
diff --git a/InvenTree/templates/status_codes.html b/InvenTree/templates/status_codes.html index e48424477f..6d241352b2 100644 --- a/InvenTree/templates/status_codes.html +++ b/InvenTree/templates/status_codes.html @@ -1,11 +1,15 @@ +{% load report %} + /* * Status codes for the {{ label }} model. + * Generated from the values specified in "status_codes.py" */ const {{ label }}Codes = { - {% for opt in options %}'{{ opt.key }}': { - key: '{{ opt.key }}', - value: '{{ opt.value }}',{% if opt.color %} - label: 'bg-{{ opt.color }}',{% endif %} + {% for entry in data %} + '{{ entry.name }}': { + key: {{ entry.key }}, + value: '{{ entry.label }}',{% if entry.color %} + label: 'bg-{{ entry.color }}',{% endif %} }, {% endfor %} }; @@ -13,33 +17,7 @@ const {{ label }}Codes = { /* * Render the status for a {{ label }} object. * Uses the values specified in "status_codes.py" - * This function is generated by the "status_codes.html" template */ function {{ label }}StatusDisplay(key, options={}) { - - key = String(key); - - var value = null; - var label = null; - - if (key in {{ label }}Codes) { - value = {{ label }}Codes[key].value; - label = {{ label }}Codes[key].label; - } - - // Fallback option for label - label = label || 'bg-dark'; - - if (value == null || value.length == 0) { - value = key; - label = ''; - } - - var classes = `badge rounded-pill ${label}`; - - if (options.classes) { - classes += ' ' + options.classes; - } - - return `${value}`; + return renderStatusLabel(key, {{ label }}Codes, options); } diff --git a/InvenTree/templates/stock_table.html b/InvenTree/templates/stock_table.html index d609e78253..6484f74f0c 100644 --- a/InvenTree/templates/stock_table.html +++ b/InvenTree/templates/stock_table.html @@ -22,18 +22,6 @@
{% endif %} - -
- - -
{% if not read_only %} {% if roles.stock.change or roles.stock.delete %}
diff --git a/InvenTree/templates/third_party_js.html b/InvenTree/templates/third_party_js.html index 0a233114eb..8f6c5eccc3 100644 --- a/InvenTree/templates/third_party_js.html +++ b/InvenTree/templates/third_party_js.html @@ -35,3 +35,4 @@ + diff --git a/InvenTree/users/admin.py b/InvenTree/users/admin.py index 30d63a2156..693840187d 100644 --- a/InvenTree/users/admin.py +++ b/InvenTree/users/admin.py @@ -84,8 +84,8 @@ class RoleGroupAdmin(admin.ModelAdmin): # pragma: no cover RuleSetInline, ] - list_display = ('name', 'admin', 'part_category', 'part', 'stock_location', - 'stock_item', 'build', 'purchase_order', 'sales_order') + list_display = ('name', 'admin', 'part_category', 'part', 'stocktake', 'stock_location', + 'stock_item', 'build', 'purchase_order', 'sales_order', 'return_order') def get_rule_set(self, obj, rule_set_type): """Return list of permissions for the given ruleset.""" @@ -137,6 +137,10 @@ class RoleGroupAdmin(admin.ModelAdmin): # pragma: no cover """Return the ruleset for the Part role""" return self.get_rule_set(obj, 'part') + def stocktake(self, obj): + """Return the ruleset for the Stocktake role""" + return self.get_rule_set(obj, 'stocktake') + def stock_location(self, obj): """Return the ruleset for the StockLocation role""" return self.get_rule_set(obj, 'stock_location') @@ -157,6 +161,10 @@ class RoleGroupAdmin(admin.ModelAdmin): # pragma: no cover """Return the ruleset for the SalesOrder role""" return self.get_rule_set(obj, 'sales_order') + def return_order(self, obj): + """Return the ruleset ofr the ReturnOrder role""" + return self.get_rule_set(obj, 'return_order') + def get_formsets_with_inlines(self, request, obj=None): """Return all inline formsets""" for inline in self.get_inline_instances(request, obj): diff --git a/InvenTree/users/api.py b/InvenTree/users/api.py index 7aa9a8cc02..688b301fad 100644 --- a/InvenTree/users/api.py +++ b/InvenTree/users/api.py @@ -5,11 +5,12 @@ from django.core.exceptions import ObjectDoesNotExist from django.urls import include, path, re_path from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters, permissions, status +from rest_framework import permissions, status from rest_framework.authtoken.models import Token from rest_framework.response import Response from rest_framework.views import APIView +from InvenTree.filters import InvenTreeSearchFilter from InvenTree.mixins import ListAPI, RetrieveAPI, RetrieveUpdateAPI from InvenTree.serializers import UserSerializer from users.models import Owner, RuleSet, check_user_role @@ -137,7 +138,7 @@ class UserList(ListAPI): filter_backends = [ DjangoFilterBackend, - filters.SearchFilter, + InvenTreeSearchFilter, ] search_fields = [ @@ -168,7 +169,7 @@ class GroupList(ListAPI): filter_backends = [ DjangoFilterBackend, - filters.SearchFilter, + InvenTreeSearchFilter, ] search_fields = [ diff --git a/InvenTree/users/migrations/0006_alter_ruleset_name.py b/InvenTree/users/migrations/0006_alter_ruleset_name.py new file mode 100644 index 0000000000..0acf9404fa --- /dev/null +++ b/InvenTree/users/migrations/0006_alter_ruleset_name.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2023-02-16 22:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0005_owner_model'), + ] + + operations = [ + migrations.AlterField( + model_name='ruleset', + name='name', + field=models.CharField(choices=[('admin', 'Admin'), ('part_category', 'Part Categories'), ('part', 'Parts'), ('stocktake', 'Stocktake'), ('stock_location', 'Stock Locations'), ('stock', 'Stock Items'), ('build', 'Build Orders'), ('purchase_order', 'Purchase Orders'), ('sales_order', 'Sales Orders')], help_text='Permission set', max_length=50), + ), + ] diff --git a/InvenTree/users/migrations/0007_alter_ruleset_name.py b/InvenTree/users/migrations/0007_alter_ruleset_name.py new file mode 100644 index 0000000000..b38511dc30 --- /dev/null +++ b/InvenTree/users/migrations/0007_alter_ruleset_name.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-03-14 10:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0006_alter_ruleset_name'), + ] + + operations = [ + migrations.AlterField( + model_name='ruleset', + name='name', + field=models.CharField(choices=[('admin', 'Admin'), ('part_category', 'Part Categories'), ('part', 'Parts'), ('stocktake', 'Stocktake'), ('stock_location', 'Stock Locations'), ('stock', 'Stock Items'), ('build', 'Build Orders'), ('purchase_order', 'Purchase Orders'), ('sales_order', 'Sales Orders'), ('return_order', 'Return Orders')], help_text='Permission set', max_length=50), + ), + ] diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index b754ae65e9..9d4948bdc7 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -21,7 +21,7 @@ logger = logging.getLogger("inventree") class RuleSet(models.Model): - """A RuleSet is somewhat like a superset of the django permission class, in that in encapsulates a bunch of permissions. + """A RuleSet is somewhat like a superset of the django permission class, in that in encapsulates a bunch of permissions. There are *many* apps models used within InvenTree, so it makes sense to group them into "roles". @@ -36,11 +36,13 @@ class RuleSet(models.Model): ('admin', _('Admin')), ('part_category', _('Part Categories')), ('part', _('Parts')), + ('stocktake', _('Stocktake')), ('stock_location', _('Stock Locations')), ('stock', _('Stock Items')), ('build', _('Build Orders')), ('purchase_order', _('Purchase Orders')), ('sales_order', _('Sales Orders')), + ('return_order', _('Return Orders')), ] RULESET_NAMES = [ @@ -97,13 +99,16 @@ class RuleSet(models.Model): 'part_partrelated', 'part_partstar', 'part_partcategorystar', - 'part_partstocktake', 'company_supplierpart', 'company_manufacturerpart', 'company_manufacturerpartparameter', 'company_manufacturerpartattachment', 'label_partlabel', ], + 'stocktake': [ + 'part_partstocktake', + 'part_partstocktakereport', + ], 'stock_location': [ 'stock_stocklocation', 'label_stocklocationlabel', @@ -130,6 +135,8 @@ class RuleSet(models.Model): ], 'purchase_order': [ 'company_company', + 'company_companyattachment', + 'company_contact', 'company_manufacturerpart', 'company_manufacturerpartparameter', 'company_supplierpart', @@ -142,6 +149,8 @@ class RuleSet(models.Model): ], 'sales_order': [ 'company_company', + 'company_companyattachment', + 'company_contact', 'order_salesorder', 'order_salesorderallocation', 'order_salesorderattachment', @@ -149,6 +158,16 @@ class RuleSet(models.Model): 'order_salesorderextraline', 'order_salesordershipment', 'report_salesorderreport', + ], + 'return_order': [ + 'company_company', + 'company_companyattachment', + 'company_contact', + 'order_returnorder', + 'order_returnorderlineitem', + 'order_returnorderextraline', + 'order_returnorderattachment', + 'report_returnorderreport', ] } @@ -166,7 +185,6 @@ class RuleSet(models.Model): 'common_webhookmessage', 'common_notificationentry', 'common_notificationmessage', - 'company_contact', 'users_owner', # Third-party tables @@ -255,8 +273,7 @@ class RuleSet(models.Model): # Print message instead of throwing an error name = getattr(user, 'name', user.pk) - - logger.info(f"User '{name}' failed permission check for {table}.{permission}") + logger.debug(f"User '{name}' failed permission check for {table}.{permission}") return False @@ -445,7 +462,7 @@ def update_group_roles(group, debug=False): group.permissions.add(permission) if debug: # pragma: no cover - logger.info(f"Adding permission {perm} to group {group.name}") + logger.debug(f"Adding permission {perm} to group {group.name}") # Remove any extra permissions from the group for perm in permissions_to_delete: @@ -460,18 +477,18 @@ def update_group_roles(group, debug=False): group.permissions.remove(permission) if debug: # pragma: no cover - logger.info(f"Removing permission {perm} from group {group.name}") + logger.debug(f"Removing permission {perm} from group {group.name}") # Enable all action permissions for certain children models # if parent model has 'change' permission for (parent, child) in RuleSet.RULESET_CHANGE_INHERIT: - parent_change_perm = f'{parent}.change_{parent}' parent_child_string = f'{parent}_{child}' - # Check if parent change permission exists - if parent_change_perm in group_permissions: - # Add child model permissions - for action in ['add', 'change', 'delete']: + # Check each type of permission + for action in ['view', 'change', 'add', 'delete']: + parent_perm = f'{parent}.{action}_{parent}' + + if parent_perm in group_permissions: child_perm = f'{parent}.{action}_{child}' # Check if child permission not already in group @@ -482,7 +499,7 @@ def update_group_roles(group, debug=False): permission = get_permission_object(child_perm) if permission: group.permissions.add(permission) - logger.info(f"Adding permission {child_perm} to group {group.name}") + logger.debug(f"Adding permission {child_perm} to group {group.name}") def clear_user_role_cache(user): @@ -500,6 +517,26 @@ def clear_user_role_cache(user): cache.delete(key) +def get_user_roles(user): + """Return all roles available to a given user""" + + roles = set() + + for group in user.groups.all(): + for rule in group.rule_sets.all(): + name = rule.name + if rule.can_view: + roles.add(f'{name}.view') + if rule.can_add: + roles.add(f'{name}.add') + if rule.can_change: + roles.add(f'{name}.change') + if rule.can_delete: + roles.add(f'{name}.delete') + + return roles + + def check_user_role(user, role, permission): """Check if a user has a particular role:permission combination. @@ -556,6 +593,14 @@ class Owner(models.Model): owner: Returns the Group or User instance combining the owner_type and owner_id fields """ + class Meta: + """Metaclass defines extra model properties""" + # Ensure all owners are unique + constraints = [ + UniqueConstraint(fields=['owner_type', 'owner_id'], + name='unique_owner') + ] + @classmethod def get_owners_matching_user(cls, user): """Return all "owner" objects matching the provided user. @@ -588,14 +633,6 @@ class Owner(models.Model): """Returns the API endpoint URL associated with the Owner model""" return reverse('api-owner-list') - class Meta: - """Metaclass defines extra model properties""" - # Ensure all owners are unique - constraints = [ - UniqueConstraint(fields=['owner_type', 'owner_id'], - name='unique_owner') - ] - owner_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, null=True, blank=True) owner_id = models.PositiveIntegerField(null=True, blank=True) diff --git a/InvenTree/users/serializers.py b/InvenTree/users/serializers.py index 153fd02d8e..9b4fd48353 100644 --- a/InvenTree/users/serializers.py +++ b/InvenTree/users/serializers.py @@ -12,10 +12,6 @@ from .models import Owner class OwnerSerializer(InvenTreeModelSerializer): """Serializer for an "Owner" (either a "user" or a "group")""" - name = serializers.CharField(read_only=True) - - label = serializers.CharField(read_only=True) - class Meta: """Metaclass defines serializer fields.""" model = Owner @@ -26,6 +22,10 @@ class OwnerSerializer(InvenTreeModelSerializer): 'label', ] + name = serializers.CharField(read_only=True) + + label = serializers.CharField(read_only=True) + class GroupSerializer(InvenTreeModelSerializer): """Serializer for a 'Group'""" diff --git a/InvenTree/users/tests.py b/InvenTree/users/tests.py index 5243d111b9..20455ba696 100644 --- a/InvenTree/users/tests.py +++ b/InvenTree/users/tests.py @@ -126,6 +126,7 @@ class RuleSetModelTest(TestCase): # Add some more rules for rule in rulesets: + rule.can_view = True rule.can_add = True rule.can_change = True diff --git a/README.md b/README.md index 21accd5847..05c06dd029 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@

View Demo · - Documentation + Documentation · Report Bug · @@ -59,10 +59,10 @@ Powerful business logic works in the background to ensure that stock tracking hi InvenTree is designed to be **extensible**, and provides multiple options for **integration** with external applications or addition of custom plugins: -* [InvenTree API](https://inventree.readthedocs.io/en/latest/extend/api/) -* [Python module](https://inventree.readthedocs.io/en/latest/extend/python) -* [Plugin interface](https://inventree.readthedocs.io/en/latest/extend/plugins) -* [Third party tools](https://inventree.readthedocs.io/en/latest/extend/integrate) +* [InvenTree API](https://docs.inventree.org/en/latest/api/api/) +* [Python module](https://docs.inventree.org/en/latest/api/python/python/) +* [Plugin interface](https://docs.inventree.org/en/latest/extend/plugins) +* [Third party tools](https://docs.inventree.org/en/latest/extend/integrate) ### :space_invader: Tech Stack @@ -110,12 +110,12 @@ InvenTree is designed to be **extensible**, and provides multiple options for ** ## :toolbox: Getting Started -Refer to the [getting started guide](https://inventree.readthedocs.io/en/latest/start/install/) for installation and setup instructions. +Refer to the [getting started guide](https://docs.inventree.org/en/latest/start/install/) for installation and setup instructions. ## :iphone: Mobile App -InvenTree is supported by a [companion mobile app](https://inventree.readthedocs.io/en/latest/app/app/) which allows users access to stock control information and functionality. +InvenTree is supported by a [companion mobile app](https://docs.inventree.org/en/latest/app/app/) which allows users access to stock control information and functionality.

Android Play Store @@ -129,23 +129,23 @@ InvenTree is supported by a [companion mobile app](https://inventree.readthedocs There are several options to deploy InvenTree. -Single line install - read [the docs](https://inventree.readthedocs.io/en/latest/start/installer/) for supported distros and details about the function: +Single line install - read [the docs](https://docs.inventree.org/en/latest/start/installer/) for supported distros and details about the function: ```bash -wget -Oq install.sh https://get.inventree.org && bash install.sh +wget -qO install.sh https://get.inventree.org && bash install.sh ``` ## :wave: Contributing Contributions are welcomed and encouraged. Please help to make this project even better! -Refer to the [contribution page in the docs ](https://inventree.readthedocs.io/en/latest/contribute/) and check out [contributing.md](CONTRIBUTING.md). +Refer to the [contribution page](CONTRIBUTING.md). ## :scroll: Translation @@ -168,7 +168,7 @@ We would like to acknowledge a few special projects: - [PartKeepr](https://github.com/partkeepr/PartKeepr) as a valuable predecessor and inspiration - [Readme Template](https://github.com/Louis3797/awesome-readme-template) for the template of this page -Find a full list of used third-party libraries in [our documentation](https://inventree.readthedocs.io/en/latest/credits/). +Find a full list of used third-party libraries in [our documentation](https://docs.inventree.org/en/latest/credits/). ## :warning: License diff --git a/contrib/install.sh b/contrib/install.sh index 981263b2d3..e5c21c45eb 100755 --- a/contrib/install.sh +++ b/contrib/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# This script was generated by bashly 0.8.9 (https://bashly.dannyb.co) +# This script was generated by bashly 0.9.4 (https://bashly.dannyb.co) # Modifying it manually is not recommended if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then @@ -86,8 +86,8 @@ root_command() { esac if [[ $SUPPORTED != "true" ]]; then - echo "This OS is currently not supported" - echo "please install manually using https://inventree.readthedocs.io/en/stable/start/install/" + echo "This OS is currently not supported." + echo "Please install manually using https://docs.inventree.org/en/stable/start/install/" echo "or check https://github.com/inventree/InvenTree/issues/3836 for packaging for your OS." echo "If you think this is a bug please file an issue at" echo "https://github.com/inventree/InvenTree/issues/new?template=install.yaml" @@ -149,44 +149,44 @@ install.sh_usage() { fi - printf "Usage:\n" + printf "%s\n" "Usage:" printf " install.sh [SOURCE] [PUBLISHER] [OPTIONS]\n" printf " install.sh --help | -h\n" printf " install.sh --version | -v\n" echo if [[ -n $long_usage ]]; then - printf "Options:\n" + printf "%s\n" "Options:" - echo " --help, -h" + printf " %s\n" "--help, -h" printf " Show this help\n" echo - echo " --version, -v" + printf " %s\n" "--version, -v" printf " Show version number\n" echo - echo " --no-call, -n" + printf " %s\n" "--no-call, -n" printf " Do not call outside APIs (only functionally needed)\n" echo - echo " --dry-run, -d" + printf " %s\n" "--dry-run, -d" printf " Dry run (do not install anything)\n" echo - printf "Arguments:\n" + printf "%s\n" "Arguments:" - echo " SOURCE" + printf " %s\n" "SOURCE" printf " Package source that should be used\n" printf " Allowed: stable, master, main\n" printf " Default: stable\n" echo - echo " PUBLISHER" + printf " %s\n" "PUBLISHER" printf " Publisher that should be used\n" printf " Default: inventree\n" echo - printf "Examples:\n" + printf "%s\n" "Examples:" printf " install\n" printf " install master --no-call\n" printf " install master matmair --dry-run\n" @@ -208,7 +208,7 @@ normalize_input() { input+=("${BASH_REMATCH[2]}") elif [[ $arg =~ ^-([a-zA-Z0-9][a-zA-Z0-9]+)$ ]]; then flags="${BASH_REMATCH[1]}" - for (( i=0 ; i < ${#flags} ; i++ )); do + for ((i = 0; i < ${#flags}; i++)); do input+=("-${flags:i:1}") done else @@ -221,14 +221,14 @@ normalize_input() { inspect_args() { readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) - if (( ${#args[@]} )); then + if ((${#args[@]})); then echo args: for k in "${sorted_keys[@]}"; do echo "- \${args[$k]} = ${args[$k]}"; done else echo args: none fi - if (( ${#other_args[@]} )); then + if ((${#other_args[@]})); then echo echo other_args: echo "- \${other_args[*]} = ${other_args[*]}" @@ -240,19 +240,25 @@ inspect_args() { parse_requirements() { - case "${1:-}" in - --version | -v ) - version_command - exit - ;; + while [[ $# -gt 0 ]]; do + case "${1:-}" in + --version | -v) + version_command + exit + ;; - --help | -h ) - long_usage=yes - install.sh_usage - exit - ;; + --help | -h) + long_usage=yes + install.sh_usage + exit + ;; - esac + *) + break + ;; + + esac + done action="root" @@ -260,47 +266,47 @@ parse_requirements() { key="$1" case "$key" in - --no-call | -n ) + --no-call | -n) - args[--no-call]=1 - shift - ;; - - --dry-run | -d ) - - args[--dry-run]=1 - shift - ;; - - -?* ) - printf "invalid option: %s\n" "$key" >&2 - exit 1 - ;; - - * ) - - if [[ -z ${args[source]+x} ]]; then - - args[source]=$1 + args['--no-call']=1 shift - elif [[ -z ${args[publisher]+x} ]]; then + ;; - args[publisher]=$1 + --dry-run | -d) + + args['--dry-run']=1 shift - else - printf "invalid argument: %s\n" "$key" >&2 + ;; + + -?*) + printf "invalid option: %s\n" "$key" >&2 exit 1 - fi + ;; - ;; + *) + + if [[ -z ${args['source']+x} ]]; then + + args['source']=$1 + shift + elif [[ -z ${args['publisher']+x} ]]; then + + args['publisher']=$1 + shift + else + printf "invalid argument: %s\n" "$key" >&2 + exit 1 + fi + + ;; esac done - [[ -n ${args[source]:-} ]] || args[source]="stable" - [[ -n ${args[publisher]:-} ]] || args[publisher]="inventree" + [[ -n ${args['source']:-} ]] || args['source']="stable" + [[ -n ${args['publisher']:-} ]] || args['publisher']="inventree" - if [[ ! ${args[source]} =~ ^(stable|master|main)$ ]]; then + if [[ ! ${args['source']} =~ ^(stable|master|main)$ ]]; then printf "%s\n" "source must be one of: stable, master, main" >&2 exit 1 fi @@ -322,9 +328,12 @@ run() { normalize_input "$@" parse_requirements "${input[@]}" - if [[ $action == "root" ]]; then - root_command - fi + case "$action" in + "root") + root_command + ;; + + esac } initialize diff --git a/contrib/installer/src/root_command.sh b/contrib/installer/src/root_command.sh index 7c260c0c37..58293c037e 100644 --- a/contrib/installer/src/root_command.sh +++ b/contrib/installer/src/root_command.sh @@ -76,8 +76,8 @@ case "$OS" in esac if [[ $SUPPORTED != "true" ]]; then - echo "This OS is currently not supported" - echo "please install manually using https://inventree.readthedocs.io/en/stable/start/install/" + echo "This OS is currently not supported." + echo "Please install manually using https://docs.inventree.org/en/stable/start/install/" echo "or check https://github.com/inventree/InvenTree/issues/3836 for packaging for your OS." echo "If you think this is a bug please file an issue at" echo "https://github.com/inventree/InvenTree/issues/new?template=install.yaml" diff --git a/docker-compose.yml b/docker-compose.yml index f9bc6f98b5..2a034fe7f0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,7 +31,7 @@ services: - POSTGRES_DB=inventree volumes: # Map 'data' volume such that postgres database is stored externally - - ./data:/var/lib/postgresql/data + - ./data:/var/lib/postgresql/data:z restart: unless-stopped # InvenTree web server service @@ -40,7 +40,7 @@ services: container_name: inventree-dev-server depends_on: - inventree-dev-db - build: + build: &build_config context: . target: dev # Cache the built image to be used by the inventree-dev-worker process @@ -50,7 +50,7 @@ services: - 8000:8000 volumes: # Mount local source directory to /home/inventree - - ./:/home/inventree + - ./:/home/inventree:z env_file: - docker.dev.env restart: unless-stopped @@ -59,12 +59,13 @@ services: inventree-dev-worker: container_name: inventree-dev-worker image: inventree-dev-image + build: *build_config command: invoke worker depends_on: - inventree-dev-server volumes: # Mount local source directory to /home/inventree - - ./:/home/inventree + - ./:/home/inventree:z env_file: - docker.dev.env restart: unless-stopped diff --git a/docker/init.sh b/docker/init.sh index 75f6f53d26..caf0266c51 100644 --- a/docker/init.sh +++ b/docker/init.sh @@ -49,8 +49,5 @@ fi cd ${INVENTREE_HOME} -# Collect translation file stats -invoke translate-stats - # Launch the CMD *after* the ENTRYPOINT completes exec "$@" diff --git a/requirements-dev.in b/requirements-dev.in index 0aaf254401..1a35909ede 100644 --- a/requirements-dev.in +++ b/requirements-dev.in @@ -3,6 +3,7 @@ coverage # Unit test coverage coveralls==2.1.2 # Coveralls linking (for tracking coverage) # PINNED 2022-06-28 - Old version needed for correct upload django-debug-toolbar # Debug / profiling toolbar +django-slowtests # Show which unit tests are running slowly django-test-migrations # Unit testing for database migrations flake8 # PEP checking flake8-docstrings # docstring format testing diff --git a/requirements-dev.txt b/requirements-dev.txt index ba6861e813..ec575b2be8 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -10,9 +10,9 @@ asgiref==3.6.0 \ # via # -c requirements.txt # django -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ @@ -24,9 +24,82 @@ cfgv==3.3.1 \ --hash=sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426 \ --hash=sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736 # via pre-commit -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.1.0 \ + --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ + --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ + --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ + --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ + --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ + --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ + --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ + --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ + --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ + --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ + --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ + --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ + --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ + --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ + --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ + --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ + --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ + --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ + --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ + --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ + --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ + --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ + --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ + --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ + --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ + --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ + --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ + --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ + --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ + --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ + --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ + --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ + --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ + --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ + --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ + --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ + --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ + --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ + --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ + --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ + --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ + --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ + --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ + --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ + --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ + --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ + --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ + --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ + --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ + --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ + --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ + --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ + --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ + --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ + --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ + --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ + --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ + --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ + --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ + --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ + --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ + --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ + --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ + --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ + --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ + --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ + --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ + --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ + --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ + --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ + --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ + --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ + --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ + --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ + --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab # via # -c requirements.txt # requests @@ -98,16 +171,20 @@ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -django==3.2.16 \ - --hash=sha256:18ba8efa36b69cfcd4b670d0fa187c6fe7506596f0ababe580e16909bcdec121 \ - --hash=sha256:3adc285124244724a394fa9b9839cc8cd116faf7d159554c43ecdaa8cdf0b94d +django==3.2.18 \ + --hash=sha256:08208dfe892eb64fff073ca743b3b952311104f939e7f6dae954fe72dcc533ba \ + --hash=sha256:4d492d9024c7b3dfababf49f94511ab6a58e2c9c3c7207786f1ba4eb77750706 # via # -c requirements.txt # django-debug-toolbar + # django-slowtests django-debug-toolbar==3.8.1 \ --hash=sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27 \ --hash=sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478 # via -r requirements-dev.in +django-slowtests==1.1.1 \ + --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 + # via -r requirements-dev.in django-test-migrations==1.2.0 \ --hash=sha256:874884ff4e980583cd9f1c986bb9fbfe72b436e759be23004e4f52c26a15f363 \ --hash=sha256:9e8b9b4364fef70dde10a5f85c5a75d447ca2189ec648325610fab1268daec97 @@ -115,9 +192,9 @@ django-test-migrations==1.2.0 \ docopt==0.6.2 \ --hash=sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491 # via coveralls -filelock==3.9.0 \ - --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ - --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d +filelock==3.10.7 \ + --hash=sha256:892be14aa8efc01673b5ed6589dbccb95f9a8596f0507e232626155495c18105 \ + --hash=sha256:bde48477b15fde2c7e5a0713cbe72721cb5a5ad32ee0b8f419907960b9d75536 # via virtualenv flake8==6.0.0 \ --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ @@ -126,13 +203,13 @@ flake8==6.0.0 \ # -r requirements-dev.in # flake8-docstrings # pep8-naming -flake8-docstrings==1.6.0 \ - --hash=sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde \ - --hash=sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b +flake8-docstrings==1.7.0 \ + --hash=sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af \ + --hash=sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75 # via -r requirements-dev.in -identify==2.5.12 \ - --hash=sha256:0bc96b09c838310b6fcfcc61f78a981ea07f94836ef6ef553da5bb5d4745d662 \ - --hash=sha256:e8a400c3062d980243d27ce10455a52832205649bbcaf27ffddb3dfaaf477bad +identify==2.5.22 \ + --hash=sha256:f0faad595a4687053669c112004178149f6c326db71ee999ae4636685753ad2f \ + --hash=sha256:f7a93d6cf98e29bd07663c60728e7a4057615068d7a639d132dc883b2d54d31e # via pre-commit idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -140,9 +217,9 @@ idna==3.4 \ # via # -c requirements.txt # requests -isort==5.11.4 \ - --hash=sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6 \ - --hash=sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b +isort==5.12.0 \ + --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ + --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 # via -r requirements-dev.in mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ @@ -152,45 +229,45 @@ nodeenv==1.7.0 \ --hash=sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e \ --hash=sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b # via pre-commit -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 - # via build -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via build pep8-naming==0.13.3 \ --hash=sha256:1705f046dfcd851378aac3be1cd1551c7c1e5ff363bacad707d43007877fa971 \ --hash=sha256:1a86b8c71a03337c97181917e2b472f0f5e4ccb06844a0d6f0a33522549e7a80 # via -r requirements-dev.in -pip-tools==6.12.1 \ - --hash=sha256:88efb7b29a923ffeac0713e6f23ef8529cc6175527d42b93f73756cc94387293 \ - --hash=sha256:f0c0c0ec57b58250afce458e2e6058b1f30a4263db895b7d72fd6311bf1dc6f7 +pip-tools==6.12.3 \ + --hash=sha256:480d44fae6e09fad3f9bd3d0a7e8423088715d10477e8ef0663440db25e3114f \ + --hash=sha256:8510420f46572b2e26c357541390593d9365eb6edd2d1e7505267910ecaec080 # via -r requirements-dev.in -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.2.0 \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e # via virtualenv -pre-commit==2.21.0 \ - --hash=sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658 \ - --hash=sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad +pre-commit==3.2.1 \ + --hash=sha256:a06a7fcce7f420047a71213c175714216498b49ebc81fe106f7716ca265f5bb6 \ + --hash=sha256:b5aee7d75dbba21ee161ba641b01e7ae10c5b91967ebf7b2ab0dfae12d07e1f1 # via -r requirements-dev.in pycodestyle==2.10.0 \ --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 # via flake8 -pydocstyle==6.2.2 \ - --hash=sha256:021b33525927b43b4469c2715694c38082cb98146b52342df652b30806e3cb61 \ - --hash=sha256:5714e3a96f6ece848a1c35f581e89f3164867733609f0dd8a99f7e7c6b526bdd +pydocstyle==6.3.0 \ + --hash=sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019 \ + --hash=sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1 # via flake8-docstrings pyflakes==3.0.1 \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd # via flake8 -pytz==2022.7 \ - --hash=sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a \ - --hash=sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build +pytz==2023.3 \ + --hash=sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588 \ + --hash=sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb # via # -c requirements.txt # django @@ -238,9 +315,9 @@ pyyaml==6.0 \ # via # -c requirements.txt # pre-commit -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.28.2 \ + --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ + --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf # via # -c requirements.txt # coveralls @@ -258,26 +335,26 @@ sqlparse==0.4.3 \ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via build +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via - # build - # pep517 -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e - # via django-test-migrations -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 + # -c requirements.txt + # django-test-migrations +urllib3==1.26.15 \ + --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ + --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 # via # -c requirements.txt # requests -virtualenv==20.17.1 \ - --hash=sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4 \ - --hash=sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058 +virtualenv==20.21.0 \ + --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ + --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via pre-commit -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 # via pip-tools # WARNING: The following packages were not pinned, but pip requires them to be diff --git a/requirements.in b/requirements.in index 2959017fa9..5ab78a112a 100644 --- a/requirements.in +++ b/requirements.in @@ -1,12 +1,12 @@ # Please keep this list sorted - if you pin a version provide a reason Django>=3.2.14,<4 # Django package coreapi # API documentation for djangorestframework -cryptography==3.4.8 # Core cryptographic functionality +cryptography>=40.0.0 # Core cryptographic functionality django-allauth # SSO for external providers via OpenID django-allauth-2fa # MFA / 2FA django-cleanup # Automated deletion of old / unused uploaded files django-cors-headers # CORS headers extension for DRF -django-crispy-forms # Form helpers +django-crispy-forms<2.0 # Form helpers # FIXED 2023-02-18 due to required updates in the new version django-dbbackup # Backup / restore of database and media files django-error-report # Error report viewer for the admin interface django-filter # Extended filtering options @@ -27,6 +27,7 @@ django-user-sessions # user sessions in DB django-weasyprint # django weasyprint integration djangorestframework # DRF framework django-xforwardedfor-middleware # IP forwarding metadata +drf-spectacular # DRF API documentation feedparser # RSS newsfeed parser gunicorn # Gunicorn web server pdf2image # PDF to image conversion diff --git a/requirements.txt b/requirements.txt index 6b7cae5815..cbfc82c78e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,11 +8,13 @@ arrow==1.2.3 # via django-q asgiref==3.6.0 # via django -babel==2.11.0 +attrs==22.2.0 + # via jsonschema +babel==2.12.1 # via py-moneyed -bleach[css]==5.0.1 +bleach[css]==6.0.0 # via django-markdownify -blessed==1.19.1 +blessed==1.20.0 # via django-q brotli==1.0.9 # via fonttools @@ -24,13 +26,13 @@ cffi==1.15.1 # via # cryptography # weasyprint -charset-normalizer==2.1.1 +charset-normalizer==3.1.0 # via requests coreapi==2.3.3 # via -r requirements.in coreschema==0.0.4 # via coreapi -cryptography==3.4.8 +cryptography==40.0.1 # via # -r requirements.in # pyjwt @@ -42,7 +44,7 @@ defusedxml==0.7.1 # python3-openid diff-match-patch==20200713 # via django-import-export -django==3.2.16 +django==3.2.18 # via # -r requirements.in # django-allauth @@ -70,15 +72,16 @@ django==3.2.16 # django-weasyprint # django-xforwardedfor-middleware # djangorestframework -django-allauth==0.52.0 + # drf-spectacular +django-allauth==0.54.0 # via # -r requirements.in # django-allauth-2fa django-allauth-2fa==0.10.0 # via -r requirements.in -django-cleanup==6.0.0 +django-cleanup==7.0.0 # via -r requirements.in -django-cors-headers==3.13.0 +django-cors-headers==3.14.0 # via -r requirements.in django-crispy-forms==1.14.0 # via -r requirements.in @@ -86,11 +89,11 @@ django-dbbackup==4.0.2 # via -r requirements.in django-error-report==0.2.0 # via -r requirements.in -django-filter==22.1 +django-filter==23.1 # via -r requirements.in django-formtools==2.4 # via -r requirements.in -django-ical==1.8.3 +django-ical==1.8.4 # via -r requirements.in django-import-export==2.5.0 # via -r requirements.in @@ -98,13 +101,13 @@ django-js-asset==2.0.0 # via django-mptt django-maintenance-mode==0.18.0 # via -r requirements.in -django-markdownify==0.9.2 +django-markdownify==0.9.3 # via -r requirements.in django-money==2.1.1 # via -r requirements.in django-mptt==0.11.0 # via -r requirements.in -django-otp==1.1.4 +django-otp==1.1.6 # via django-allauth-2fa django-picklefield==3.1 # via django-q @@ -129,12 +132,16 @@ django-weasyprint==2.2.0 django-xforwardedfor-middleware==2.0 # via -r requirements.in djangorestframework==3.14.0 + # via + # -r requirements.in + # drf-spectacular +drf-spectacular==0.25.1 # via -r requirements.in et-xmlfile==1.1.0 # via openpyxl feedparser==6.0.10 # via -r requirements.in -fonttools[woff]==4.38.0 +fonttools[woff]==4.39.3 # via weasyprint gunicorn==20.1.0 # via -r requirements.in @@ -144,27 +151,31 @@ icalendar==5.0.4 # via django-ical idna==3.4 # via requests -importlib-metadata==6.0.0 +importlib-metadata==6.1.0 # via markdown +inflection==0.5.1 + # via drf-spectacular itypes==1.2.0 # via coreapi jinja2==3.1.2 # via coreschema -markdown==3.4.1 +jsonschema==4.17.3 + # via drf-spectacular +markdown==3.4.3 # via django-markdownify markuppy==1.14 # via tablib -markupsafe==2.1.1 +markupsafe==2.1.2 # via jinja2 oauthlib==3.2.2 # via requests-oauthlib odfpy==1.4.1 # via tablib -openpyxl==3.0.10 +openpyxl==3.1.2 # via tablib -pdf2image==1.16.2 +pdf2image==1.16.3 # via -r requirements.in -pillow==9.4.0 +pillow==9.5.0 # via # -r requirements.in # django-stdimage @@ -178,12 +189,16 @@ py-moneyed==1.2 # django-money pycparser==2.21 # via cffi -pydyf==0.5.0 +pydyf==0.6.0 # via weasyprint pyjwt[crypto]==2.6.0 # via django-allauth -pyphen==0.13.2 +pyphen==0.14.0 # via weasyprint +pypng==0.20220715.0 + # via qrcode +pyrsistent==0.19.3 + # via jsonschema python-barcode[images]==0.14.0 # via -r requirements.in python-dateutil==2.8.2 @@ -191,20 +206,21 @@ python-dateutil==2.8.2 # arrow # django-recurrence # icalendar -python-fsutil==0.9.1 +python-fsutil==0.10.0 # via django-maintenance-mode python3-openid==3.2.0 # via django-allauth -pytz==2022.7 +pytz==2023.3 # via - # babel # django # django-dbbackup # djangorestframework # icalendar pyyaml==6.0 - # via tablib -qrcode[pil]==7.3.1 + # via + # drf-spectacular + # tablib +qrcode[pil]==7.4.2 # via # -r requirements.in # django-allauth-2fa @@ -214,16 +230,16 @@ redis==3.5.3 # via # django-q # django-redis -regex==2022.10.31 +regex==2023.3.23 # via -r requirements.in -requests==2.28.1 +requests==2.28.2 # via # coreapi # django-allauth # requests-oauthlib requests-oauthlib==1.3.1 # via django-allauth -sentry-sdk==1.12.1 +sentry-sdk==1.18.0 # via # -r requirements.in # django-q-sentry @@ -239,7 +255,7 @@ sqlparse==0.4.3 # via # django # django-sql-utils -tablib[html,ods,xls,xlsx,yaml]==3.3.0 +tablib[html,ods,xls,xlsx,yaml]==3.4.0 # via # -r requirements.in # django-import-export @@ -248,13 +264,17 @@ tinycss2==1.1.1 # bleach # cssselect2 # weasyprint +typing-extensions==4.5.0 + # via qrcode uritemplate==4.1.1 - # via coreapi -urllib3==1.26.13 + # via + # coreapi + # drf-spectacular +urllib3==1.26.15 # via # requests # sentry-sdk -wcwidth==0.2.5 +wcwidth==0.2.6 # via blessed weasyprint==54.3 # via @@ -270,7 +290,7 @@ xlrd==2.0.1 # via tablib xlwt==1.3.0 # via tablib -zipp==3.11.0 +zipp==3.15.0 # via importlib-metadata zopfli==0.2.2 # via fonttools diff --git a/tasks.py b/tasks.py index 0bfff3f39d..a63dc73f6f 100644 --- a/tasks.py +++ b/tasks.py @@ -88,6 +88,22 @@ def manage(c, cmd, pty: bool = False): ), pty=pty) +def check_file_existance(filename: str, overwrite: bool = False): + """Checks if a file exists and asks the user if it should be overwritten. + + Args: + filename (str): Name of the file to check. + overwrite (bool, optional): Overwrite the file without asking. Defaults to False. + """ + if Path(filename).is_file() and overwrite is False: + response = input("Warning: file already exists. Do you want to overwrite? [y/N]: ") + response = str(response).strip().lower() + + if response not in ['y', 'yes']: + print("Cancelled export operation") + sys.exit(1) + + # Install tasks @task def plugins(c): @@ -305,13 +321,7 @@ def export_records(c, filename='data.json', overwrite=False, include_permissions print(f"Exporting database records to file '{filename}'") - if Path(filename).is_file() and overwrite is False: - response = input("Warning: file already exists. Do you want to overwrite? [y/N]: ") - response = str(response).strip().lower() - - if response not in ['y', 'yes']: - print("Cancelled export operation") - sys.exit(1) + check_file_existance(filename, overwrite) tmpfile = f"{filename}.tmp" @@ -559,7 +569,7 @@ def test(c, disable_pty=False): pty = not disable_pty # Run coverage tests - manage(c, 'test', pty=pty) + manage(c, 'test --slowreport', pty=pty) @task(help={'dev': 'Set up development environment at the end'}) @@ -578,7 +588,7 @@ def setup_test(c, ignore_update=False, dev=False, path="inventree-demo-dataset") # Get test data print("Cloning demo dataset ...") - c.run(f'git clone https://github.com/inventree/demo-dataset {path} -v') + c.run(f'git clone https://github.com/inventree/demo-dataset {path} -v --depth=1') print("========================================") # Make sure migrations are done - might have just deleted sqlite database @@ -620,4 +630,14 @@ def coverage(c): )) # Generate coverage report - c.run('coverage html') + c.run('coverage html -i') + + +@task(help={ + 'filename': "Output filename (default = 'schema.yml')", + 'overwrite': "Overwrite existing files without asking first (default = off/False)", +}) +def schema(c, filename='schema.yml', overwrite=False): + """Export current API schema.""" + check_file_existance(filename, overwrite) + manage(c, f'spectacular --file {filename}')